题目
集合A和集合B,要求设计生成集合C=A与B的交集的算法,其中集合A、B和C用链式存储结构表示
代码
#include <iostream>
using namespace std;
typedef char ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//尾插法创建链表
void createLinkList(LinkList &L){
L=(LNode *)malloc(sizeof(LNode));
L->next=NULL;
LNode *p,*r=L;
ElemType e;
cin>>e;
while(e!='#'){
p=(LNode *)malloc(sizeof(LNode));
p->data=e;
r->next=p;
r=p;
cin>>e;
}
r->next=NULL; //尾结点指针置空
}
//遍历输出链表的值
void dispLinkList(LinkList L){
LNode *p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
/**
* 算法主体
**/
void createC(LinkList &LC,LinkList LA,LinkList LB){
LC=(LNode *)malloc(sizeof(LNode));
LNode *pc,*r=LC; //尾插法构造LC链表
LNode *pa;
LNode *pb;
for(pa=LA->next;pa!=NULL;pa=pa->next){
for(pb=LB->next;pb!=NULL;pb=pb->next){
if(pa->data==pb->data){
pc=(LNode *)malloc(sizeof(LNode));
pc->data=pa->data;
r->next=pc;
r=pc;
break; //跳出循环,找下一个相同的的元素
}
}
}
r->next=NULL;
}
int main() {
LinkList LA,LB,LC;
createLinkList(LA);
createLinkList(LB);
dispLinkList(LA);
dispLinkList(LB);
createC(LC,LA,LB);
dispLinkList(LC);
return 0;
}