- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计-集合运算汇
需求分析
1.1 设计任务
集合的元素限定含有两个数据域的结构体,一个数据域为整数,另一个数据域为小写字母字符[‘a’......‘z’];演示程序以用户和计算机的对话方式执行;其中运用了编程软件Microsoft Visual C++ 6.0创建链表来表示集合,用链表的查找、删除、插入等知识点来实现集合的并、交、差和布尔和四种运算。
1.2 功能要求
集合输入的形式为一个以回车符为结束标志的字符串,元素中字符顺序为先整数后字母,否则程序提示重新输入,若出现重复元素或非法字符,不符合集合的定义,程序提示重新输入。
本段程序旨在对输入的元素进行并集,交集,差集和布尔和运算。
概要设计
2.1链表表的抽象数据类型定义[1]
为实现上述程序功能,并要求以有序链表表示集合。所以,抽象数据类型就是单链表
ADT OrderedLinkList
{
数据对象:D={( ai, bi)|ai(Integer,bi(CharSet, i=1,2,...,n, n( 0}
数据关系:Rl={( ai-1, bi-1), ( ai, bi)| ( ai-1, bi-1), ( ai, bi)(D, ( ai-1, bi-1) ( ai, bi),i=2,...,n}
基本操作:
createLinkList(L, n)
操作结果:构造一个带表头的单链表,其中除表头外有n个结点。
unionset(A, B, C)
初始条件:单链表A,B已经存在。
操作结果:将单链表A和B的数据以结点为单位不重复地存入单链表C中。
interset(A, B, D)
初始条件:单链表A,B已经存在。
操作结果:以结点为单位,把同时存在于两个表中的数据存入单链表D中。
diffence(A, B, E)
初始条件:单链表A,B已经存在。
操作结果:以结点为单位将存在于链表A中而不存在于B的数据存入单链表E。
insertsort(L)
初始条件:有序表 L 已存在。
操作结果:以结点数据从表头到表尾用直接插入法按从小到大排序。
selectsort(L)
初始条件:有序表L已存在。
操作结果:以结点数据从表头到表尾用直接选择法按从小到大排序。
bubblesort(L)
初始条件:有序表L已存在。
操作结果:以结点数据从表头到表尾用冒泡排序法按从小到大排序。
shellsort(L)
初始条件:有序表L已存在。
操作结果:以结点数据从表头到表尾用冒泡排序法按从小到大排序。
}ADT OrderedLinkList
详细设计
3.1元素类型、结点类型和指针类型[1]
宏定义:typedef int Status;用来作为函数的返回值类型。
根据课题要求,每个结点必须含有两个类型的数据,即整数域和小写字母域,另外必须有一个指向下一个结点的结构类型的指针,故结构体有三个成员如下:
typedef struct LNode
{ //定义结构体,数据域两种类型
int inte;
char c;
struct LNode *next;
}LNode,*LinkList; //结点类型,结构体指针
3.2节点中元素大小的比较函数
由于节点的数据域中有两个类型的数据,在后面的检查新输入的元素是否和已经输入的有重复,以及在排序过程中不便于结点元素的大小的比较,所以先写出这个功能的函数。其比较原则是先将结点数据的的整数成员比较,整数大的元素大,整数相等的情况下则进行小写字母域的比较,其大小按字符大小直接比较,参数为结点,用1、0、-1作为返回值,分别表明前一个结点数据大于、等于、小于后一个节点数据。然后在后面的过程中只需要调用即可。该功能函数如下:
Status datacompare(LNode node1,LNode node2)
{ //元素大小的比较:结点作参数,先比整数域,再比字母域
//用点运算取结构体的成员变量
if(ee)
return 1;
else
if(ee)
return -1;
else
{
if(node1.cnode2.c)
return 1;
else
if(node1.cnode2.c)
return -1;
else
return 0;
}
}
3.3元素个数输入的合法性检查
这个函数完全是为了程序的健壮性准备的,当用户错误输入时,程序提示用户输入正确的整数,直到输入正确后才可以进行下一步操作。如果用户输入的有多余的字符,存在输入输入缓冲却,将会被函数中调用的fflush(stdin) [6]函数处理掉,消除了缓冲区残留信息对下一步操作的影响。函数如下:
Status input1(int n)
{
while(1)
{
if(s
您可能关注的文档
- 数学与应用数学毕业论文-浅谈空间上的幂等算子汇.doc
- 数学与应用数学毕业论文-用矩阵秩研究空间直线、平面间的位置关系汇.doc
- 数学与应用数学毕业论文-线性回归模型汇.doc
- 数学与应用数学毕业论文-秩幂等矩阵的刻画与幂等矩阵进一步研究汇.doc
- 数学与应用数学毕业论文(设计)- 图同构的判定汇.doc
- 数学与应用数学毕业论文(设计)-分块矩阵及其应用汇.doc
- 数学与应用数学毕业论文-矩阵 的可交换空间 的多项式表示的等价条件汇.doc
- 数学与应用数学毕业论文-矩阵对角化问题汇.doc
- 数学与应用数学毕业论文-矩3-幂零矩阵的Jordan 标准型汇.doc
- 数学与应用数学毕业论文(设计)-求函数极限方法的探讨汇.doc
最近下载
- 网络空间信息安全(第2版)习题与思考题参考答案.pdf
- 微肿瘤PTC体外药敏检测服务2023年.pdf VIP
- 教科版四年级科学上册第三单元《第1课让小车运动起来》优秀教学设计.docx VIP
- 病例报告表完整版.doc
- 电影售票管理平台.docx
- 统编版语文三年级上册《对话中提示语的位置及标点》课件.pptx VIP
- AQ_ 4272-2016 铝镁制品机械加工粉尘防爆安全技术规范.pdf
- 4第四章-金融市场及其构成(货币金融学(蒋先玲编著)第3版ppt课件可编辑).pptx
- 部编版语文二年级下册 第三单元大单元任务群“发现汉字的秘密”(一等奖创新教学设计).pdf VIP
- 《活着》读书分享.pptx VIP
文档评论(0)