数据结构Word格式.docx

上传人:b****1 文档编号:1474686 上传时间:2023-04-30 格式:DOCX 页数:15 大小:188.58KB
下载 相关 举报
数据结构Word格式.docx_第1页
第1页 / 共15页
数据结构Word格式.docx_第2页
第2页 / 共15页
数据结构Word格式.docx_第3页
第3页 / 共15页
数据结构Word格式.docx_第4页
第4页 / 共15页
数据结构Word格式.docx_第5页
第5页 / 共15页
数据结构Word格式.docx_第6页
第6页 / 共15页
数据结构Word格式.docx_第7页
第7页 / 共15页
数据结构Word格式.docx_第8页
第8页 / 共15页
数据结构Word格式.docx_第9页
第9页 / 共15页
数据结构Word格式.docx_第10页
第10页 / 共15页
数据结构Word格式.docx_第11页
第11页 / 共15页
数据结构Word格式.docx_第12页
第12页 / 共15页
数据结构Word格式.docx_第13页
第13页 / 共15页
数据结构Word格式.docx_第14页
第14页 / 共15页
数据结构Word格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据结构Word格式.docx

《数据结构Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构Word格式.docx(15页珍藏版)》请在冰点文库上搜索。

数据结构Word格式.docx

3.程序的执行命令有

1)选择操作;

2)程序结束

4.测试数据

1)Set1=“magazine”,set2=“paper”,

Set1∪set2=“aegimnprz”,set1∩set2=“ae”,set1-set2=“gimnz”;

2)Set1=“012oper4a6tion89”,set2=“errordata”,

Set1∪set2=“adeinoprt”,set1∩set2=“aeort”,set1-set2=“inp”;

二、详细设计

●首先对于用户输入的字符进行筛选和过滤,若用户输入的内容不合法,即包括不为字母的其他字符,可以根据字符输入后在计算机中的存储形式为ASCⅡ,完成操作。

●设有集合A、B,A与B的交集为A∩B。

A∩B指既属于集合A又属于集合B的元素。

因为要求另外申请存储空间,可另找一个新的集合C,C中存储A和B共同的元素。

问题即变为求:

C=A∩B。

算法思想为:

以A为标准,对B进行遍历,把B中和A相同的元素存储到C中。

具体过程如下:

1.扫描A,对A中每个元素执行2

2.在B中查找该元素

1)如果B中有,则保留到C中

2)否则,继续查找

3.显示C=A∩B

●求集合的并就是求A和B中所有的元素,先定义两个集合的并,设计思路如下:

1.把A中的元素全部放到一个集合C中

2.以A每一个元素为基准,对B进行循环

1)B中存在元素与该元素不同,则把该元素放到C中

2)B中存在元素与该元素相同,继续循环

3.显示C=A+B

●我们定义两个集合的差,设计思路如下:

1.假定A大于B,计算C=A-B

1)B中元素都与该元素不同,则把该元素放到C中

2)B中存在元素与该元素相同,继续循环

3.显示C=A-B

三、调试分析

1、本实习作业采用数据抽象的程序设计方法,将程序划分为三个层次:

结构体定义、操作函数、主控模块,使得设计思路清晰,实现时调试顺利,各模块具有较好的可重复性,确实得到了一次良好的程序设计训练。

2、在设计中为了实现对输入字符串的筛选功能,使用了布尔类型定义,判断真假。

3、通过查阅书籍,对顺序表,链表有了更清晰的认识

四、用户手册

根据界面的提示信息进行输入即可,当用户的输入出现非小写字母,如数字、特殊符号等,程序会根据运算的要求自动过滤与集合运算无关的字符,不用的担心出现错误的输入。

1.本程序的运行环境为DOS操作系统,可执行文件为:

未命名2.exe

2.为了界面更加友好特将背景颜色设计为黑色,字体为白色。

3.进入演示程序后的用户界面(见下,测试结果截图)。

五、测试结果

●Set1=“magazine”,set2=“paper”,

●Set1=“012oper4a6tion89”,set2=“errordata”,

1.输入字符串中无重复元素,对两集合进行的运算结果如下:

2.当某一集合中出现重复的元素时,程序自动将重复的元素过滤后在进行运算

3.当用户输入的字符包括数字、特殊符号时,运算结果如下

4.当输入的两个集合为相同元素时,运算如下:

六、源代码

#include<

