任意长度的两个整数集合求并集与交集

//将以上数组为数据结构的程序实现改为单链表结构,可以对任意长度的两个整数集合求并集与交集
#include <iostream>
using namespace std;

struct LinkNode{
 int data;
 LinkNode *next;
};
int check(int elem,LinkNode *head);
int main(){
 int len1,len2;
 cout<<"请分别输入两动态数组的长度:"<<endl;
 cin>>len1>>len2;
 int *p1=new int[len1];
 int *p2=new int[len2];
 cout<<"输入动态数组a1的数组元素:"<<endl;
 for (int i=0;i<len1;i++)
  cin>>p1[i];
 cout<<"输入动态数组a2的数组元素:"<<endl;
 for (int j=0;j<len2;j++)
  cin>>p2[j];
 cout<<"您输入的动态数组a1为:"<<endl;
 for(i=0;i<len1;i++)
  cout<<p1[i]<<" ";
 cout<<endl;
 cout<<"您输入的动态数组a2为:"<<endl;
 for(j=0;j<len2;j++)
  cout<<p2[j]<<" ";
 cout<<endl;
 LinkNode *head1,*head2,*tail1,*tail2,*temp,*head,*tail;
 head1=new LinkNode;//将动态数组p1赋值给链表head1;
 int k=0;
 if(head1==NULL) return NULL;
 else
 {
  head1->data=p1[k];
  head1->next=NULL;
  tail1=head1;
  k++;
 }
 while (k<len1)
 {
  temp=new LinkNode;
  temp->data=p1[k];
  temp->next=NULL;
  tail1->next=temp;
  tail1=temp;
  k++;
 }
 head2=new LinkNode;//将动态数组p2赋值给链表head2;
 int m=0;
 if(head2==NULL) return NULL;
 else
 {
  head2->data=p2[m];
  head2->next=NULL;
  tail2=head2;
  m++;
 }
 while (m<len2)
 {
  temp=new LinkNode;
  temp->data=p2[m];
  temp->next=NULL;
  tail2->next=temp;
  tail2=temp;
  m++;
 }
 cout<<"这两个动态数组的交集为:"<<endl;//交集的求法应还可以优化
 for (head2;head2!=NULL;head2=head2->next){
   if (check(head2->data,head1)==1)
   {
    temp=new LinkNode;
    temp->data=head2->data;
    temp->next=NULL;
    tail1->next=temp;
    tail1=temp;
   }
   else
   {
    cout<<head2->data<<" ";
   }
  }
 cout<<endl;
 cout<<"这两个动态数组的并集为:"<<endl;
 while(head1){
  cout<<head1->data<<" ";
  head1=head1->next;
 }
 cout<<endl; 
 return 0;
}
int check(int elem,LinkNode *head){//判断插入的链表值是否和前面的重复
 for (head;head!=NULL;head=head->next)
  if(elem==head->data)
   return 0;
  return 1;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值