• 大小: 374KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: C/C++
  • 标签: 数据结构  

资源简介

题目: 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


评论

共有 条评论