已知集合A与集合B,且第个集合内数据是唯一的。求A,B集合合并成新的集合C,要求C集合内的数据也是唯一的。并指出C集合的个数。
输入 三行,第一行分别为集合A,B的个数 第二行为A集合的数据 第三行为B集合的数据 输出 两行 第一行集合C的个数 第二行为C集合的数据 样例输入 4 5 12 34 56 78 34 67 89 34 76 样例输出 7 12 34 56 78 67 89 76
解题思想: 已知集合A,B,求集合C(集合中不存在相同的元素),先用单链表储存集合A,然后在将集合B中不同于A集合中的元素插入到其中即可;
#include <iostream> #define max 105 using namespace std; struct node{ int data; node *next; }; class line{ node *first; public: line(); line(int c[],int n); void inset(int x); int get_l(); void println(); }; line::line(){ first=new node; first->next=nullptr; } line::line(int c[],int n){ first=new node; node *r=first,*s=nullptr; for(int i=0;i<n;i++) { s=new node; s->data=c[i]; r->next=s; r=s; } r->next=nullptr; } void line::inset(int x){ node *p=first->next; while(p->data!=x&&p->next!=nullptr){ p=p->next; } if(p->next==nullptr){ node *s=nullptr; s=new node; s->data=x; s->next=p->next; p->next=s; } } void line::println() { node *p=first->next; while(p!=nullptr) { cout<<p->data<<" "; p=p->next; } cout<<endl; } int line::get_l(){ node *p=first->next; int l=0; while(p!=nullptr) { l++; p=p->next; } return l; } int main() { int a1,b1,a[max],b[max]; cin>>a1>>b1; int a2,b2; int i; for(i=0;i<a1;i++){ cin>>a2; a[i]=a2; } for(i=0;i<b1;i++){ cin>>b2; b[i]=b2; } line one{a,a1}; for(i=0;i<b1;i++) one.inset(b[i]); cout<<one.get_l()<<endl; one.println(); return 0; }性质:属于单链表的构成,以及插入数据,和输出数据的运用;