单链表的交并差 第2页
for(i=1;i<len;i++)
{
if(d[i]==d[i+1])
{
printf("Don't allow the same data! Please reinput!");
goto input;
}
}
creat(&*L);
for(i=1;i<=len;i++)
{
insert(&*L,i,d[i]);
}
printf("The data of the linktable is: ");
display(&*L);
}
/*复制链表L1到L2*/
void copy(struct Lnode **L1,struct Lnode **L2 )
{
int i,len;
ElemType t;
len=lenth(&*L1);
creat(&*L2);
for(i=1;i<=len;i++)
{
t=get(&*L1,i);
insert(&*L2,i,t);
}
}
/*求交集*/
void intersection(struct Lnode **L1,struct Lnode **L2,struct Lnode **L3)
{
int i,j,k=1;
struct Lnode *t1,*t2;
t1=*L1;
t2=*L2;
creat(&*L3);
for(i=1;i<=lenth(&*L1);i++)
{
for(j=1;j<=lenth(&*L2);j++)
{
if(t1->data==t2->data)
{
insert(&*L3,k,t1->data);
k++;
}
t2=t2->next;
}
t1=t1->next;
t2=*L2;
}
}
/*求并集*/
unionset(struct Lnode **L1,struct Lnode **L2,struct Lnode **L3)
{/*把L1复制到L3,然后比较L2与L3,得到L2在L3中没有的元素在L3中的位置,并插入*/
int i,j,k;
struct Lnode *tt,*t2,*t3;
creat(&*L3);
copy(&*L1,&*L3);
t2=*L2;
t3=*L3;
for(i=1;i<=lenth(&*L2);i++)
{
k=1;
for(j=1;j<=lenth(&*L3);j++)
{
if(t2->data==t3->data)
{
k=0;
break;
}
else if(t2->data<t3->data)
{
break;
}
else if(t2->data>t3->data)
{
k++;
if(k<=lenth(&*L3))
{
t3=t3->next;
}
}
}
if(k>0&&k<=lenth(&*L3))
{/*插在排序的位置上*/
insert(&*L3,k,t2->data);
}
else if(k>lenth(&*L3))
{/*插在链尾*/
tt=(struct Lnode *)malloc(sizeof(struct Lnode));
tt->data=t2->data;
tt->next=null;
t3->next=tt;
}
t2=t2->next;
t3=*L3;
}
}
/*求差集*/
void diffrenceset(struct Lnode **L1,struct Lnode **L2,struct Lnode **L3)
{
/*将第一个复制到第三个,查找第二个在第三个中有的元素,并确定它在第三个中的位置,然后从第三个中删除*/
int i,t,n;
creat(&*L3);
copy(&*L1,&*L3);
for(i=1;i<=lenth(&*L2);i++)
{
t=get(&*L2,i);
n=locate(&*L3,t);
if(n)
{
delete(&*L3,n);
}
}
}
main()
{
int len1,len2;
char r;
static struct Lnode *head1,*head2,*head3,*head4,*head5,*head6;
printf("/************************************************************************/\n");
printf("Please input the lenth of the first linktable! ");
scanf("%d",&len1);
printf("/************************************************************************/\n");
printf("The lenth of the first linktable is %d,please input %d int data! ",len1,len1);
init(&head1,len1);
printf("/************************************************************************/\n");