- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告
题目:编制一个演示集合的并、交、和差运算的程序
问题描述:设计一个程序,要求实现集合的并、交、和差的运算
需求分析
本演示程序中,集合的元素限定为数字。
演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据(滤去输入中的非法字符)和运算结果显示在其后。
程序执行的命令包括:
构造集合1;2)构造集合2;3)求并集;4)求交集;5)求差集;6)结束。
“构造集合1”和“构造集合2”时,需以字符串的形式键入集合元素。
测试数据
(1) A={1、2、3、4、9} B={2、3、5、7、8}
A∪B={9、4、3、2、1、8、7、5} A∩B={3、2} A-B={9、4、1}
概要设计
为实现上述程序功能,应以有序链表表示集合。为此,需要两个抽象数据类型:有序表和集合
有序表的抽象数据类型定义为:
ADT OrderedList{
数据对象:D={ai|ai∈CharSet,i=1,2,…,n,n=0}
数据关系:R1={ai-1,ai|ai-1,ai∈D,ai-1ai,i=2,…,n}
基本操作:
InitList(L)
操作结果:构造一个空的有序表L。
DestroyList(L)
初始条件:有序表L已存在
操作结果:销毁有序表L。
CreateList(L,n)
操作结果:构造一个含有n个元素的链表L。
ListLength(L)
初始条件:链表L已经存在。
操作结果:返回L中数据元素的个数。
GetElem(L,i,e)
初始条件:链表L已经存在。
操作结果:用e返回L中第i个元素的值。
Equal(c1,c2)
初始条件:链表L已经存在且不为空。
操作结果:判断链表L中两元素是否相等,若相等则返回true,否则返回false。
LocateElem(L,e,equal)
初始条件:链表L已经存在,Equal是数据元素的判定函数。
操作结果:返回L中第一个与e满足关系Equal的数据元素的位序。若这样的元素不存在,则返回值为0。
ListInsert(L,I,e)
初始条件:链表L已经存在,1=i=ListLength(L)+1.
操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1。
ListDelete(L,I,e)
初始条件:链表L已经存在且非空,1=i=ListLength(L)。
操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1。
ListTraverse(L,visit())
初始条件:链表L已经存在。
操作结果:依次对L中每个数据元素调用函数visit()。一旦visit()失败,则操作失败。
Append(%L,e)
初始条件:有序表L已存在。
操作结果:在有序表L的末尾擦人元素e。
}ADT OrderedList
集合的抽象数据类型定义为:
ADT Set{
数据对象:D={ai|ai为小写英文字母且互不相同,i=1,2,…,n,0=n=26}
数据关系:R1={ }
基本操作:
CreatSet(T,Str)
初始条件:Str为字符串
操作结果:生成一个由Str中小写字母构成的集合T。
DestroySet(T)
初始条件:集合T已存在
操作结果:销毁集合T的结构。
Union(T,S1,S2)
初始条件:集合S1和S2存在
操作结果:生成一个由S1和S2的并集构成的集合T。
Intersection(T,S1,S2)
初始条件:集合A和B已经存在。
操作结果:生成一个由A和B的交集构成的集合T。
Difference(T,A,B)
初始条件:集合A和B已经存在。
操作结果:生成一个由A和B的差集构成的集合T。
PrintSet(T)
初始条件:集合T已经存在。
操作结果:将集合T中的元素打印出来。
}ADT Set
详细设计
单链表的存储结构
typedef struct LNode
{ int data;
struct LNode *next;
}LNode, *LinkList;
链表的基本操作的实现
void InitList(LinkList L)
{ L=(LinkList)malloc(sizeof(LNode));
if(!L)exit(OVERFLOW);
L-next=NULL;
}
void CreateList(LinkListL,int)
{ L=(
您可能关注的文档
最近下载
- (正式版)T-D-T 1090-2023 国土空间历史文化遗产保护规划编制指南.docx VIP
- 2023-2024学年贵州省贵阳市高一(上)期末英语试卷.docx VIP
- 长螺旋1:7水泥土桩施工组织方案.docx
- 玉米深加工项目可行性研究报告.docx
- 蔡磊书籍相信.pptx VIP
- AP1000核电厂调试技术文件体系建设.doc VIP
- 贵州省贵阳市2023-2024学年高一上学期期末考试 数学含解析.pdf VIP
- 健美操选择题有答案(多选题).pdf VIP
- 环氧树脂施工实施方案.doc VIP
- 山东省济南市市中区2023-2024学年八年级上学期期末考试物理试题(含答案).docx VIP
文档评论(0)