1、输出的运算结果字符串中将不含重复字符或非法字符。 有两个集合A、B,要求它的交集、并集和差集C。用两个链表p、q存储集合A、B,用链表r存储集合C。描述该问题的存储结构,算法,并通过编写程序来实现。问题分析: 1. 定义一个链表来存储集合元素; 2. 链表L包括数据域和指针域,数据域中存储集合元素,指针域中存储下一个集合元素的位置; 3. 创建若干个基本函数,通过函数调用对链表进行操作,实现集合的交、并、差运算。三 算法思想和程序的实现概述3.1 算法思想 定义一个链表,链表有整型数据和一个指向链表的指针,程序包含定义一个新链表的函数,集合并函数,集合交函数,集合差函数。求两集合交集并集差集从
2、两集合的头结点开始,比较两集合元素大小,进行对应的操作,直到读取到两集合的末尾元素。主程序先定义三个集合,创建集合A读入A数据,创建集合B读入B数据,然后输出集合A,B的元素,求出两集合并集并输出。求两集合的交集和差集的运算与求并集的步骤类似,只需按提示输入即可。3.2 程序的实现概述(1)输入的形式和输入值的范围: 输入是从键盘输入的,输入的内容为整数。(2)输出的形式 从屏幕输出,显示用户输入集合的元素,并显示进行运算后的值。(3)存储结构 在这次设计中开始我是采用链式存储结构,使得集合的算法定义十分简洁。(4)算法实现定义链表,创建链表,输出链表。利用链表的来存储集合。利用三个函数分别实
3、现课程要求程序实现的求并、求交和差三中运算。现分述如下:A)并运算函数 该函数采取了用新集合存储两集合并后的新集合,利用一个for循环来消除新集合中相同的元素,使其在屏幕上只显示一次。B)交运算函数该函数用于实现集合的并运算,利用for嵌套实现两链表中数据的比较,输出两链表中相同的元素。C)差函数 该函数用于实现集合的差运算,利用链表中的数据域进行判断。输出不同于被减集合中不存在的元素。四 程序流程图流程图:五 程序的实现改程序的实现步骤是定义链表,创建链表,输出链表。5.1 主函数void bangzhu() printf(nttt*);nttt* 求集合的交并差 *nttt*n void
4、main() /* 主函数 */ struct set *p,*q,*r; int m,n,node; bangzhu(); for(;) do printf(请输入您要选择操作的代码:n1:求两集合的并ABn2:求两集合的交ABn3:求两集合的差A-Bn0:退出该程序n scanf(%d,&node); while(node3); if(node=0) exit(1);ttt/*请输入集合A中元素的个数:*/nm); createlist_p(p,m); /* 调用链表生成函数生成A链表 */ttt/*请输入集合B中元素的个数:n); /* 调用链表生成函数生成B链表 */ createli
5、st_p(q,n);集合A中元素为: printlist_p(p); /* 调用集合输出函数输出集合A */集合B中元素为: printlist_p(q);while(nodenext=NULL; /* 定义p的next指针为空 */ for(i=n;i0;i-) L=(struct set *)malloc(sizeof(set); /* 申请结点L*/请输入该集合中第%d个整数元素:,n-i+1);%sL-coef); L-next=p-next; p-next=L;/生成新链表用于存放两集合中的元素 5.3 集合的输出void printlist_p(struct set *&p) L=
6、p- if(!L) printf(该表为空! while(L!=NULL) %c ,L- L=L- i+;/打印输入的两集合中的元素 5.4 并运算函数void Addset(struct set *&p,struct set *&q,struct set *&r) struct set *k,*m,*n; r=(struct set *)malloc(sizeof(set); /* 申请结点r */ r- /* 定义r的next指针为空 */ k=p- /* k指向p的下一个结点 */k;) m=(struct set *)malloc(sizeof(set); /* 申请结点m */m-n
7、ext=r-r-next=m;coef=k-coef;k=k- /* 把第一个集合中的元素放在新集合中 */ k=q- m=(struct set *)malloc(sizeof(set); m- k=k-for(n=r-(k-coef!=n-coef)&n- n=n- /* 与新集合中的元素比较,如果不同则链入链表中 */if(k-!(n-next) /* 对第二个集合中的元素进行分析 */ /* 求AB */该函数采取了用新集合存储两集合并后的新集合,利用一个for循环来消除新集合中相同的元素,是其在屏幕上只显示一次。5.5交运算函数void Subset(struct set *&r)
8、n=q-n;) /* 比较p和q链表中的元素,相同的元素存入链表r中 */ m=p-(m- m=m- if(m-coef=n-coef) k=(struct set *)malloc(sizeof(set); k-next=k;coef=m- /* 求AB */5.6 差函数void Intset(struct set *&m;next&coef) /* 比较链表p与q ,找出p中不同于q的元素存入链表r中 */ /* 求A-B */ 该函数用于实现集合的差运算,利用链表中的数据域进行判断。六 运行结果分析6.1 程序主界面 图 6.1 程序主界面6.2整数集合并运算 图6.2 整数集合并运算
9、6.3 整数集合交运算 图 6.3 整数集合交运算6.4 整数集合差运算图6.4 整数集合差运算6.5 字母集合并运算图6.5 字母集合并运算6.6 字母集合交运算图6.6 字母集合交运算6.7 字母集合差运算图6.7 字母集合差运算6.8 字母和数据集合并运算图6.8 字母和数据集合并运算6.9 字母和数据集合交运算图6.9 字母和数据集合交运算6.10 字母和数据集合差运算图6.10 字母和数据集合差运算6.11 退出程序 图6.11退出程七 源代码#includemalloc.hstdlib.hstruct set char coef; struct set *next; /线性表的单链
10、表存储结构 p=(struct set *)malloc(sizeof(set); /建立一个带头结点的单链表 /生成新节点 /插入到表头 /r中存放p for(n=r- if(k-next)/求AB /求AB coef) /求A-B void main() while(node通过这次数据结构的课程设计,加深对所学知识理解的同时也将所学知识系统化。经过这几天的思考发现,数据结构自己学习的有多么的糟糕和肤浅,最初的程序之中有许多的漏洞和不足,调试之中不断出现错误,自己无法解决。向老师同学请教之后才得以解决,我深刻的意识到我与其他同学的差距,所幸通过这次课程设计能够是自己有所提高本程序经过的反复修改和调试,发现错误,解决错误,才能在正常运行,有正确的结果。兴奋之余也深深体会到编程的工作人员的不易,希望自己能将现在的收获应用到以后的工作中。 1.c语言程序设计 清华大学出版社 2.数据结构 严蔚敏版 清华大学出版社 3.c+面向对象程序设计 清华大学出版社 4.c+语言课程设计 清华大学出版社 5.上网查阅的有关停集合的运算的资料
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1