mian.cpp文件
#include <stdio.h>
#include <stdbool.h>
#include "LNodeLinkList.h"
int main()
{
LNodeLinkList *LA;
LNodeLinkList *LB;
ElemType e;
int A[10] = {1,2,3,4,5,6,7,8,9,10};
int B[10] = {2,3,45,19,23,47,1,35,32,12};
CreateLNodeLinkList_A(LA,A,10); //使用尾插法将数组A的元素插入链表
printf("集合A:");
ShowLNodeLinkList(LA);
CreateLNodeLinkList_B(LB,B,10); //使用头插法将数组B的元素插入链表
printf("集合B:");
ShowLNodeLinkList(LB);
int length_suzhu_A = LNodeLinkListLength(LA);
int length_suzhu_B = LNodeLinkListLength(LB);
printf("集合A的长度:%5d\n",length_suzhu_A);
printf("集合B的长度:%5d\n",length_suzhu_B);
int i = 1;
while(i <= length_suzhu_B)
{
int Elem = GetElemInLNodeLinkList_B(LB,i,e);
if(LocalElemLNodeLinkList_A(LA,Elem) != NULL)
{
i++;
}
else
{
length_suzhu_A++;
InsertLNodeLinkList_A(LA,length_suzhu_A,e);
}
}
printf("集合 AUB 为:");
ShowLNodeLinkList(LA);
return 1;
}
LNodeLinkList.h文件
#include <stdio.h>
#include <stdbool.h>
#include <malloc.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data; //data域
struct LNode *next; //next域
}LNodeLinkList;
void CreateLNodeLinkList_A(LNodeLinkList * &L,ElemType suzhu_A[],int length_A) //尾插法
{
LNodeLinkList *r;
LNodeLinkList *temp;
L = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
r = L;
/*
for(int i = 1; i <= length_A; i++)
{
temp = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
temp->data = suzhu_A[i-1];
r->next = temp;
r = temp;
}
*/
int i = 1;
while(i <= length_A)
{
temp = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
temp->data = suzhu_A[i-1];
r->next = temp;
r = temp;
i++;
}
r->next = NULL;
}
void CreateLNodeLinkList_B(LNodeLinkList * &L,ElemType suzhu_B[],int length_B) //头插法 ,需要将 L->next(首原结点) 赋予 NULL
{
LNodeLinkList *temp;
L = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
L->next = NULL;
/*
for(int i = 1; i <= length_B; i++)
{
temp = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
temp->data = suzhu_B[i-1];
temp->next = L->next;
L->next = temp;
}
*/
int i = 1;
while(i <= length_B)
{
temp = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
temp->data = suzhu_B[i-1];
temp->next = L->next;
L->next = temp;
i++;
}
}
void ShowLNodeLinkList(LNodeLinkList *L) //展示链表
{
LNodeLinkList *p;
p = L->next;
while(p != NULL)
{
printf("%5d",p->data);
p = p->next;
}
printf("\n");
}
int LNodeLinkListLength(LNodeLinkList *L) //求链表的长度
{
int length = 0;
LNodeLinkList *p;
p = L->next;
while(p != NULL)
{
length++;
p = p->next;
}
return length;
}
int GetElemInLNodeLinkList_B(LNodeLinkList *L,int weizhi_B,ElemType &e) //查找集合 B 中的某一个元素,并取出其 e 值
{
LNodeLinkList *r;
r = L;
/*
int j = 1;
while(r != NULL && j <= weizhi_B)
{
j++;
r = r->next;
}
*/
for(int i = 1; i <= weizhi_B; i++)
{
if(r != NULL)
{
r = r->next;
}
else
{
break;
}
}
if(r == NULL)
{
return 0;
}
else
{
e = r->data;
return e;
}
}
bool LocalElemLNodeLinkList_A(LNodeLinkList *L,ElemType e)
{
LNodeLinkList *p;
p = L->next;
int index_A = 1;
while(p != NULL && p->data != e)
{
p = p->next;
index_A++;
}
if(p != NULL)
{
return true;
}
else
{
return false;
}
}
int InsertLNodeLinkList_A(LNodeLinkList * &L,int length_A,ElemType e) //将 集合B 中提取出的元素(集合A没有)插入到 集合A 中
{
LNodeLinkList *s;
LNodeLinkList *p;
p = L;
int index_A = 1;
/*
if(length_A <= 0)
{
return 0;
}
while(p != NULL && index_A <= length_A-1)
{
index_A++;
p = p->next;
}
if(p == NULL)
{
return 0;
}
else
{
s = (LNodeList *)malloc(sizeof(LNodeList));
s->data = e;
s->next = p->next;
p->next = s;
return 1;
}
*/
length_A--;
if(length_A > 0)
{
/*
while(p != NULL && index_A <= length_A)
{
index_A++;
p = p->next;
}
if(p != NULL)
{
s = (LNodeList *)malloc(sizeof(LNodeList));
s->data = e;
s->next = p->next;
p->next = s;
return 1;
}
*/
for(;index_A <= length_A; index_A++)
{
if(p != NULL)
{
p = p->next;
}
else
{
break;
}
}
if(p != NULL)
{
s = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
s->data = e;
s->next = p->next;
p->next = s;
return 1;
}
}
else
{
return 0;
}
}
运行结果