资源描述:
《已知两个单链表a、b分别表示两个集合,其元素非递增。请编写程序求集合a和b的交集c。》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验报告一、题目:已知两个单链表A、B分别表示两个集合,其元素非递增。请编写程序求集合A和B的交集C。二、设计:(1)本体具体设计1>编写单链表2>在链表的公共成员中创建链表,在私有成员中创建求交集函数。3>在主函数调用insert和get-element等函数存储结构数组存储data结点类structnode{intdata;node*next;};单链表类list()list(){head=newnode;count=0;}intlength(){returncount;}boolempty(){if(count==0){returntrue;}el
2、se{returnfalse;}}boolinsert(intn,intx)if(n<1
3、
4、n>count+1){returnfalse;}else{node*u=head;for(inti=1;i<=n-1;i++){u=u->next;}node*s=newnode;s->data=x;s->next=u->next;u->next=s;count++;returntrue;}}boolget_element(intn,int&x)if(empty()){returnfalse;}if(n<1
5、
6、n>count){returnfalse;}else{
7、node*u=head;for(inti=1;i<=n;i++){u=u->next;}x=u->data;returntrue;}}boollocate(intn)if(empty()){returnfalse;}node*u=head;intn=0;for(inti=1;i<=count;i++){if(u->next->data==x){a[n]=u->next;}u=u->next;}if(n==0){returnfalse;}else{returntrue;}}node*locate()node*u=head;node*s;inti;for(i
8、=1;i<=n;i++){u=u->next;}s=u;returns;}booldelete_element(intx)if(empty()){returnfalse;}if(n<1
9、
10、n>count){returnfalse;}else{node*u=head;for(inti=1;i<=n-1;i++){u=u->next;}node*s=u->next;u->next=s->next;deletes;count--;returntrue;}}~list(){while(!empty()){delete_element(1);}deletehead
11、;}求交集函数voidjiaoji(list&a,list&b,list&c){inti,j;intn=1;for(i=1;i<=a.count;i++){for(j=1;j<=b.count;j++){intx_i;intx_j;a.get_element(i,x_i);b.get_element(j,x_j);if(x_i==x_j){c.insert(n,x_j);n++;}}}}一、运行结果1)输入A:2346108671211B:189564846370输出结果:2)输入:A:26894358694736B:484749565825361215
12、输出结果;交集:voidjiaoji(list&a,list&b,list&c){inti,j;intn=1;for(i=1;i<=a.count;i++){for(j=1;j<=b.count;j++){intx_i;intx_j;a.get_element(i,x_i);b.get_element(j,x_j);if(x_i==x_j){c.insert(n,x_j);n++;}}}}主函数:voidmain(){intx,i;cout<<"输入链表1的元素";lista;listb;listc;listd;lista_lin;listb_lin
13、;for(i=1;i<=10;i++){cin>>x;a.insert(i,x);}cout<<"输入链表2的元素";for(i=1;i<=10;i++){cin>>x;b.insert(i,x);}a_lin=a;b_lin=b;cout<<"交集为";jiaoji(a_lin,b_lin,d);for(i=1;i<=d.length();i++){d.get_element(i,x);cout<14、输入B集合后自动关闭窗口情况。然后重新输入就好了。