静态链表的合并

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);

}

 

posted on 2017-09-21 18:25  paulversion  阅读(434)  评论(0编辑  收藏  举报