-->
当前位置:首页 > 题库 > 正文内容

函数题:求集合(用单链表表示)的并、交和差运算

Luz4年前 (2021-10-02)题库817
求集合(用单链表表示)的并、交和差运算

### 目的:
掌握单链表的应用和有序单链表的二路归并算法设计。
### 内容:
编写程序,采用单链表表示集合(假设同一个结合中不存在重复的元素),将其按递增方式排序,构成有序单链表,并求这样的两个集合的并、交和差。

###单链表结点类型定义:
c++
typedef int ElemType; //元素的数据类型

typedef struct LNode {
ElemType data; //结点的数据域
struct LNode *next; //指向后继结点
} LinkNode; //单链表结点类型


### 函数接口定义:
c++
//尾插法建立单链表,细节不表
void CreateListR(LinkNode *&L, ElemType a[], int n);

//输出线性表,细节不表
void DispList(LinkNode *L);

//求两个有序集合的并
void Union(LinkNode *A, LinkNode *B, LinkNode *&C);

//求两个有序集合的交
void InterSect(LinkNode *A, LinkNode *B, LinkNode *&C);

//求两个有序集合的差
void Subs(LinkNode *A, LinkNode *B, LinkNode *&C);


其中 L 和 A 、B、C都是带附加头结点的有序单链表的头指针。 数组a[] 存放创建有序单链表的元素,n为数组长度,其值不超过3000。

### 裁判测试程序样例:
c++
#include <stdio.h>
#include <stdlib.h>

typedef int ElemType; //元素的数据类型

typedef struct LNode {
ElemType data; //结点的数据域
struct LNode *next; //指向后继结点
} LinkNode; //单链表结点类型

//尾插法建立单链表,细节不表
void CreateListR(LinkNode *&L, ElemType a[], int n);

//输出线性表,细节不表
void DispList(LinkNode *L);

//求两个有序集合的并
void Union(LinkNode *A, LinkNode *B, LinkNode *&C);

//求两个有序集合的交
void InterSect(LinkNode *A, LinkNode *B, LinkNode *&C);

//求两个有序集合的差
void Subs(LinkNode *A, LinkNode *B, LinkNode *&C);

int main()
{
LinkNode *A, *B, *C;
int n, m;

scanf("%d", &n);
ElemType a[n];
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);

scanf("%d", &m);
ElemType b[m];
for (int i = 0; i < m; i++)
scanf("%d", &b[i]);

CreateListR(A, a, n);
CreateListR(B, b, m);

Union(A, B, C);
printf("集合A与B的并: ");
DispList(C);

InterSect(A, B, C);
printf("集合A与B的交: ");
DispList(C);

Subs(A, B, C);
printf("集合A与B的差: ");
DispList(C);

return 1;
}

/* 请在下面填写答案 */



### 输入样例:

输入有4行。
第1行为单链表A的元素个数,接下来的一行为单链表A的元素,以空格分隔。
第3行为单链表B的元素个数,接下来的一行为单链表B的元素,以空格分隔。

in
5
1 2 3 4 5
3
2 4 6



### 输出样例:

输出有3行。
第1行为集合A与B的并;第2行为集合A与B的交;第3行为集合A与B的差。
元素之间以一个空格分隔,行尾无多余的空格。
out
集合A与B的并: 1 2 3 4 5 6
集合A与B的交: 2 4
集合A与B的差: 1 3 5









答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。