c语言实现的链表集合的并集与交集
#include
#include
typedef int Datatype;//定表的点义义义义义义
typedef struct LNode{
Datatype data;
LNode *next;
}LNode,*LinkList;
bool InitLink(LinkList &L) //初始化表义义
{
L =(LinkList)malloc(sizeof(LNode));
if(L==NULL){
return false;
}
L->next=NULL;
return true;
}
bool InsertData(LinkList &L,Datatype data) //向表中插入数据义义义义义义义{
LinkList pa=L;
while(pa->next!=NULL){
pa=pa->next;
}
LinkList p=(LinkList)malloc(sizeof(LNode));//新建数据点义义
if(p==NULL){
printf("插入数据失\n");义
return false;
}
p->data=data;
p->next=NULL;
if(pa==NULL){
pa=p;
}else{
pa->next=p;
}
return true;
}
void createLink(LinkList &L){
printf("义义入要插入的数据,以0义束!\n");
Datatype data;
scanf("%d",&data);
while(data!=00){
InsertData(L,data);
scanf("%d",&data);
}
}
void printLink(LinkList L)//打印表义义
{
LinkList p=L->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
bool merger(LinkList La,LinkList Lb,LinkList &Lc)//两个表求并集义义义义义,并将果存放在义义义义义Lc中{
LinkList pa,pb;
pb=Lb->next; //用于循义
pa=La->next;
while(pa!=NULL){ //以La义义义义义基,若B中的数据在A义义义义义中不存在,插入到Lc
中
InsertData(Lc,pa->data);
pa=pa->next;//pos表示la义义义义义义义义义中最后一个数据点,用于插入数据
}
bool flag=false;
while(pb!=NULL){
pa=La->next;
flag=false; //用于判断B中的数据是否在A中存在
while(pa!=NULL){
if(pa->data==pb->data){
flag=false;
break; //如果存在,本次循束义义义义义义义
}
else{
flag=true;
}
pa=pa->next; //pa向后移义
}
if(flag){
/*LinkList p=(LinkList)malloc(sizeof(LNode)); //注的代是用于将义义义义义义义义A和B合并之后存放在A中
if(p==NULL){
printf("插入数据失\n");义
return false;
}
p->data=pb->data;
p->next=NULL;
pos->next=p;
pos=p;*/
InsertData(Lc,pb->data); //将B中的数据插入到Lc中
}
pb=pb->next;
}
return true;
}
bool Intersection(LinkList La,LinkList Lb,LinkList &Lc)//两个表求交集,果存放在义义义义义义义义义义义Lc中{
LinkList pa,pb;
pb=Lb->next;
while(pb!=NULL){
pa=La->next;
while(pa!=NULL){
if(pa->data==pb->data){ //求交集,只需找到两个义义义义义义义义义中共同的数据,插入到Lc中即可
InsertData(Lc,pa->data);
}
pa=pa->next;
}
pb=pb->next;}
return true;
}
int main()
{
LinkList La,Lb,Lc;if(!InitLink(La)){
printf("初始化表失义义义义");
exit(1);
}
if(!InitLink(Lb)){
printf("初始化表失义义义义");
exit(1);
}
if(!InitLink(Lc)){
printf("初始化表失义义义义");
exit(1);
}
printf("义义义建第一条表\n");createLink(La);printf("义义义建第二条表\n");createLink(Lb);printf("义义表中的数据\n");
printf("La: ");printLink(La);
printf("Lb: ");printLink(Lb);
printf("义表求并集\n");
merger(La,Lb,Lc);printf("合并之后表中的数据义义义义义义义\n");printLink(Lc);
printf("义表求交集\n");
if(!InitLink(Lc)){
printf("初始化表失义义义义");
exit(1);
}
Intersection(La,Lb,Lc);
printf("求交之后表中的数据义义义义义义义\n");printLink(Lc);
return(0);
}
本文档为【c语言实现的链表集合的并集与交集】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。