您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 顺序表和链式表求并集交集和差集
/*系统总体说明:用顺序表和单链表分别实现求集合的并集、交集和差集。完成功能的详细说明:1.将集合当成一个线性表。2.输入并创建集合,分别以顺序表和链表作为存储结构。3.实现两个集合的并集、交集和差集运算。4.显示集合,查看运算结果。5.用户界面包括以下功能:创建\交集\并集\差集\显示\退出交:从一个集合中取出一个元素,在另一个集合中查找,如果有它就是交中的元素,如果没有再从第一个集合中取出第二个元素,如此进行,知道第一个集合中的元素全部取遍得到的就是这两个元素的交。并:并也类似,关键就是判断这个元素是否都在这两个集合中出现。差:差更简单,就是交中判断是否是第二个集合中元素的结果想反*/#includeiostream#includestdio.h#includefstreamusingnamespacestd;typedefintDataType;#defineMAXSIZE10typedefstruct//顺序表的定义{DataTypedata[MAXSIZE+MAXSIZE];intlen;//顺序表的长度}seqList;voidInit_seqList(seqList&L)//顺序表的初始化{cout初始化成功!endl;L.len=0;}voidset_seqList(seqList&L)//顺序表中输入集合的元素{intlen;DataTypea;inti=0;cout输入线性表的长度为:endl;cinlen;cout输入线性表的元素为:endl;while(ilen){if(L.len=MAXSIZE){cout输入的值超出了范围。endl;return;}cout请输入第i+1个元素:;cina;for(intj=0;jL.len;j++){if(a==L.data[j]){cout不能输入重复值,需要再次输入:endl;break;}}if(j==L.len){L.data[i]=a;L.len++;i++;}}}voidoutput_seqList(seqList&L)//顺序表中输出集合的元素{cout输出线性表的元素为endl;for(inti=0;iL.len;i++){coutL.data[i];}coutendl;}voidbjsort(seqList&L1,seqList&L2)//用顺序表求并集{inti,j;seqListL4;Init_seqList(L4);L4.len=L2.len;for(i=0;iL4.len;i++){inta;a=L2.data[i];L4.data[i]=a;}intn=0;for(i=0;iL1.len;i++){j=0;while((jL2.len)&&(L2.data[j]!=L1.data[i]))j++;if(j==L2.len){L4.data[L4.len]=L1.data[i];L4.len++;}}cout求并集后的集合为:endl;for(i=0;iL4.len;i++){coutL4.data[i];}coutendl;}voidjjsort(seqList&L1,seqList&L2)//用顺序表求交集{inti,j;seqListL3;Init_seqList(L3);intn=0;for(i=0;iL1.len;i++){j=0;while((jL2.len)&&(L2.data[j]!=L1.data[i]))j++;if(jL2.len){L3.data[n]=L2.data[j];n++;}}L3.len=n;cout用顺序表求交集为:endl;for(i=0;iL3.len;i++){coutL3.data[i];}coutendl;}voidcjsort(seqList&L1,seqList&L2)//用顺序表求差集{inti,j;seqListL5;Init_seqList(L5);intn=0;for(i=0;iL1.len;i++){j=0;while((jL2.len)&&(L1.data[i]!=L2.data[j]))j++;if(j==L2.len){L5.data[n]=L1.data[i];n++;}}L5.len=n;cout用顺序表求差集为:endl;for(i=0;iL5.len;i++){coutL5.data[i];}coutendl;}typedefstructnode//单链表的定义{DataTypedata;structnode*next;}Lnode,*List;voidInit_List(List&L)//单链表初始化{cout初始化成功!endl;L=newLnode();L-next=NULL;}voidCreat_List(List&L)//单链表的创建{intaa=1;DataTypex;cout根据输入x判断,x的值不为0则进入循环!endl;cinx;while(x!=0){cout输入第aa个单链表的元素:endl;aa++;cinx;Lnode*r=L-next;Lnode*s;s=newLnode;s-next=NULL;while(r&&(x!=r-data)){r=r-next;}if(x==0){aa--;return;}if(r!=NULL){cout输入的值重复,请重新输入:endl;--aa;continue;}else{s-data=x;s-next=L-next;L-next=s;}}}voidoutput(List&L)//输出函数{Lnode*p;p=L-next;if(!p){cout空表!endl;return;}while(p!=NULL){coutp-data;p=p-next;}coutendl;}voidbj_List(List&L11,List&L22)//链表求并集先复制到一个新的表中,在求并集{ListL44;Lnode*p,*q;L44=newLnode;L44-next=NULL;p=L11-next;Lnode*s;Lnode*r=L44;while(p!=NULL){s=newLnode;s-data=p-data;s-next=NULL;r-next=s;r=s;p=p-next;}q=L22-next;while(q!=NULL){intflag=1;p=L11-next;while(p){if(q-data==p-data)flag=0;p=p-next;}if(flag){s=newLnode;s-data=q-data;s-next=NULL;r-next=s;r=s;}q=q-next;}cout两个集合的并集为:endl;output(L44);}voidjj_List(List&L11,List&L22)//用链表求交集{Lnode*p,*q;p=L11-next;ListL33;L33=newLnode;L33-next=NULL;Lnode*s;Lnode*r=L33;while(p!=NULL){q=L22-next;while(q!=NULL){if(p-data==q-data){s=newLnode;s-data=p-data;s-next=NULL;r-next=s;r=s;}q=q-next;}p=p-next;}cout两个集合的交集为:endl;output(L33);}voidcj_List(List&L11,List&L22)//链表求差集,表A中有的表B中没有的{ListL55;L55=newLnode;L55-next=NULL;Lnode*s;Lnode*p,*q;Lnode*r=L55;p=L11-next;while(p!=NULL){intflag=1;//标志q=L22-next;while(q){if(p-data==q-data)flag=0;q=q-next;}if(flag){s=newLnode;s-data=p-data;s-next=NULL;r-next=s;r=s;}p=p-next;}cout两个集合的交集为:endl;output(L55);}voidmain(){seqListL1,L2;ListL11,L22;inty=0;cout********************************************************endl;cout*--欢迎进入此系统的界面---endl;cout********************************************************endl;cout根据输入的y的值来执行操作endl;cout********************************************************endl;do{cout顺序表的操作endl;cout1初始化2创建3输出endl;cout4并集5交集6差集endl;cout********************************************************endl;cout链式表的操作endl;cout7初始化8创建9输出endl;cout10并集11交集12差集endl;cout输入0退出endl;ciny;if(y==20){cout跳出本次的循环,执行下一次的循环。endl;cout请再次输入y的值,判断其进行的操作:endl;continue;}switch(y){case1:Init_seqList(L1);//初始化Init_seqList(L2);break;case2:set_seqList(L1);//创建set_seqList(L2);break;case3:output_seqList(L1);//输出output_seqList(L2);break;case4:bjsort(L1,L2);//顺序表求并集break;case5:jjsort(L1,L2);//顺序表求交集break;case6:cjsort(L1,L2);//顺序表求差集break;case7:Init_List(L11);//初始化Init_List(L22);break;case8:cout输入的元素以0结束:endl;Creat_List(L11);//链表的创建Creat_List(L22);break;case9:cout链式表中的元素为:endl;output(L11);//链表的显示output(L22);break;case10:bj_List(L11,L22);//链式表求并集break;case11:jj_List(L11,L22);//链式表球交集break;case12:cj_List(L11,L22);//链式表求差集break;}}while(y!=0);}//从文件中读入数据/*voidReadFile(seqList&L,intn){ifstreaminfile(e:\\jihe.txt,ios::in);if(!infile){cerr打开失败!endl;abort();}chars;for(inti=1;i=n;i++){infile.read((char*)&s,sizeof(s));L.data[i]=(int)s;//字符数组转化成整形coutL.data[i];L.len++;}}*//*cou
本文标题:顺序表和链式表求并集交集和差集
链接地址:https://www.777doc.com/doc-4600034 .html