//c语言版数据结构(奇迹冬瓜)-链表实战(1)A=AUB
//题目:假设利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A∪B
//思想:
/*
主函数:
初始化集合A和集合B
给A和B集合输入元素
当集合B中的元素不到最后一个元素时
{
取出B中的元素
和A中的元素比较
if(A没有B有)
{
插入A的集合里面
}
}
输出合并后的集合
*/
/*
void main()
{
List *A=InitL();
List *B=InitL();
Data d;
InputData(A,5);
InputData(B,4);
while(NULL!=B->next)
{
d=GetData(B);
if(Compare(A,d))
{
Insert(A,d);
}
B=B->next;
}
Output(A);
}
*/
//-----------头文件---------------
#include<stdio.h>
#include<stdlib.h>
//-----------宏定义---------------
#define TRUE 1
#define ERROR 0
#define OVERFLOW -2
//-----------结构体和替换---------
typedef int Data;
typedef struct Node
{
Data d;
struct Node *next;
}List,*NList;
//-----------函数----------------
int InitL(NList L);
int InputData(NList L,int n);
Data GetData(NList L);
int Compare(NList L,Data d);
void Insert(NList L,Data d);
void OutPut(NList L);
//----------主函数--------------
void main()
{
List La,Lb,*A=&La,*B=&Lb;
int n;
Data d;
InitL(A);InitL(B);
printf("输入集合A的元素个数:");
scanf("%d",&n);
InputData(A,n);
printf("输入集合B的元素个数:");
scanf("%d",&n);
InputData(B,n);
B=B->next;
while(B)
{
d=GetData(B);
printf("---%d---\n",d);
if(Compare(A,d))
{
Insert(A,d);
}
B=B->next;
}
OutPut(A);
}
//----------其余函数--------------
int InitL(NList L)
{
if(!(L=(NList)malloc(sizeof(List))))
{
exit(OVERFLOW);
}
L->next=NULL;
return TRUE;
}
int InputData(NList L,int n)
{
NList TempNode=L,StartNode=L,NewNode;
printf("输入元素:");
for(;n>0;n--)
{
if(!(NewNode=(NList)malloc(sizeof(List))))
{
exit(OVERFLOW);
}
scanf("%d",&NewNode->d);
TempNode->next=NewNode;
NewNode->next=NULL;
TempNode=NewNode;
}
L=StartNode;
return TRUE;
}
Data GetData(NList L)
{
return L->d;
}
int Compare(NList L,Data d)
{
NList TempL=L->next,StartL=L;
while(TempL->next)
{
if(d==TempL->d)
{
return ERROR;
}
TempL=TempL->next;
}
L=StartL;
return TRUE;
}
void Insert(NList L,Data d)
{
NList TempL=L->next,StartL=L,NewNode;
while(TempL->next)
{
TempL=TempL->next;
}
if(!(NewNode=(NList)malloc(sizeof(List))))
{
exit(OVERFLOW);
}
NewNode->d=d;
TempL->next=NewNode;
NewNode->next=NULL;
L=StartL;
}
void OutPut(NList L)
{
NList TempL=L->next,StartL=L;
printf("A=AUB=");
while(TempL)
{
printf("%d ",TempL->d);
TempL=TempL->next;
}
L=StartL;
getchar();
getchar();
}