早教吧 育儿知识 作业答案 考试题库 百科 知识分享

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

题目详情
c语言问题,急急急!关于链表的!
题目是这样的:
链表练习:
求集合的差:假设集合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语言问题,急急急!关于链表...的网友还看了以下:

右图表示的长方体(单位:米),长和宽都是3米,体积是24立方米.这个长方体的表面积是平方米.  2020-05-13 …

对图中所表述的意思理解正确的是()①A商品供不应求时的情况②B商品供不应求时的情况③A和B商品都违  2020-05-14 …

怎么算PE100外护管的米重,计算的结果为什么和米重表里差的不一样?根据公式π/4×[D²-(D-  2020-05-16 …

(2006•益阳)为了了解市场上甲、乙两种手表日走时误差的情况,从这两种手表中各随机抽取10块进行  2020-06-15 …

关于样本方差样本方差的表达式是怎么推导出来的呢?需不需要了解啊,因为感觉样本方差的定义表达式与概率  2020-08-02 …

两个向量平行的问题向量AB跟向量BC都是用向量a,b表示的.比如向量AB=2向量a+3向量b.当向  2020-08-02 …

为了了解市场上甲、乙两种手表日走时误差的情况,从这两种手表中各随机抽取10块进行测试,两种手表日走时  2020-11-25 …

下列关于β系数与标准差的表述正确的有:A.β值测度系统风险,而标准差测度非系统风险B.β值测度系统风  2020-11-29 …

225275的度数在视力表中的表现患者信息:男22岁病情描述(发病时间、主要症状等):225275想  2020-12-01 …

镁在氧气中燃烧生成氧化镁在化学中表示的意义还有哪些?这其实就是“镁在氧气中燃烧生成氧化镁”的这个化学  2021-01-23 …