#include <stdio.h>
#include <stdlib.h>
#define MaxSize 1000
typedef int Status;
typedef struct snode{
int data;
int cur;
}StaticList[MaxSize];
Status MallocList(StaticList L);
void InitList(StaticList L)
{
for(int i=0;i<=MaxSize-2;i++)
{
L[i].cur=i+1;
}
L[MaxSize-2].cur=0;
L[MaxSize-1].cur=0;
}
Status MallocList(StaticList L)
{
int Cur=L[0].cur;
if(Cur!=0)
L[0].cur=L[Cur].cur;
return Cur;
}
void PrintfList(StaticList L,int s)
{
for(int i=L[s].cur;i!=0;i=L[i].cur)
{
printf("%d ",L[i].data);
}
printf("\n");
}
void FreeList(StaticList L,int pos)
{
L[pos].cur=L[0].cur;
L[0].cur=pos;
}
int main(void)
{
int na,nb;
StaticList L;
InitList(L);
int s=MallocList(L);//生成s的头结点
int r=s;//r指向s的当前指针
printf("请输入La的个数:");
scanf("%d",&na);
printf("请输入Lb的个数:");
scanf("%d",&nb);
printf("请输入%d个元素组成的La链表\n",na);
for(int i=1;i<=na;i++)
{
int j=MallocList(L);
scanf("%d",&L[j].data);
L[r].cur=j;
r=j;//指针指向j
}
L[r].cur=0;//尾结点的指针为空
printf("请输入%d个元素组成的Lb链表\n",nb);
for(int i=1;i<=nb;i++)
{
int t;
scanf("%d",&t);
int p=s;//p相当于指针,指向s的指针,头结点
int k=L[s].cur;//k为指向集合a中的第一个结点
while(k!=L[r].cur&&L[k].data!=t)//k不到最后一个结点同时没有相同的数
{
p=k;
k=L[k].cur;//指向下一个结点
}
if(k==L[r].cur)//说明前面没有相同的数,则需要插入,这里直接插入到最后面
{
int j=MallocList(L);
L[j].data=t;
L[j].cur=L[r].cur;
L[r].cur=j;
}
else//说明有相同的数
{
L[p].cur=L[k].cur;//相当于删除
FreeList(L,k);
if(r==k)//如果是最后一个结点与之相同,那么就要将r往前移
r=p;
}
}
PrintfList(L,s);
return 0;
}
静态链表——例2-3
最新推荐文章于 2024-10-02 00:05:48 发布