资源简介
题目:
7. 集合运算 (单循环链表)
1.问题描述:
设有两个带头结点的单循环链表存储的集合A、B,其元素类型为字符或者整形,且以非递减方式存储,其头结点分别为ha、hb。要求下面各问题中的结果集合同样以非递减方式存储,结果集合不影响原集合。
2.实现要求:
⑶ 编写集合元素测试函数IN_SET,如果元素已经在集合中返回0,否则返回1;
⑷ 编写集合元素输入并插入到单链表中的函数INSERT_SET,保证所输入的集合中的元素是唯一且以非递减方式存储在单循环链表中;
⑶ 编写求集合A、B的交C=A∩B的函数,并输出集合C的元素;
⑷ 编写求集合A、B的并D=A∪B的函数,并输出集合D的元素;
⑸ 求集合A与B的对称差E=(A-B)∪(B-A) 的函数,并输出集合D的元素;
⑹ 设计一个菜单,具有输入集合元素、求集合A、B的交C、求集合A、B的并D、求集合A与B的对称差E、退出等基本的功能。
3.测试数据:字符型和整形由同学们自定,但集合A、B的元素个数不得少于15个。

代码片段和文件信息
#include
#include
#include
#include
using namespace std;
typedef char DataType;
typedef struct Aggreage//集合结构体
{
DataType element;//元素
struct Aggreage *next;
}SAggreage;
int print_Aggreage(SAggreage *head);//输出一个集合
void AggreageInitiate(SAggreage **head);//初始化函数(创建头结点)
int IN_SET(SAggreage *headDataType elem);//判断A元素是否在这个集合中
int newspace(SAggreage **headDataType elem);//给结点开辟空间
int isempty(SAggreage *head);//判断该集合是否为空
int INSERT_SET(SAggreage *headDataType elem);//插入唯一元素
int create(SAggreage **head);
SAggreage* Intersection(SAggreage* ASAggreage* B);//交
SAggreage* Union(SAggreage* ASAggreage* B);//并
SAggreage* Unionn(SAggreage* ASAggreage* B);
SAggreage* Difference(SAggreage* ASAggreage* B);//差
void load(SAggreage* haSAggreage* hb);//读文件数据到链表
void save(SAggreage* haSAggreage* hb);//保持链表数据到文件中
//菜单
void mainmenu()
{
cout<<“==============================集合运算==============================“< cout<<“|| 1.交 2.并 3.对称差 ||“< cout<<“|| 4.输入集合AB 5.导入集合AB 6.查看集合 ||“< cout<<“|| 7.保存集合AB 8.退出程序 ||“< cout<<“====================================================================“< }
void menu6()
{
cout<<“=======================查看集合=======================“< cout<<“|| 1.集合A 2.集合B ||“< cout<<“|| 3.返回上一级菜单 ||“< cout<<“======================================================“< }
//初始化函数(创建一个头指针)
void AggreageInitiate(SAggreage **head)
{
*head = (SAggreage *)malloc(sizeof(SAggreage));
(*head)->next = *head;//循环单链表//之前:(*head)->next = head;
}
//判断A元素是否在这个集合中
int IN_SET(SAggreage *headDataType elem)
{
int flag =1;//初始假设集合中没有这个元素,检查到有后再将标志改为0;
//如果元素已经在集合中返回0,否则返回1;
SAggreage *p = head;
while(p->next != head)//从头指针开始,当p不是最后一个的时候(只有头指针的话,不执行里面的语句)
{
p = p->next;//p指向下一个(从第一个数据开始),到最后一个,如果中间有和a元素一样的,就break
//返回0,否则返回1;(是1就可以继续添加)
if(p->element == elem)
{
flag = 0;
break;
}
}
return flag;
}
//开辟一块内存的函数(后来根据功能和代码重复出现的次数自己添加的函数)
int newspace(SAggreage **headDataType elem)////////// int newspace(SAggreage *headDataType elem)
{
//cout<<“辟一块内存的函数“ < SAggreage *p = *head;////////////////// head;
SAggreage *s;
s = (SAggreage *)malloc(sizeof(SAggreage));
s->element = elem;
s->next = p->next;
p->next = s;
return 1;
}
//判断该集合是否为空(判断头指针的下一个是否为头指针)
int isempty(SAggreage *head)
{
//是空返回1
//int num;
SAggreage *p = head;
if(p->next == head)//if(p->next = head)应该是==,哎,搞死我了
{
return 1;
}
else
{
return 0;
}
}
//插入唯一元素
int INSERT_SET(SAggreage *headDataType elem)//SAggreage *head因为是指针,修改了也可以保存数据,
//若插入成功则返回1,否则返回0;
{
//cout<<“进入插入唯一元素的函数“< //1.先检查集合中是否有这个元素//&head还是head
if
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10 2019-04-01 09:21 集合运算\B.txt
文件 18580 2019-04-01 09:17 集合运算\ccc.cpp
文件 1929440 2019-04-01 09:28 集合运算\ccc.exe
文件 10 2019-04-01 09:21 集合运算\A.txt
目录 0 2019-04-01 09:39 集合运算
----------- --------- ---------- ----- ----
1948040 5
- 上一篇:C++加载百度地图demo
- 下一篇:C语言连接mysql,实现通讯录功能
相关资源
- 利用C++哈希表的方法实现电话号码查
- 学校超市选址问题(数据结构C语言版
- 数据结构,迷宫问题C语言版源代码
- DSDEMO-C演示(数据结构C语言版 严蔚敏
- 数据结构 图的遍历源代码
- 数据结构实验源代码集
- 实验报告:数据结构长整数四则运算
- 数据结构教程李春葆第五版书中例题
- 吕鑫vc6c++数据结构视频源码
- 数据结构教程李春葆第五版课后答案
- 李春葆课后习题答案(数据结构教材
- 数据结构1800题 题+答案(全)
- 数据结构(C语言版)ppt课件,清华,
- c++常用游戏算法及数据结构设计
- 数据结构超全面复习导图
- 《Data Structures and Algorithm Analysis in C
- 数据结构C语言版教学笔记严蔚敏
- 数据结构C语言版期末考试试题(有答
- 多功能计算器实现C++代码以及代码详
- C语言数据结构银行客户排队
- C语言实现栈操作
- 简易学生管理系统源码 数据结构 大作
- 数据结构与C语言综合习题集
- 数据结构实验——赫夫曼树相关
- C语言进阶源码---基于graphics实现图书
- 数据结构——C++语言描述 陈慧南
- 广东工业大学数据结构课程设计航空
- 数据结构课程设计扑克牌排序
- 数据结构各种算法实现(C++模板),
- (严版C语言版数据结构源码.rar
评论
共有 条评论