早教吧作业答案频道 -->其他-->
c语言问题,急急急!关于链表的!题目是这样的:链表练习:求集合的差:假设集合A用单链表LA表示,集合B用单链表LB表示,设计算法求两个集合的差,即A-B。提示:由集合运算的规则可
题目详情
c语言问题,急急急!关于链表的!
题目是这样的:
链表练习:
求集合的差:假设集合A用单链表LA表示,集合B用单链表LB表示,设计算法求两个集合的差,即A-B。
提示:由集合运算的规则可知,集合的差A-B中包含所有属于集合A而不属于集合B的元素。具体做法是,对于集合A中的每个元素e,在集合B的链表LB中进行查找,若存在与e相同的元素,则从LA中将其删除
题目是这样的:
链表练习:
求集合的差:假设集合A用单链表LA表示,集合B用单链表LB表示,设计算法求两个集合的差,即A-B。
提示:由集合运算的规则可知,集合的差A-B中包含所有属于集合A而不属于集合B的元素。具体做法是,对于集合A中的每个元素e,在集合B的链表LB中进行查找,若存在与e相同的元素,则从LA中将其删除
▼优质解答
答案和解析
#include <stdio.h>
#include <stdlib.h>
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<n;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");
}
程序的运行结果:
若满意,望采纳!
看了 c语言问题,急急急!关于链表...的网友还看了以下:
求出链码11076765543322的归一化链码、一阶差分链码和归一化的一阶差分链码用4-连码和8 2020-05-13 …
为了使有差错的物理线路变成无差错的数据链路,数据链路层采用了哪种(或哪些)方法? Ⅰ. 2020-05-23 …
为了使有差错的物理线路变成无差错的数据链路,数据链路层采用了哪种(或哪些)方法 ______。Ⅰ.差 2020-05-23 …
为了使有差错的物理线路变成无差错的数据链路,数据链路层采用了哪种(或哪些)方法________。Ⅰ. 2020-05-23 …
数据链路层采用差错控制和______方法,使其数据传输的物理线路变成无差错的数据链路。 2020-05-23 …
为了使有差错的物理线路变成无差错的数据链路,数据链路层采用了哪种(或哪些)方法?()Ⅰ.差错控制Ⅱ. 2020-05-24 …
(2014•上海)某亲本DNA分子双链均以白色表示,以灰色表示第一次复制出的DNA子链,以黑色表示 2020-06-26 …
抗体中,重链的血清学类型的是什么意思?不同类型的重链之间的差别主要是什么?血清学类型的意思是重链可 2020-07-13 …
c语言问题,急急急!关于链表的!题目是这样的:链表练习:求集合的差:假设集合A用单链表LA表示,集 2020-07-27 …
已有a,b两个链表,要求把两个链表合并并升序排列。假定给定的a、b为升序排列。输入时,首先输入两个数 2020-12-05 …