C語言 循環單鏈錶的基本功能(幫忙改錯~~)
#include <stdio.h>#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct LNode
{
ElemType data;
int next;
}StaticList[MaxSize];
void CreatList(StaticList L,ElemType a[],int n)
{
int i;
L[0].next=1;
for(i=1;i<=n;i++)
{
strcpy(L[i].data,a[i-1]);
L[i].next=i+1;
}
L[n].next=0;
}
void InitList(StaticList L)
{
int j;
L[0].next=0;
for(j=1;j<MaxSize;j++)
L[j].next=-1;
}
int ListInsert(StaticList L,int i,ElemType e)
{
int j=L[0].next,j1,j2,k;
if (i==1)
{ if(j==0)
{ strcpy(L[1].data,e);
L[0].next=1;
L[1].next=0;
return 1;
}
else
{ k=j+1;
while(k!=j)
if(L[k].next==-1)
break;
else
k=(k+1)%MaxSize;
if(k!=j)
{ strcpy(L[k].data,e);
L[k].next=L[0].next;
L[0].next=k;
return 1;
}
else return 0;
}
}
else
{
k=0;
while (k<i-2&&j!=0)
{
k++;
j=L[j].next;
}
if(j==0)
return 0;
else
{ j1=j;
j2=L[j].next;
k=j+1;
while(k!=j)
if(L[k].next==-1)
break;
else
k=(k+1)%MaxSize;
if(k!=j)
{
strcpy(L[k].data,e);
L[j1].next=k;
L[k].next=j2;
return 1;
}
else return 0;
}
}
}
void DispList(StaticList L)
{
int j=0;
while (L[j].next!=0)
{ j=L[j].next;
printf("%d:%s,%d\n",j,L[j].data,L[j].next);
}
printf("\n");
}
int ListLength(StaticList L)
{
int i=0,j=0;
while(L[j].next!=0)
{ i++;
j=L[j].next;
}
return(i);
}
int ListEmpty(StaticList L)
{
return(L[0].next==0);
}
int GetElem(StaticList *L,int i,ElemType &e)
{
int k=0,j=L[0].next;
while(k<i-1&&j!=0)
{
k++;
j=L[j].next;
}
if (j==0)
return 0;
else
{ strcpy(e,L[j].data);
return 1;
}
}
int LocateElem(StaticList L,ElemType e)
{
int j=L[0].next;
int i=1;
while(j!=0&&strcmp(L[j].data,e)!=0)
{ j=L[j].next;
i++;
}
if(j==0)
return(0);
else
return(i);
}
int ListDelete(StaticList L,int i,ElemType &e)
{
int j=L[0].next,j1,k;
if(L[0].next==0)
return(0);
if (i==1)
{ j1=L[0].next;
L[0].next=L[j1].next;
strcpy(e,L[j1].data)
L[j1].next=-1;
return(1);
}
else
{ k=0;
while(k<i-2&&j!=0)
{ k++;
j=L[j].next;
}
if(j==0)
return 0;
else
{ if(L[j].next==0)
return(0);
j1=L[j].next;
L[j].next=L[j1].next;
strcpy(e,L[j1].data);
L[j1].next=-1;
return 1;
}
}
}
void DestroyList(SqList *&L)
{
free(L);
}
int main()
{
LinkList *h;
ElemType e;
printf("(1)初始化单链表h\n");
InitList(h);
printf("(2)依次采用尾插法插入a,b,c,d,e元素\n");
ListInsert(h,1,'a');
ListInsert(h,2,'b');
ListInsert(h,3,'c');
ListInsert(h,4,'d');
ListInsert(h,5,'e');
printf("(3)输出单链表h:");
DispList(h);
printf("(4)单链表h长度=%d\n",ListLength(h));
printf("(5)单链表h为%s\n",(ListEmpty(h)?"空":"非空"));
GetElem(h,3,e);
printf("(6)单链表h的第3个元素=%c\n",e);
printf("(7)元素a的位置=%d\n",LocateElem(h,'a'));
printf("(8)在第4个元素位置上插入f元素\n");
ListInsert(h,4,'f');
printf("(9)输出单链表h:");
DispList(h);
printf("(10)删除h的第3个元素\n");
ListDelete(h,3,e);
printf("(11)输出单链表h:");
DispList(h);
printf("(12)释放单链表h\n");
DestroyList(h);
}
TC-win 提示GetElem那個方法頭語法錯誤 請高手幫幫忙