关于静态链表

严蔚敏版C语言的书,关于静态链表的算法没看明白,谁能个解释下这是我写的代码,报错,求解啊,写了一晚上代码还报错的孩子伤不起啊#include<stdio.h>#define MAX 30typedef struct{ char a; int cur;}SLinkList[MAX];SLinkList space;void InitSpace(SLinkList space)//创建备用链表{ int i; for(i=0;i<MAX-1;i++) space[i].cur=i+1;//建立属于静态链表数据元素之间的关系 space[MAX-1].cur=0;}int MallocSL(SLinkList space)//返回分配结点的下标,即开辟存储空间{ int i=space[0].cur; if(space[0].cur) space[0].cur=space[i].cur; return i;}int main(){ InitSpace(space);//创建一个静态链表 int s,r,i,j,k,m,n,p; char b; s=MallocSL(space);//生成s头结点 r=s; printf("请输入AB集合元素个数尀n"); scanf("%d%d",&m,&n); printf("输入A中的元素尀n"); for(j=1;j<m;j++) { i=MallocSL(space); scanf("%c",&space[i].a); space[r].cur=i; r=i; } space[r].cur=0;//尾结点指针为空 printf("请输入B中元素尀n"); for(j=1;j<=n;j++) { scanf("%c",&b); p=s,k=space[s].cur; if(k==space[r].cur)//当前表中不存在该元素 插入r所指结点之后 { i=MallocSL(space);//再次开辟一个内存空间 space[i].a=b; space[i].cur=space[r].cur; space[i].cur=i; } else space[p].cur=space[k].cur; } printf("处理后的链表为尀n"); for(i=2;space[i].cur!=0;i=space[i].cur) printf("%c",space[i].a); return 0;}
2026年09月24日 07:58
有1个网友回答
网友(1):

我不知道你的链表想做什么.
#include
#include
#define MAX 30
struct _list
{
char a;
union {
int cur;
struct _list* next;
};
} ;
typedef _list * SLinkList;

SLinkList MallocSL(SLinkList father=NULL);
SLinkList InitSpace(SLinkList space1)//创建备用链表
{
return MallocSL();
}

SLinkList MallocSL(SLinkList father)
//返回分配结点的下标,即开辟存储空间
{
//你这个函数没有分配空间。 分配空间应该用malloc返回指针而不是int。
SLinkList newlist=NULL;
newlist=(SLinkList)malloc(sizeof(struct _list)*MAX);//一次分配30个链表。
if (!father)return newlist;
father[MAX-1].next=newlist;//设置最后一个元素指向新链表。
return newlist;
}
不知道你想干什么 main 函数你自己写吧.