傲慢与偏见1995版02:C 简单连表

来源:百度文库 编辑:高考问答 时间:2024/05/05 00:42:51
帮我看看下面这个程序怎么运行的时候老是错了?

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
//线性表的链式存储结构定义
struct node

{
int info;
struct node* link;
}*h1,*p,*q,*r,*h2;

//typedef struct node *pnode;

void creatList1(struct node *A)//尾插法建立连表
{

char key;
if(!(h1=(node *)malloc(sizeof(node))))return;
h1=A;
h1->link=NULL;
r=h1;
printf("\n建立连表成功\n");
printf("输入集合1: \n");
do
{
p=(node *)malloc(sizeof(node));
printf("\n输入: ");
scanf("%d",&p->info);
r->link=p;
p->link=NULL;
r=p;
printf("\n继续增加(1/0)?");
key=getch();
}while(key=='1');
}
void creatList2(struct node *B)//尾插法建立连表
{

char key;

if(!(h2=(node *)malloc(sizeof(node))))return;
h2=B;
h2->link=NULL;
r=h2;
printf("\n\n建立连表成功");
printf("\n输入集合2: ");
do
{
p=(node *)malloc(sizeof(node));
printf("\n输入: ");
scanf("%d",&p->info);
r->link=p;
p->link=NULL;
r=p;
printf("\n继续增加(1/0)?");
key=getch();
}while(key=='1');
}

node *intersection(node *A,node *B)
{
node *hs,*s;
hs=(node *)malloc(sizeof(node));
hs->link=NULL;
r=hs;
s=(node *)malloc(sizeof(node));
p=A;
q=B;
while(p!=NULL)
{
while(q!=NULL)
{
if(p->info=q->info)
{
s->info=p->info;
r->link=s;
s->link=NULL;
r=s;
}
q=q->link;
}
p=p->link;
}
return hs;

}
node *unionAB(node *A,node *B) {
node *hu,*s,*ru;
s=(node *)malloc(sizeof(node));
p=A;
q=B;
//将两连表合并
hu=(node *)malloc(sizeof(node));
hu->link=NULL;
ru=hu;
//复制
while(p!=NULL)
{
s->info=p->info;
ru->link=s;
s->link=NULL;
ru=s;
p=p->link;
}
while(q!=NULL)
{
s->info=q->info;
ru->link=s;
s->link=NULL;
ru=s;
q=q->link;
}
return hu;
}
node *differention(node *A,node *B)
{
node *hf,*s;
hf=unionAB(A,B);
p=hf->link;
while(p!=NULL)
{
s=p;
while(q!=NULL)
{
if(p->link==NULL)break;
q=p->link;
if(p->info==q->info)
{
s->link=p->link;
p=p->link;
}
q=q->link;
}
p=p->link;
}
return hf;
}

void print(node *list)
{
int j=0;
q=list->link;
printf("\n");
while(q!=NULL)
{

printf("%d",q->info);
j++;
j%4?printf("\t"):printf("\n");

q=q->link;

}
printf("\n\n\n");
}
帮我看一下并集(unionAB)函数就可以了。谢谢!!
主函数:void main()
{
char ch;
node *A,*B;//定义两集合
node *pa,*pb,*pc;//
A=(node *)malloc(sizeof(node));
B=(node *)malloc(sizeof(node));
pa=(node *)malloc(sizeof(node));
pb=(node *)malloc(sizeof(node));
pc=(node *)malloc(sizeof(node));
while(true)
{
ch=getch();
switch(ch)
{
case ('a') :
creatList1(A);
printf("\n集合1\n");
print(A);
printf("\n\n\n集合2\n");
creatList2(B);
print(B);
break;
case ('b') :
pb=unionAB(A,B);
printf("\n并集");
print(pb);
break;
case ('c') :
pa=intersection(A,B);//pa为
printf("\n交集");
print(pa);
break;
}}}

发现了一个错误:
void creatList1(struct node *A)//尾插法建立连表
{

char key;
if(!(h1=(node *)malloc(sizeof(node))))return;
h1=A; //此处应为A=h1啊
接下来的你自己找吧