c语言程序A链表与B链表相等,c语言问题,急急急!关于链表的!题目是这样的:链表练习:求集合的差:假设集合A用单链表LA表示,集合B用单链表LB表示,设计算法求两个集合的差,即A-B。 提示:由集...

#include 

#include 

typedef struct list{

int elem;//存数链表节点的元素值

struct list *next;//指向下一节点

}LIST;

LIST *createlist(int n)

{

LIST *head,*p,*p1;

int i;

head=(LIST *)malloc(sizeof(LIST));

p=head;

scanf("%d",&(p->elem));

p->next=NULL;

for(i=1;i

{

p1=(LIST *)malloc(sizeof(LIST));

scanf("%d",&(p1->elem));

p1->next=NULL;

p->next=p1;

p=p1;

}

return head;

}

LIST *A_B(LIST *A,LIST *B)//计算A-B,计算结果保存在A中

{

LIST *pa,*pa_prev,*pb;

int e,flag;

pa=A;

pa_prev=A;

while(pa!=NULL)//遍历链表A中的每一个元素

{

flag=0;

e=pa->elem;

pb=B;//对A中的每一个元素e,都从LB的表头开始查找

while(pb!=NULL)

{

if (pb->elem==e) //若A中的元素B也有,则在A中删除该元素

{

if (pa==A) //pa是表头

{

A=pa->next;

pa_prev=pa->next;

pa=pa->next;

flag=1;

}

else if(pa->next==NULL)//pa是表尾

{

pa=NULL;

pa_prev->next=pa;

flag=1;

}

else//非表头元素和表尾元素

{

pa_prev->next=pa->next;

pa=pa->next;

flag=1;

}

break;

}

else pb=pb->next;

}

if (flag==0) {pa_prev=pa;pa=pa->next;}

}

return A;

}

int main()

{

LIST *LA,*LB;

LIST *p;

int num;

printf("请输入链表A的长度:");

scanf("%d",&num);

printf("请输入链表A的元素,中间用空格隔开:");

LA=createlist(num);

printf("\n请输入链表B的长度:");

scanf("%d",&num);

printf("请输入链表B的元素,中间用空格隔开:");

LB=createlist(num);

LA=A_B(LA,LB);//计算集合差

p=LA;//输出A-B的结果

printf("\nLA-LB=");

while(p!=NULL)

{

printf("%4d",p->elem);

p=p->next;

}

return 0;

printf("\n");

}

程序的运行结果:

d0b9cc6325d054feb3b91fb791cf850d.png

02218e7b02d466088397c81e1647d364.png

78c8ef64fc02a4d976da2dbec508d790.png

若满意,望采纳!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值