静态链表求并集(C语言实现)

该博客介绍了一种在没有指针类型的语言中使用一维数组来描述线性链表的方法,并提供了静态链表的初始化、插入元素、遍历及求两个静态链表并集的函数实现。通过示例代码详细展示了如何合并两个链表,从而得到不重复元素的并集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        对于线性链表,也可用一维数组来进行描述。这种描述方法便于在没有指针类型的高级程序设计语言中使用链表结构。此处就是利用静态链表实现并集的基本操作:

void Unionnode(Node L1[], Node L2[], Node L3[], int num1, int num2)
{
	int i = 0;
	int j = 0;
	int jug = 0;
	int k = 0;
	Initnode(L3);
	for (i = 2; i < num2 + 2;i++)
	{
		L3[i].cur = L2[i].cur;
		L3[i].data = L2[i].data;
	}
	L3[0].cur = num2 + 2;
	k = L3[0].cur;
	for (i = 2; i < num1 + 2; i++)
	{
		jug = 0;
		for (j = 2; j < num2 + 2; j++)
		{
			if (L1[i].data == L2[j].data)
			{
				break;
			}
			jug++;
		}
		if (jug == num2)
		{
			L3[k].data = L1[i].data;
			k = L3[k].cur;

		}

	}

			L3[k - 1].cur = 0;
			L3[num2 + 1].cur = num2 + 2;
}

全部代码如下:

#include<stdio.h>
#define MAXSIZE 100


typedef struct Node
{
	int data;
	int cur;
}Node;

//静态链表初始化
void Initnode(Node L[])
{
	int i = 0;
	for (i = 1; i < MAXSIZE; i++)
	{
		L[i].cur = i + 1;
	}
	L[MAXSIZE - 1].cur = 0;
	L[0].cur = -1;

}

//在静态链表中直接插入元素
void Setnode(Node L[], int num)
{
	int a = 0;
	int i = 0;
	printf("请依次输入链表中的元素:\n");
	for (i = 1; i < num + 1; i++)
	{
		a = L[i].cur;
		scanf("%d", &L[a].data);
	}
	L[num + 1].cur = 0;
	L[0].cur = num + 2;
}


//遍历静态链表
void Printnode(Node L[])
{
	int i = 1;
	printf("两者的并集为:");
	while (L[i].cur)
	{
		i = L[i].cur;
		printf("  %d", L[i].data);
		
	}
}

//两个静态链表求并集
void Unionnode(Node L1[], Node L2[], Node L3[], int num1, int num2)
{
	int i = 0;
	int j = 0;
	int jug = 0;
	int k = 0;
	Initnode(L3);
	for (i = 2; i < num2 + 2;i++)
	{
		L3[i].cur = L2[i].cur;
		L3[i].data = L2[i].data;
	}
	L3[0].cur = num2 + 2;
	k = L3[0].cur;
	for (i = 2; i < num1 + 2; i++)
	{
		jug = 0;
		for (j = 2; j < num2 + 2; j++)
		{
			if (L1[i].data == L2[j].data)
			{
				break;
			}
			jug++;
		}
		if (jug == num2)
		{
			L3[k].data = L1[i].data;
			k = L3[k].cur;

		}

	}
			L3[k - 1].cur = 0;
			L3[num2 + 1].cur = num2 + 2;
	
}


int main()
{
	int i = 0;
	Node L1[MAXSIZE], L2[MAXSIZE], L3[MAXSIZE];
	int num1 = 0;
	int num2 = 0;
	printf("*********静态链表求并集*********\n");
	Initnode(L1);
	Initnode(L2);
	printf("请输入创建链表1的元素个数:\n");
	scanf("%d", &num1);
	Setnode(L1, num1);
	printf("请输入创建链表2的元素个数:\n");
	scanf("%d", &num2);
	Setnode(L2, num2);
	Unionnode(L1, L2,L3,num1, num2);
	Printnode(L3);


}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值