- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一.集合的并、交和差运算
1.【问题描述】:
编制一个能演示执行集合的并、交和差运算的程序。
【要求】:
集合的元素限定为小写字母字符[‘a’..’z’]。
演示程序以用户和计算机的对话方式执行。
【实现提示】:以链表表示集合。
【选作内容】:
集合的元素判定和子集判定运算。
求集合的补集。
集合的混合运算表达式求值。
集合的元素类型推广到其他类型,甚至任意
1.1需求分析1、? 本演示程序中,集合的元素限定为小写字母字符[“a”…”z”]。集合输入的形式为一个以“回车符“为结束标志的字符串,串中字符顺序不限。
2、? 演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息“之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据和运算结果显示在其后。
3、? 程序执行的命令包括:
1)? 构造集合1;2)构造在集合2;3)求并集;4)求交集;5)求差集;6)返回;7)结束。“构造集合1”和“构造集合2”时,需以字符的形式键入集合元素。
1.1.1程序的功能‘a’..’z’]。
演示程序以用户和计算机的对话方式执行。
能演示执行集合的并、交和差运算的程序
1.1.2.输入输出的要求‘a’..’z’]。
1.2概要设计1.2.1 程序流程图1.2.2 程序组成
1)? 节点结构单元模块——定义有序表的节点结构;
2)? 有序表单元模块——实现有序表的抽象数据类型;
3)? 集合单元模块——实现集合获得抽象数据类型;
主程序模块:
Void main(){
初始化;
While()
{
Case1:.....
Case2:……
.
.
Default:….
}
1.3详细设计CreateSet()
创建集合
DisplaySet()
打印集合
DestroySet()
销毁集合
EmptySet()
集合清空
Bingyunsuan()
两个集合并运算
Jiaoyunsuan()
两个集合交运算
Chayunsuan()
两个集合差运算
1.4调试分析1.4.1调试例子1.4.2调试结果1.4.3存在问题及改进设想””,使调试程序浪费时间不少。今后应重视确定参数的变量和赋值属性的区分和标识。
2、开始时输入集合后,程序只能进行一次运算,后来加入while()语句,成功解决了这一难题。
3、该算法并不能排除重复输入相同字符的情况,也不能自动滤去非法字符(如空格、阿拉伯数字等)。
1.5核心源程序清单
1.5.1结构体定义{
ElemType elem;
struct ElemNode *next;
}ElemNode, *Set;
1.5.2关键代码
int LengthOf(Set src)
{
//返回一个集合的长度
int i=0; //实初化
while(src-next!=NULL)//集合不为0
{
i++;//自加
src=src-next;//srcr指针移动
}
return i;//返回i
}//LengthOf
void CreateSet(Set dest)/
{
//创建一个新的字母集合,限定a-z
ElemType ch;
Set p=dest,n;//定义二个指针
for(;;) //无条件循环
{
ch=getchar();//输入一串字符串,取第一个字符
if(ch==\n) break;//为空时跳出循环
if(ch97||ch122) continue;//a的ASCII为97有26个字母
n=(Set)malloc(sizeof(ElemNode));//创建一个结点
p-next=n;//把n与p联系在一起
n-elem=ch;//赋值
n-next=NULL;//赋值
p=n;//指针往向移
}
return ;
}
void EmptySet(Set dest)
{
//清空一个集合,保留头结点
Set p,n;
while(dest-next!=NULL)//dest集合为空时
{
p=dest;//赋值
n=p-next;//n与p-next相连
for(;n-next!=NULL;)//n指向的集合不为空
{
p=n;//p指针往后移
n=n-next;//n指针往后移
}
free(n);//释放内存
p-next=NULL;//保留头结点
}
}//EmptySet
void DestroySet(Set dest)
{
文档评论(0)