资源简介
题目:
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++ 停车场管理 数据结构 课程设计
- 数据结构:B-树源代码
- 职工管理系统数据结构)
- 校园导游咨询系统 数据结构
- 编写算法删除单链表L中所有值为e的数
- C++数据结构分段线性插值
- 数据结构课程设计汉诺威塔
- C语言栈和队列代码实现
- 严蔚敏建立词索引表
- 无向图 破圈法求最小生成树
- 日历管理系统.cpp
- 数据结构编程题目及答案
- 单项选择标准化考试系统 C语言版
- 数据结构课程设计应用索引文件和查
- 数据结构严蔚敏C语言第二版习题答案
- 数据结构的二叉树用C语言实现的代码
- 文章编辑数据结构课程设计c语言编写
- 数据结构上机题
- 数据结构C语言 一元多项式的加减法
- 数据结构 走迷宫大作业 c语言完整代
- 马踏棋盘的源程序,C语言编写,数据
- 数据结构c语言版上机题代码汇总
- 数据结构C语言之哈夫曼编码
- 数据结构表达式求值,c语言版,能计
- 银行管理系统——数据结构C
- c语言银行管理系统
- 严蔚敏.吴伟民等《数据结构(c语言版
- C++数据结构与算法(第4版) 完整版
- 数据结构栈、队列、二叉树、顺序查
评论
共有 条评论