静态链表的合并
typestruct.h
#define MAX_SIZE 1000
typedef struct {
int data;
int cur;
}compont,SLinkLIist[MAX_SIZE];
//初始化一个空的静态链表
void InitSpace_SL(SLinkLIist S);
//从空闲节点中取一个节点
int Malloc_SL(SLinkLIist L);
//将删除的元素释放保存在空闲节点的第一个位置
void Free_SL(SLinkLIist L, int k);
void difference(SLinkLIist L, int *S);
functionRealize.c
#include "typeStruct.h"
#include "stdio.h"
#include "stdlib.h"
//初始化一个空的静态链表
void InitSpace_SL(SLinkLIist S) {
S[0].cur = 1;//头节点属于元素的节点
for (int i = 1; i < MAX_SIZE - 1; i++)
{
S[i].cur = i + 1;
}
S[MAX_SIZE - 1].cur = 0;
}
//从空闲节点中取一个节点
int Malloc_SL(SLinkLIist L) {
int i = L[0].cur;
if (L[0].cur) {
L[0].cur = L[i].cur;
}
return i;
}
//将删除的元素释放保存在空闲节点的第一个位置
void Free_SL(SLinkLIist L, int k) {
L[k].cur = L[0].cur;
L[0].cur = k;
}
void difference(SLinkLIist L) {
int m,n,i,r,b,p,k,s;
InitSpace_SL(L);
//返回开辟空间的下标
s = Malloc_SL(L);//生成S的头结点
r = s;//r指向S的当前最后结点
//输入链表A和链表B中的元素个数
printf("请输入链表A和链表B元素的个数\n");
scanf("%d,%d",&m,&n);
printf("请输入链表A元素的值\n");
//生成链表A
for (int j = 1; j <=m; j++)
{
i = Malloc_SL(L);
//输入元素的值
scanf("%d",&L[i].data);
L[r].cur = i;
r = i;
}
L[r].cur = 0;
printf("请输入链表B元素的值\n");
for (int j =1 ; j <=n; j++)
{
scanf("%d",&b);
p = s;
k = L[s].cur;
//判断元素是否存在链表A中
while (k!=L[r].cur&&L[k].data!=b)
{
p = k;
k = L[k].cur;
}
//如果不存在链表LA中则插入链表
if (k == L[r].cur) {
i = Malloc_SL(L);
L[i].data = b;
L[i].cur = L[r].cur;
L[r].cur = i;
}
else {
//如果存在链表LA中则删除该元素
L[p].cur = L[k].cur;
Free_SL(L,k);
if (r==k)
{
r = p;
}
}
}
}
staticLinkListUnion.c
#include "typeStruct.h"
void main() {
SLinkLIist L;
int S=0;
difference(L,&S);
}