无头结点链表删除结点问题(数据结构c)!!!
解决时间 2021-12-28 11:45
- 提问者网友:藍了天白赴美
- 2021-12-28 02:05
错误显示:
error C2143: syntax error : missing ';' before 'type‘
error C2065: 'e' : undeclared identifier
error C2065: 'i' : undeclared identifier
warning C4047: 'return' : 'struct LNode *' differs in levels of indirection from 'int '
warning C4013: 'LocateElem' undefined; assuming extern returning int
具体编码如下:
#include"stdio.h"
#include"malloc.h"
typedef char ElemType;
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LinkList;//LNode,* LinkList;
LinkList *CreateList_L(LinkList * L)
{
//Linklist *L=NULL;
LinkList *p;
ElemType temp;
printf("请输入结点值(输入0结束):");
fflush(stdin); //清除键盘缓冲区
scanf("%c",&temp);
while(temp!='0')
{
p=(LinkList *)malloc(sizeof(LinkList));
p->data=temp;
p->next=L;L=p;
scanf("%c",&temp);
}return L;
int LocateElem(struct LinkList * L,ElemType e)
{
char e;
LinkList * p=L->next;
int i=1;
while(p!=NULL&&p->data!=e)
{
p=p->next;
i++;
}
if(p==NULL)
{
printf("输入的元素不存在!\n");
return(0);
}
else
return(i);
}
int ListDel_L(LinkList * L,int i,ElemType e)
{
int j=0;
LinkList *p=L,*q;
while(j {
j++;
p=p->next;
}
if(p==NULL)
return 0;
else
{
q=p->next;
if(q==NULL) return 0;
e=q->data;
p->next=q->next;
free(q);
printf("恭喜您,删除成功!\n");
return 1;
}
}
void ListPint_L(LinkList * L)
{
LinkList * p;
int i=0;
p=L->next;
if(p == NULL)
{
printf("链表中没有元素!\n");
return;
}
while(p!=NULL)
{
i++;
printf("第%d个元素是:",i);
printf("%c\n",p->data);
p=p->next;
}
}
void main()
{
int i;
char cmd,e;
LinkList * L;
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
CreateList_L(L);
ListPint_L(L);
do
{
printf("请选择命令:\n");
printf("1,进行删除\n");
printf("2,退出\n");
do
{
fflush(stdin);
scanf("%c",&cmd);
}while((cmd!='1')&&(cmd!='2'));
switch(cmd)
{
case'1':
printf("请输入你要删除的元素:");
fflush(stdin);
scanf("%c",&e);
i=LocateElem(L,e);
ListDel_L(L,i,e);
ListPint_L(L);
break;
}
}while(cmd!='2');
}
望高手速速进来解决下!!!
修改完后,怎么创建不了链表?!
最佳答案
- 五星知识达人网友:雾月
- 2022-01-06 09:48
#include"stdio.h"
#include"malloc.h"
typedef char ElemType;
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LinkList;//LNode,* LinkList;
LinkList *CreateList_L(LinkList * L)
{
//Linklist *L=NULL;
LinkList *p;
ElemType temp;
printf("请输入结点值(输入0结束):");
fflush(stdin); //清除键盘缓冲区
scanf("%c",&temp);
while(temp!='0')
{
p=(LinkList *)malloc(sizeof(LinkList));
p->data=temp;
p->next=L;L=p;
scanf("%c",&temp);
}
return L;
}
int LocateElem(LinkList * L,ElemType e)
{
LinkList * p=L->next;
int i=1;
while(p!=NULL&&p->data!=e)
{
p=p->next;
i++;
}
if(p==NULL)
{
printf("输入的元素不存在!\n");
return(0);
}
else
return(i);
}
int ListDel_L(LinkList * L,int i,ElemType e)
{
int j=0;
LinkList *p=L,*q;
while(j
{
j++;
p=p->next;
}
if(p==NULL)
return 0;
else
{
q=p->next;
if(q==NULL) return 0;
e=q->data;
p->next=q->next;
free(q);
printf("恭喜您,删除成功!\n");
return 1;
}
}
void ListPint_L(LinkList * L)
{
LinkList * p;
int i=0;
p=L->next;
if(p == NULL)
{
printf("链表中没有元素!\n");
return;
}
while(p!=NULL)
{
i++;
printf("第%d个元素是:",i);
printf("%c\n",p->data);
p=p->next;
}
}
void main()
{
int i;
char cmd,e;
LinkList * L;
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
CreateList_L(L);
ListPint_L(L);
do
{
printf("请选择命令:\n");
printf("1,进行删除\n");
printf("2,退出\n");
do
{
fflush(stdin);
scanf("%c",&cmd);
}while((cmd!='1')&&(cmd!='2'));
switch(cmd)
{
case'1':
printf("请输入你要删除的元素:");
fflush(stdin);
scanf("%c",&e);
i=LocateElem(L,e);
ListDel_L(L,i,e);
ListPint_L(L);
break;
}
}while(cmd!='2');
}
这样改就行了:
有三处错误:
1) while(temp!='0')
{
p=(LinkList *)malloc(sizeof(LinkList));
p->data=temp;
p->next=L;L=p;
scanf("%c",&temp);
}
return L;
}
int LocateElem(LinkList * L,ElemType e)
{
LinkList * p=L->next;
int i=1;
while(p!=NULL&&p->data!=e)
{
p=p->next;
i++;
}
if(p==NULL)
{
printf("输入的元素不存在!\n");
return(0);
}
else
return(i);
}
你这个函数是嵌套定义的
2) int LocateElem(struct LinkList * L,ElemType e)
第一个参数应改为LinkList *L
3)
int LocateElem(stLinkList * L,ElemType e)
{
char e;
LinkList * p=L->next;
char e重复定义,应删去。
全部回答
- 1楼网友:三千妖杀
- 2022-01-06 09:53
// 合并链表b到链表a中。要求a是增序表或空表。不破坏b表数据。 void merge(struct student *a,struct student *b) { // a∪bstruct student *t,*pa,*pb;int flag;for(pb = b->next; pb; pb = pb->next) {flag = 1;t = (struct student *)malloc(len);*t = *pb;//memcpy((void *)t, (void *)pb, len);for(pa = a; pa->next && flag; pa = pa->next) {if(pa->next->num >= t->num) {t->next = pa->next;pa->next = t;flag = 0;}}if(flag) {pa->next = t;t->next = null;}}}
我要举报
大家都在看
推荐资讯