jmu-ds-集合的並交差運算 (15 分)(單鏈表)
阿新 • • 發佈:2019-01-05
有兩個整數集合A和B,現在要求實現集合的並、交、差運算。例如A={2,7,9} ,B={3,7,12,2},則集合的並C=A∪B={2,7,9,3,12},而集合的交 C=A∩B={2,7},集合的差C=A-B={9}。集合A和B中元素個數在1~100之間。
輸入格式:
三行,第一行分別為集合A,B的個數
第二行為A集合的資料
第三行為B集合的資料
輸出格式:
三行
第一行集合並的結果:C的個數及C中的元素
第二行集合交的結果:C的個數及C中的元素
第三行集合差的結果:C的個數及C中的元素
輸出結果以元素在A集合中的先後順序輸出,不能改變資料的輸出順序
輸入樣例:
3 4
2 7 9
3 7 12 2
輸出樣例:
5 2 7 9 3 12
2 2 7
1 9
這道題目的後臺資料有問題,下面的程式碼只能得10分。要想滿分要改一點地方,輸出c中元素個數之前要想判斷是否小於等於5,是則輸出,不是就不用輸出,,,,很坑。
#include <bits/stdc++.h> using namespace std; typedef struct Node { int data; struct Node* next; }Node,*Linklist; void Linklist_Create(Linklist &cl,int n) { Linklist head; cl=(Linklist)malloc(sizeof(Node)); cl->next=NULL; head=cl; for(int i=0;i<n;i++){ Linklist t=(Linklist)malloc(sizeof(Node)); int temp; cin>>temp; t->data=temp; head->next=t; head=head->next; } head->next=NULL; } void Print_Linklist(Linklist a) { Linklist head=a->next; while(head!=NULL){ if(head->next==NULL)cout<<head->data; else cout<<head->data<<" "; head=head->next; } } int Linklist_Union(Linklist a,Linklist b,Linklist &c){ Linklist ha,hb,hc,t,temp; hb=b->next; ha=a->next; c=(Linklist)malloc(sizeof(Node)); hc=c; int cnt=0; while(ha!=NULL){ t=(Linklist)malloc(sizeof(Node)); t->data=ha->data; hc->next=t; hc=hc->next; ha=ha->next; cnt++; } while(hb!=NULL){ temp=hb; int f=0; ha=a->next; while(ha!=NULL){ if(ha->data==temp->data){ f=1; break; } else ha=ha->next; } if(!f){ t=(Linklist)malloc(sizeof(Node)); t->data=temp->data; hc->next=t; hc=hc->next; cnt++; } hb=hb->next; } hc->next=NULL; return cnt; } int Linklist_Intersect(Linklist a,Linklist b,Linklist &c){ Linklist ha,hb,hc,t,temp; hb=b->next; ha=a->next; c=(Linklist)malloc(sizeof(Node)); hc=c; int cnt=0; while(ha!=NULL){ temp=ha; int f=0; hb=b->next; while(hb!=NULL){ if(hb->data==temp->data){ f=1; break; } else hb=hb->next; } if(f){ t=(Linklist)malloc(sizeof(Node)); t->data=temp->data; hc->next=t; hc=hc->next; cnt++; } ha=ha->next; } hc->next=NULL; return cnt; } int Linklist_Different(Linklist a,Linklist b,Linklist &c){ Linklist ha,hb,hc,t,temp; hb=b->next; ha=a->next; c=(Linklist)malloc(sizeof(Node)); hc=c; int cnt=0; while(ha!=NULL){ temp=ha; int f=0; hb=b->next; while(hb!=NULL){ if(hb->data==temp->data){ f=1; break; } else hb=hb->next; } if(!f){ t=(Linklist)malloc(sizeof(Node)); t->data=temp->data; hc->next=t; hc=hc->next; cnt++; } ha=ha->next; } hc->next=NULL; return cnt; } int main() { int n,m; cin>>n>>m; Linklist a,b,c1,c2,c3; Linklist_Create(a,n); Linklist_Create(b,m); int cntc1=Linklist_Union(a,b,c1); cout<<cntc1<<" "; Print_Linklist(c1); int cntc2=Linklist_Intersect(a,b,c2); cout<<endl; cout<<cntc2<<" "; Print_Linklist(c2); cout<<endl; int cntc3=Linklist_Different(a,b,c3); cout<<cntc3<<" "; Print_Linklist(c3); }