描述
用顺序表表示集合,集合元素为整型数据,设计一个算法实现两个集合的求交集运算。
输入格式
第一行:集合A和集合B的元素个数n,m
第二行:集合A的n个元素
第三行:集合B的m个元素
输出格式
输出:第一行:集合A,B的交集元素(要求按照元素在A集合中出现的次序输出),如果交集为空则输出null
样例1:
输入:
5 3
6 3 90 1 88
88 1 2
输出:
1 88
输入样例
5 3
6 3 90 1 88
33 44 55
输出样例
null
#include <stdio.h>
#include <malloc.h>
#include <iostream>
#define OK 1
#define ERROR 0
#define ElemType int
using namespace std;
typedef int Status;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
Status CreateLink_L(LinkList &L,int n)
{
LinkList p,s;
int i;
ElemType e;
L=new LNode;
L->next=NULL;
p=L;
for(i=0;i<n;i++)
{
scanf("%d",&e);
s=new LNode;
s->data=e;
s->next=NULL;
p->next=s;
p=s;
}
return OK;
}
Status CreateEmptyLink_L(LinkList &L)
{
L=new LNode;
L->next=NULL;
return OK;
}
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
LinkList p,s;
int j=1;
p=L;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i) return ERROR;
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status ListDelete_L(LinkList &L,int i,ElemType &e)
{
LinkList p,s;
int j=1;
p=L;
while(p->next&&j<=i)
{
s=p;
p=p->next;
j++;
}
if(!(p->next)||j>i) return ERROR;
e=p->data;
s->next=p->next;
delete p;
return OK;
}
Status LoadLink_L(LinkList &L)
{
LinkList p=L->next;
if(p==NULL) printf("null");
else{
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
printf("\n");
return OK;
}
Status SwitchList_L(LinkList &LA, LinkList &LB,LinkList &LC)
{
LinkList pa,pb,pc,sc;
pa=LA->next;
pb=LB->next;
pc=LC;
for(int i=0;pa!=NULL;i++)
{
for(int j=0;pb!=NULL;j++)
{
if(pa->data==pb->data)
{
sc=new LNode;
sc->data=pa->data;
sc->next=NULL;
pc->next=sc;
pc=sc;
break;
}
else if(pa->data!=pb->data)
{
pb=pb->next;
}
}
pb=LB->next;
pa=pa->next;
}
return OK;
}
int main()
{
LinkList A,B,C;
int a,b;
scanf("%d %d",&a,&b);
CreateLink_L(A,a);
CreateLink_L(B,b);
CreateEmptyLink_L(C);
SwitchList_L(A,B,C);
LoadLink_L(C);
}