4 集合的操作

本文介绍了一种链表集合操作的问题,包括对A、B、C、D四个无重复元素的集合进行排序、合并、删除和插入操作。首先对集合进行排序,然后合并A和B,删除A中属于C的元素,最后根据D中的元素更新A。题目要求编写实现这些操作的函数,并在最后输出集合A的元素。
摘要由CSDN通过智能技术生成

4 集合的操作

作者: Turbo时间限制: 1S章节: 链表

问题描述

输入A、B、C、D四个集合(集合中无重复元素,且元素值都大于0),分别存储在不带头结点的链表中。
本程序先将四个集合执行以下操作:
对A、B、C、D分别进行升序排序;(该功能已实现,见函数sort)。
做A=A+B操作:先执行两个有序链表A和B的合并,并仍然保持有序,结果存储在A中,然后删除重复元素;(该功能已实现,见函数merge和purge)。
做A=A-C操作:将C中出现的元素从A中删除;(该功能已实现,见函数subtract)。
对D中出现的元素,逐一到A中查询:
如果在A中存在,则从A中删除
如果在A中不存在,则将元素添加到A中,并保持链表A有序。
请编写函数fun的函数体实现本功能。

5. 输出集合A中的元素。(该功能已实现,见函数displayLink)。
需要编写的函数的原型如下:
struct student* fun(struct student* L1, struct student* L2)
形参:
L1:传入的第一个集合,程序中将传入A集合的链表头指针
L2:传入的第二个集合,程序中将传入D集合的链表头指针
返回值:
返回第一个集合的链表的头指针

程序部分代码如下

#include <stdio.h>

#include <stdlib.h>

struct student

{
   

       int  num;

       struct student  *next;

};

 

struct student *createByTail()

{
   

       struct student *head;

       struct student *p1,*p2;

       int n;

       n=0;

       p1=p2=(struct student*)malloc(sizeof(struct student));

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

       head=NULL;  //首先置链表为空链表

       while(p1->num!=-1)    //num为-1,意味着用户输入结束

       {
   

              n=n+1;

              if(n==1)            //创建第一个结点

                     head=p1;

              else

                     p2->next=p1;

              p2=p1;            //p2始终指向最后一个结点(即尾指针)

              p1=(struct student*)malloc(sizeof(struct student)); //p1指向新结点

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

       }

       p2->next=NULL;  //切记:最后一个结点的next赋值为NULL

       return head;

}

 

//输出链表中的信息(num)

void  displayLink(struct student *head)

{
   

       struct student *p;

    p=head;

       printf("head-->");

       while(p!= NULL)

       {
   

              printf("%d-->",p->num);

              p=p-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值