#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
/////////////////////
struct Taphop
{
int info;
Taphop *link;
};
Taphop *first;
Taphop *A,*B,*C;
int n,m;
/////////////////////
int Menu();
void Run(int task);
void Init();
void Add(Taphop *first, int x);
void Input(Taphop *&A);
void Xuat(Taphop *&first);
void Hop(Taphop *A,Taphop *B,Taphop *C);
void Giao(Taphop *A,Taphop *B,Taphop *&C);
/////////////////////
/////////////////////
void main()
{
Init();
int task;
while(task=Menu())
Run(task);
}
/////////////////////
int Menu()
{
int task;
cout <<"\n\n\tDANH SACH LIEN KET-TAP HOP"; cout <<"\n....................."; cout <<"\n\n1.Tim tap hop la hop cua 2 ds!"; cout <<"\n\n2.Tim tap hop la giao cua 2 ds!"; cout <<"\n\n3.Xuat ds chua phan bu cua 2 ds!"; cout <<"\n....................."; cout <<"\n\n\tBan chon:"; return task;
}
void Run(int task)
{
switch(task)
{
case 1:
cout <<"\nNhap danh sach A: ";Input
(A
); cout <<"\nNhap danh sach B: ";Input
(B
); cout <<"\n\tDanh sach A: ";Xuat
(A
); cout <<"\n\tDanh sach B: ";Xuat
(B
); Hop(A,B,C);
break;
case 2:
Giao(A,B,C);
break;
case 3:
break;
}
system("cls");
}
/////////////////////
void Init()
{
A=B=C=NULL;
}
void Add(Taphop *first, int x)
{
Taphop *p,*q,*a;
a=new Taphop;
a->info=x;
a->link=NULL;
if(first==NULL)
first=a;
else
{
q=NULL;
p=first;
while(p->link!=NULL && p->info < x)
{
q=p;
q=q->link;
}
if(q==NULL)
{
a->link=first;
first=a;
}
else
{
q->link=a;
a->link=p;
}
}
}
void Input(Taphop *&A)
{
int i,n,x;
cout <<"\nNhap so phan tu : "<<endl
; for ( i=0; i<n; i++)
{
cout <<"\nNhap phan tu thu "<<i
<<" : "; Add(A,x);
}
}
void Xuat(Taphop *&first)
{
Taphop *p=first;
while(p!=NULL)
{
p=p->link;
}
}
void Hop(Taphop *A,Taphop *B,Taphop *C)
{
while(A!=NULL && B!=NULL)
{
if(A->info < B->info)
{
Add(C,A->info);
A=A->link;
}
else if(A->info > B->info)
{
Add(C,B->info);
B=B->link;
}
}
if(A!=NULL)
{
while(A!=NULL)
{
Add(C,A->info);
A=A->link;
}
}
if(B!=NULL)
{
while(B!=NULL)
{
Add(C,B->info);
B=B->link;
}
}
}
void Giao(Taphop *A,Taphop *B,Taphop *&C)
{
while(A!=NULL && B!=NULL)
{
if(A->info < B->info)
{
while(A->info != B->info && A!=NULL)
A=A->link;
if(A!=NULL)
{
Add(C,B->info);
B=B->link;
A=A->link;
}
}
else if(A->info > B->info)
{
while(B->info != A->info && B!=NULL)
B=B->link;
if(B!=NULL)
{
Add(C,A->info);
B=B->link;
A=A->link;
}
}
else
{
Add(C,A->info);
A=A->link;
B=B->link;
}
}
}