C语言错误问题求助,
发布网友
发布时间:2023-04-03 10:42
我来回答
共2个回答
热心网友
时间:2024-12-03 08:05
你的C语言链表程序,我帮你改完了,你看看吧.(改动的地方见注释)
主要是创建链表函数CreateListR的参数LinkNode *&L定义有问题多了一个&符,还有就是函数CreateListR中少写了一句r=s;
# include<stdio.h>
# include<malloc.h>
# define MaxSize 50
typedef char ElemType;
typedef struct LNode
{ ElemType data;
struct LNode *next;
int length;
}LinkNode;
void CreateListR(LinkNode *L,ElemType a[],int n);
bool ListInsert(LinkNode *L,int i,ElemType e);
bool ListDelete(LinkNode *L,int i,ElemType *e);
void DispList(LinkNode *L);
int main()
{
LinkNode *L;
ElemType e;
char a[5]={'a','b','c','d','e'};
L=(LinkNode *)malloc(sizeof(LinkNode));
L->length=0;
CreateListR(L,a,5);
if(ListInsert(L,4,'f'))printf("插入成功\n"); //这里加一个换行符\n
if(ListDelete(L,3,&e))printf("第三个元素%c删除成功\n",e);//这里加一个换行符\n
DispList(L);
return 0;
}
void CreateListR(LinkNode *L,ElemType a[],int n)//这里LinkNode *&L,改成LinkNode *L,
{ LinkNode *s,*r;
r=L;
for(int i=0;i<n;i++){
s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=a[i];
r->next=s;
r=s; //这里加一句
}
r->next=NULL;
}
bool ListInsert(LinkNode *L,int i,ElemType e)
{ int j=0;
LinkNode *p=L;LinkNode *s;
if(i<=0)return false;
while(j<i-1&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{ s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
}
bool ListDelete(LinkNode *L,int i,ElemType *e)
{ int j=0;
LinkNode *p=L,*q;
if(i<=0)return false;
while(j<i-1&&p!=NULL)
{ j++;
p=p->next;
}
if(p==NULL)
return false;
else
{ q=p->next;
if(q==NULL)
return false;
*e=q->data;
p->next=q->next;
free(q);
return true;
}
}
void DispList(LinkNode *L)
{ LinkNode *p=L->next;
while(p!=NULL)
{ printf("%c",p->data);
p=p->next;
}
printf("\n");
}
运行结果
插入成功
第三个元素c删除成功
abfde
热心网友
时间:2024-12-03 08:05
函数声明的地方写错了,void CreateListR(LinkNode *L,ElemType a[],int n); 要改成 void CreateListR(LinkNode *&L,ElemType a[],int n);