恩恩;(可以帮我看一下下面我写的代码吗?我不知道错在哪?)
#include <stdio.h>
#include <stdlib.h>
#define True 1
#define False 0
#define OK 1
#define Error 0
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//头插法(逆序输入)
Status CreateList_L(LinkList &L)
{
LinkList p;
int n,i;
L=(LinkList)malloc(sizeof(LNode));//初始化
L->next=NULL;
printf("Please enter a number :");
scanf("%d",&n);
printf("Please enter %d number:",n);
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
//创建新结点
scanf("%d",&p->data);
p->next=L->next;
//将 L->next指针域赋值给 p->next
L->next=p;
// L->next指向 P
}
return OK;
}
//合并La和Lb,并写入到Lc
Status Combine_L(LinkList La,LinkList Lb,LinkList &Lc)
{
LinkList pa,pb,p1,p2,k;
Lc=(LinkList)malloc(sizeof(LNode));//初始链表Lc
Lc->next=NULL;
pa=La;pb=Lb;p1=pa;k=pa->next;
//判断链表A中是否有重复的数据,若有,则删除
while(pa!=NULL)
{
if(p1->next==NULL )
{
pa=pa->next;
p1=pa;
}
//移位
else if(pa->data==p1->next->data)
{
p1->next=k->next;
free(k);
}
//删除
else
{
p1=p1->next;
k=k->next;
}
//移位
}
Lc=pa;
//将链表B中数据与C 不相同的插入到Lc中
while(pb!=NULL)
{
while(Lc!=NULL)
{
if(Lc->data == pb->data)
{
break;
}
else
{
Lc=Lc->next;
}
}
if(Lc==NULL)
{
p2->data=pb->data;
//将 pb->data赋值给 P2->data
Lc->next=p2;
p2->next=Lc->next;
}//插入
else
{
return Error;
}
pb=pb->next;
}
return OK;
}
//求交集(将A与B相同的 数写入到C)
Status JiaoJi_L(LinkList La,LinkList Lb,LinkList &Lc)
{
LinkList pa,pb,p1,k;
Lc=(LinkList)malloc(sizeof(LNode));//初始链表Lc
Lc->next=NULL;
pa=La; pb=Lb;
//判断链表A中是否有重复的数据,若有,则删除
while(pa!=NULL)
{
if(p1->next==NULL )
{
pa=pa->next;
p1=pa;
}
//移位
else if(pa->data==p1->next->data)
{
p1->next=k->next;
free(k);
}
//删除
else
{
p1=p1->next;
k=k->next;
}
//移位
}
Lc=pa;
k=Lc;
//判断Lb与Lc中是否有相同的数据,若无,则删除Lc中的数据
while(Lc!=NULL)
{
while(pb!=NULL)
{
if(Lc->data == pb->data)
{
break;
//跳出该循环
}
else
{
pb=pb->next;
}
}
if(pb==NULL)
{
Lc=k->next;
free(k);
} //删除
Lc=Lc->next;
}
return OK;
}
//求交集(将A与B相同的相减,然后把A中剩下的数写入到C)
Status ChaJi_L(LinkList La,LinkList Lb,LinkList &Lc)
{
LinkList pa,pb,p1,k;
Lc=(LinkList)malloc(sizeof(LNode));//初始链表Lc
Lc->next=NULL;
pa=La; pb=Lb;
//判断链表A中是否有重复的数据,若有,则删除
while(pa!=NULL)
{
if(p1->next==NULL )
{
pa=pa->next;
p1=pa;
}
//移位
else if(pa->data==p1->next->data)
{
p1->next=k->next;
free(k);
}
//删除
else
{
p1=p1->next;
k=k->next;
}
//移位
}
Lc=pa;
k=Lc;
//判断Lb与Lc中是否有相同的数据,若有,则删除Lc中的数据
while(Lc!=NULL)
{
while(Lc!=NULL)
{
if(Lc->data ==pb->data)
{
Lc=k->next;
free(k);
}//删除
else
{
pb=pb->next;
} //移位
}
Lc=Lc->next;
}
return OK;
}
Status printLink(LinkList L)//打印链表
{
LinkList p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
return OK;
}
main()
{
LinkList La,Lb,Lc;
printf("Please enter A:\n");
CreateList_L(La);
printf("Please enter B:\n");
CreateList_L(Lb);
printf("C = A ∪ B\n");
Combine_L(La,Lb,Lc);
printLink(Lc);
printf("C = A ∩B\n");
JiaoJi_L(La,Lb,Lc);
printLink(Lc);
printf("C = A - B\n");
ChaJi_L(La,Lb,Lc);
printLink(Lc);
}