永发信息网

无头结点链表删除结点问题(数据结构c)!!!

答案:2  悬赏:60  手机版
解决时间 2021-12-28 11:45
错误显示:
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');
}
望高手速速进来解决下!!!
修改完后,怎么创建不了链表?!
最佳答案
#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重复定义,应删去。
全部回答
// 合并链表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;}}}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
梦幻西游还能坚持多久 会不会垮。。。
银行卡被吞 为什么去要的时候工作人员说没有
压抑的生活 什么时候才是尽头歌词
头条号靠什么赚钱
中国历史上第一部白话长篇小说是?
工作去龙发装饰好还是去高度装饰好
用的手机是iPhone 6,充电的时候戴着ur.beats
下面这块地种了三种蔬菜,请你根据图中数据完
水利水电基本建设工程单元工程质量等级评定标
从保定到杭州 铁路怎么走
出租车行驶不超过3km时收费14元 超过3km时 按
屏幕有水印怎么办
想了解中国上下五千年,看哪些书最好呢!谢谢
好吃用英语怎么说
单选题以家庭为单位、男耕女织、自给自足的小
推荐资讯
北京缘和榻榻米的总部在哪儿?
有没有一个快递叫联通快递的?
油笔画在衣服和衣服柜上,怎样才能把它处理干
单选题在生存斗争中获胜而生存下来的个体一般
车载地泵和拖泵有什么区别?
怎么把升换成克
法国旅游有什么值得购买的东西?
单选题《旧唐书》记载:“文武将吏,擅自署置
世纪用英语怎么说
寻衅滋事致二人轻微伤可以私下调解在检查院不
《格列佛游记》里面的“慧因国”,英文怎么说
有没有什么好看的les小说..不要虐的 最好是现
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?