并集是把两个集合合并,去除重复元素后组成的集合。
通过键盘输入将两个集合保存在链表A和链表B中,再创建一个链表C用于保存集合A、B的并集,将链表C打印输出。
提示:1.相对于上一题(链表Set_LinkList(建立)),本题只需遍历已保存的链表A、B,将遍历到的当前值插入到链表C中;
2.为遍历取出链表数据,需要编写取值函数GetElem(LinkList L, int i),该函数功能为按序号返回数据元素,注意序号从1开始;
3.遍历链表需要知道链表长度,请自行编写ListLength()函数。
4.用户从键盘输入集合A、B,输入数据为整数,输入以-1结束。
输入格式:
第一行输入集合A,第二行输入集合B。
输出格式:
输出集合A、B的并集C
输入样例:
在这里给出一组输入。例如:
9 4 0 7 3 6 5 -1 1 5 6 8 4 7 0 -1
输出样例:
在这里给出相应的输出。例如:
9 4 0 7 3 6 5 1 8
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <bits/stdc++.h>
using namespace std;
typedef int ElemType;
struct node{
ElemType Data;
struct node* next;
};
typedef struct node* Set_LinkList;
Set_LinkList init(){
Set_LinkList L = (Set_LinkList)malloc(sizeof(struct node));
L->Data = -1;
L->next = NULL;
return L;
}
int ListLength(Set_LinkList L){
int counts = 0;
Set_LinkList p = L->next;
while(p != NULL){
counts++;
p = p->next;
}
return counts;
}
ElemType GetElem(Set_LinkList L, int i){
int counts = 0;
Set_LinkList p = L->next;
while(p != NULL){
counts++;
if(counts == i){
return p->Data;
}
p = p->next;
}
return -1;
}
void CreatList(Set_LinkList L, ElemType x){
Set_LinkList p = L->next;
if(p == NULL){
Set_LinkList newnode = (Set_LinkList)malloc(sizeof(struct node));
newnode->Data = x;
newnode->next = NULL;
L->next = newnode;
return;
}
while(p->next != NULL){
p = p->next;
}
Set_LinkList newnode = (Set_LinkList)malloc(sizeof(struct node));
newnode->Data = x;
newnode->next = NULL;
p->next = newnode;
return;
}
void display(Set_LinkList L){
Set_LinkList p = L->next;
if(p == NULL){
cout<<"NULL";
return;
}
while(p->next != NULL){
cout<<p->Data<<' ';
p = p->next;
}
cout<<p->Data;
}
void insert(Set_LinkList L, ElemType e){
Set_LinkList p = L->next;
if(p == NULL){
Set_LinkList newnode = (Set_LinkList)malloc(sizeof(struct node));
L->next = newnode;
newnode->Data = e;
newnode->next = NULL;
return;
}
while(p->next != NULL){
if(p->Data == e){
return;
}
p = p->next;
}
if(p->Data == e){
return;
}
Set_LinkList newnode = (Set_LinkList)malloc(sizeof(struct node));
p->next = newnode;
newnode->Data = e;
newnode->next = NULL;
return;
}
int main(){
int x;
Set_LinkList A = init();
Set_LinkList B = init();
cin>>x;
while(x != -1){
CreatList(A , x);
cin>>x;
}
cin>>x;
while(x != -1){
CreatList(B , x);
cin>>x;
}
int longA = ListLength(A);
int longB = ListLength(B);
Set_LinkList C = init();
for(int i = 1;i <= longA;i++){
insert(C,GetElem(A,i));
}
for(int i = 1;i <= longB;i++){
insert(C,GetElem(B,i));
}
display(C);
return 0;
}