iostream>

//C++输入输出流,预处理指令

List>

//链表类

usingnamespacestd;

//使用C++的命名空间std

#defineDataTpyechar//定义数据类型

boolIsElementInList(list<

DataTpye>

aSet,DataTpyeiElement)

//使用布尔函数,判断iElement元素是否在aSet集合中

{list<

:

iteratoriter;

for(iter=aSet.begin();

iter!

=aSet.end();

iter++)

//遍历aSet单链表中的所有元素,直到找到与iElement元素相同的元素,返回true表明存在iElement元素

{if(*iter==iElement)

//在单链表中找到了与iElement元素相同的元素,此时开始执行if语句块

{returntrue;

}

returnfalse;

//由于不满足for中的条件表明iElement元素在aSet中不存在

}

voidTrim(list<

&

aSet)

//去除集合aSet中的重复元素

newSet;

//在这里新创建一个单链表newSet,后面对aSet中的相同元素删除其仅剩一个为止,并放入newSet

list<

{if(!

IsElementInList(newSet,*iter)&

&

(*iter>

=97&

*iter<

=122))

//(*iter>

=122)这是极其关键的一部分,它的作用是删除链表中的数字

//在存储的时候数字是以字符的形式存储的,此时通过使用小写英文字母的ASCII码来限制插入单链表的元素

{newSet.push_back(*iter);

}

aSet=newSet;

//操作进行完成将newSet有重新赋给aSet

voidUnion(list<

set1,list<

set2)

//实现集合的并集运算,找出Set,Set_2中的所有元素

newSet=set1;

for(iter=set2.begin();

=set2.end();

{if(IsElementInList(newSet,*iter))

{continue;

//在newSet中查找与iter相同的元素,如果if语句条件成立,表明IsElementInList()操作完成后返回了true

//不做处理,跳出循环继续向后查找在newSet中查找与iter相同的元素

else

//if不满足条件表明是在set2中存在的元素而在set1中没有,此时插入到newSet

Trim(newSet);

newSet.sort();

//类中的方法,将单链表中的元素按照升序排列

cout<

<

"

集合的并操作结果是:

endl;

{"

;

for(iter=newSet.begin();

=newSet.end();

{cout<

"

cout<

}"

voidInter(list<

//实现集合的交集运算,找出Set,Set中的相同元素

{list<

for(iter=set1.begin();

=set1.end();

{if(IsElementInList(set2,*iter))

{//在newSet中查找与iter相同的元素,如果if语句条件成立,表明IsElementInList()操作完成后返回了true

//if条件成立找到了set2与set1相同的元素此时插入到newSet

newSet.push_back(*iter);

}

集合的交操作结果是:

voidDiffer(list<

//实现集合的差集运算,其本质是:

在Set中找出与Set相同的元素将其删除

for(iter=set1.begin();

{if(IsElementInList(set2,*iter))

{//在set2中找出与iter相同的元素,不做插入操作

continue;

//将set1中与set2不相同的元素插入到newSet,其意义就是作set1-set2

Trim(newSet);

集合的差操作结果是:

for(iter=newSet.begin();

{cout<

intmain(void)

{cout<

输入集合Set1的元素,按'

#'

结束"

set1,set2;

//定义两个单链表set1,set2用来实现测试数据元素的输入

DataTpyeiIn=-1;

//初始化输入的元素

while('

!

=iIn)//用#来作为结束输入的结束标志

{cin>

>

iIn;

set1.push_back(iIn);

set1.pop_back();

Trim(set1);

set1.sort();

输入的集合set1是:

输入集合set2的元素,按'

iIn=-1;

//回置数据标志

=iIn)

{cin>

set2.push_back(iIn);

set2.pop_back();

Trim(set2);

set2.sort();

输入的集合set2是:

here:

选择操作:

1并集,2交集,3差集,0退出"

cin>

switch(iIn)

{case'

1'

Union(set1,set2);

break;

case'

2'

Inter(set1,set2);

3'

Differ(set1,set2);

case'

0'

return0;

default:

break;

gotohere;

七、参考文献

《数据结构》(C语言版)严蔚敏、吴伟民著清华大学出版社出版

《数据结构题集》(C语言版)严蔚敏、吴伟民著清华大学出版社出版

《C++程序设计》谭浩强著清华大学出版社出版

《数据结构习题集与实验指导书》

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2