利用链表实现集合的交差并
代码
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
node *next;
}Node;
void Creat(Node *L)
{
Node *s,*tc=L;
int n,i;
printf("请输入元素个数n:");
scanf("%d",&n);
while(n--){
s=(Node*)malloc(sizeof(Node));
scanf("%d",&s->data );
tc->next =s;
tc=s;
}
tc->next =NULL;
}
int Delete(Node *L)
{
Node *pre,*tc;
Node *p=L->next ;
while(p != NULL){
pre=p;
tc=p->next;
while(tc != NULL){
if(p->data == tc->data ){
pre->next =tc->next ;
free(tc);
tc=pre->next;
continue;
}
tc=tc->next ;
pre=pre->next;
}
p=p->next ;
}
}
int DisList(Node *L)
{
Node *p=L->next;
if(p == NULL) return 0;
while(p != NULL){
printf("%d ",p->data );
p=p->next;
}
return 1;
}
void DestroyList(Node *L)
{
Node *p,*pre;
pre=L;
p=pre->next ;
while(p != NULL){
free(pre);
pre=p;
p=p->next;
}
free(pre);
return ;
}
Node* Union(Node *L,Node *L1)
{
Node *L2=(Node *)malloc(sizeof(Node));
Node *tc=L2,*s;
Node *p=L->next,*p1=L1->next;
while(p != NULL){
tc->next =p;
tc=p;
p=p->next ;
}
tc->next =NULL;
while(p1 != NULL){
tc->next =p1;
tc=p1;
p1=p1->next ;
}
tc->next =NULL;
Delete(L2);
return L2;
}
Node* UNion(Node *L,Node* L1)
{
Node *L2=(Node*)malloc(sizeof(Node));
Node *p=L->next ;
Node *p1=L1->next ;
Node *tc=L2,*p2,*s;
while(p != NULL){
while(p1 != NULL){
if(p->data == p1->data){
s=(Node*)malloc(sizeof(Node));
s->data =p->data ;
tc->next =s;
tc=s;
tc->next =NULL;
}
p1=p1->next ;
}
p=p->next;p1=L1->next;
}
return L2;
}
Node* different(Node *L, Node *L1){
int flag=1;
Node *L2=(Node*)malloc(sizeof(Node));
Node *p=L->next ;
Node *p1=L1->next;
Node *tc=L2,*p2,*s;
while(p != NULL){
flag=1;
while(p1 != NULL){
if(p->data == p1->data){
flag=0;
break;
}
p1=p1->next ;
}
if(flag == 1){
s=(Node*)malloc(sizeof(Node));
s->data =p->data;
tc->next =s;
tc=s;
}
p=p->next;p1=L1->next;
}
tc->next =NULL;
return L2;
}
int main()
{
Node *L=(Node *)malloc(sizeof(Node));
Creat(L);
Node *L1=(Node *)malloc(sizeof(Node));
Creat(L1);
Node *L2=(Node*)malloc(sizeof(Node));
printf("并集为:");
printf("差集为:");
printf("交集为:");
DisList(L2);
return 0;
}