静态链表提问
这是从严蔚敏,数据结构出写出来的,(作了一点点修改)程序代码:
#include<stdio.h> #define MAXSIZE 1000 typedef struct { int data; //存储数据 int cur; //相当于 *next }component,SLinkList[MAXSIZE]; void InitSpace(SLinkList *space) //初始化 { //将一维数组space中各分量链成一个备用链表,space[0].cur为头指针,"0"表示空指针。 int i; for(i=0;i<MAXSIZE-1;++i) space[i]->cur = i + 1; space[MAXSIZE-1]->cur = 0; } int Malloc(SLinkList *space) { //若备用空间链表非空,则返回分配的结点下标,否则返回0 int i; i = space[0]->cur; if(space[0]->cur) space[0]->cur = space[i]->cur; //相当于逐渐向前移 return i; } void Free(SLinkList *space,int k) { //将下标为k的空闲结点回收到备用链表 space[k]->cur = space[0]->cur; space[0]->cur = k; } int LocateElem(SLinkList s,int e) { //在静态单链线性表L中查找第1个值为e的元素 int i; i = s[0].cur; while(i && s[i].data!=e) i = s[i].cur; //i = s[i].cur相当于p = p->next; return i; } void difference(SLinkList *space) { //依次输入集合A和B的元素,在一维数组space中建立表示集合(A-B)U(B-A) //的静态链表,S为头指针,假设备用空间足够大,space[0].cur为其头指针。 int s; int r,p,m,n,j,i,b,k; InitSpace(space); //初始化备用空间 s = Malloc(space); //生成S的头结点 r = s; //r指向s的当前最后结点 r取得第一个位置 printf("please enter A and B elements\n"); scanf("%d,%d",&m,&n); //输入A和B的元素个数 for(j=1;j<=m;++j) //建立集合A的链表 { i = Malloc(space); //分配结点 i取得第二个位置 scanf("%d",&space[i]->data);//输入A元素值 space[r]->cur = i; //插入到结尾 r = i; } space[r]->cur = 0; //尾结点指针为空 for(j=1;j<=n;++j) //依次输入B的元素,若不在当前表中,则插入否则删除 { scanf("%d",&b); //先取得数据 p = s; k = space[s]->cur; //指向集合A中第一个结点 即有数据的结点 while(k!=space[r]->cur && space[k]->data!=b) //当前表中查找 { p = k; //接收找到 b 的位置 k = space[k]->cur;//向前移 } if(k==space[r]->cur) //当前表中不存在该元素,插入在r所指结点之后,且r的位置不变 { i = Malloc(space); space[i]->data = b; space[i]->cur = space[r]->cur; space[r]->cur = i; } else //该元素存在表中,删除 { space[p]->cur = space[k]->cur; Free(space,k); if(r==k) r = p; //若删除的是r所指结点,则需修改尾指针 } } } /*void display(SLinkList *space) { int i,head; head = space[0]->cur; for(i=0;i<20;i++) { printf("%d,%d\n",space[head]->cur,space[head]->data); head = space[head]->cur; } printf("\n"); }*/ void main() { SLinkList ss; difference(&ss); //display(&ss); }
为什么运行时会有问题呢?请大大们指教下.