静态链表——例2-3

#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; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值