您好,欢迎访问三七文档
数据结构课程设计题目一:设计一个一元稀疏多项式简单计算器题目二:集合的并,交和差运算班级:计1101姓名:张文江学期:2012-2013学年第二学期上机实验报告(一)一、题目:设计一元稀疏多项式简单计数器二、问题描述:(1)定义两个单链表用于存储两个多项式,存储好在输出时按指数降序输出。(2)按指数降序排列时要注意指数的比较以及指数相同与不同时的计算方法。(3)设计出其运算的加、减函数。(4)再设计一个释放空间的函数用于退出系统操作。(5)设计一个测试主函数,实现对基于顺序队列结构的一元多项式算法的测试。(6)为了界面显示友好期间可以设计一下输出后的界面格式。三、基本要求:(1)输入并建立多项式,输出多项式,序列按指数降序排列;(2)多项式a和b相加,建立多项式a+b,输出相加的多项式;(3)多项式a和b相减,建立多项式a-b,输出相减的多项式;(4)用带头结点的单链表存储多项式。四、测试数据:(1)(2x+5x8-3.1x11)+(7-5x8+11x9)(2)(6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15)(3)(x+x2+x3)+0(4)(x+x3)-(-x-x-3)五、算法思想:利用单链表来存储多项式,因此这里需要创建两个单链表分别用于存储多项式a和b,然后逐项在链表中按指数降序排列插入;利用数学中的加法方法,比较两个多项式,利用指数进行比较,进行减法计算方法时利用加法的逆运算实现,最后将输入的多项式按不同的要求提示进行函数调用实现。六、模块划分:头文件为:#includestdio.h#includestdlib.h//结点结构体typedefstructPolyNode{floatcoef;//系数域intexp;//指数域structPolyNode*next;//指针域}*Poly,PolyNode;//1、按指数降序插入多项式voidInsert(Polyp,Polyh)//2、创建多项式(带有头结点且有m项)PolyCreate(Polyhead,intm)//3、对两个多项式进行比较判别//4、实现多项式相加//5、实现多项式相减(思想:兩数相减=两个正数的相反数相减)//6、输出多项式voidPrint(PolyP)//7、销毁多项式(使用完后用于退出,释放空间)测试主intmain(){intm,n,flag=0;Polypa=0,pb=0,pc,pd;//输出菜单printf(**************************************************************************\n);printf(1.输入多项式2.输出多项式a和b3.建立多项式a+b4.建立多项式a-b5.退出程序\n);printf(**************************************************************************\n);for(;;flag=0){printf(执行操作为:);scanf(%d,&flag);if(flag==1){//定义各式的头指针,pa与pb在使用前付初值NULLprintf(请输入a的项数:);scanf(%d,&m);pa=CreateList(pa,m);//建立多项式aprintf(请输入b的项数:);scanf(%d,&n);pb=CreateList(pb,n);//建立多项式b}if(flag==2){printf(多项式a为:);OutputList(pa);printf(多项式b为:);OutputList(pb);continue;}if(flag==3){pc=AddPoly(pa,pb);printf(多项式a+b为:);OutputList(pc);DestroyList(pc);continue;}if(flag==4){pd=SubtractPoly(pa,pb);printf(多项式a-b为:);OutputList(pd);DestroyList(pd);continue;}if(flag==5)break;if(flag1||flag5)printf(输入错误!!!请重新选择!!\n);continue;}DestroyList(pa);DestroyList(pb);return0;}函数:七、源程序:intmain(){intm,n,flag=0;Polypa=0,pb=0,pc,pd;//输出菜单printf(**************************************************************************\n);printf(1.输入多项式2.输出多项式a和b3.建立多项式a+b4.建立多项式a-b5.退出程序\n);printf(**************************************************************************\n);for(;;flag=0){printf(执行操作为:);scanf(%d,&flag);if(flag==1){//定义各式的头指针,pa与pb在使用前付初值NULLprintf(请输入a的项数:);scanf(%d,&m);pa=CreateList(pa,m);//建立多项式aprintf(请输入b的项数:);scanf(%d,&n);pb=CreateList(pb,n);//建立多项式b}if(flag==2){printf(多项式a为:);OutputList(pa);printf(多项式b为:);OutputList(pb);continue;}if(flag==3){pc=AddPoly(pa,pb);printf(多项式a+b为:);OutputList(pc);DestroyList(pc);continue;}if(flag==4){pd=SubtractPoly(pa,pb);printf(多项式a-b为:);OutputList(pd);DestroyList(pd);continue;}if(flag==5)break;if(flag1||flag5)printf(输入错误!!!请重新选择!!\n);continue;}DestroyList(pa);DestroyList(pb);return0;}八、测试情况:(1)(2)测试结果分析:程序设计结果和人工模拟分析过程完全相同,说明程序正确。(3)思想感悟:经过这次的课程设计,我学到了好多,也越发的感觉到自己不知道的东西很多,一开始,对多项式的创建一窍不通,感觉很难,无法入手,后来,经过上网查询,与队友的讨论,逐渐有了头绪,慢慢写出了程序,第一次运行时,错误很多,改了好多次,终于成功了,让我感觉到了团队的力量!上级实验报告(二)一、题目:集合的并、交和差运算二、问题描述:(1)创建单链表用于存储集合,存储好集合在输出时按字母排好顺序输出。(2)设计出其运算的合并、求交、求差函数。(3)再设计一个释放空间的函数用于退出系统操作。(4)设计一个测试主函数,实现对基于顺序队列结构的集合运算的测试。(5)为了界面显示友好期间可以设计一下输出后的界面格式。三、基本功能编制一个能演示执行集合的并、交和差运算的程序。四、基本要求(1)集合的元素限定为小写字母字符[‘a’..’z’];(2)演示程序以用户和计算机的对话方式执行。五、测试数据(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”。六、算法思想:创建一个单链表用于存储一个集合,限定集合元素字母为“a”—“z”,计算出集合的长度以用于对集合中的元素排序,排序时从第一个元素开始逐个向后比较。计算时,合并思想为:将两个集合进行比较,有相同元素时只输入一个,元素不同时均输入;求交思想:两个集合比较将相同的元素输出;求差思想:用第一个集合中的元素和第二个集合比较,如果相同就删除,最后输出剩余的元素。利用销毁和清空方法释放占据的空间,最后在主函数中将集合按不同的要求提示进行函数调用实现。七、模块划分:头文件:#includestdio.h#includestdlib.h#defineElemTypechar//宏定义一个字符型的元素类型,以下使用不用定义//定义集合结构体typedefstructElemNode{ElemTypeelem;//集合元素域structElemNode*next;}*Set,ElemNode;//1、计算一个集合的长度用于对集合排序intLength(Setsrc)//2、创建一个从a-z字母集合voidCreate(Setdest)//3、清空一个集合voidEmpty(Setdest)//4、销毁集合voidDestroy(Setdest)//5、对一个字母集合进行从小到大的排序voidSort(Setdest)//6、打印集合的所有元素voidDisplay(Setsrc)//7、判断元素是否存在于集合中intExistElem(Setdest,ElemTypee)//8、删除集合中的一个元素一次voidDelElem(Setdest,ElemTypee)//9、在链表尾部追加一个元素voidAddElem(Setdest,ElemTypee)//10、集合合并运算voidAdd(Setdest,Setsrc1,Setsrc2)//11、集合求交集运算voidMul(Setdest,Setsrc1,Setsrc2)//12、集合求差运算voidSubtract(Setdest,Setsrc1,Setsrc2)//测试主函数intmain()八、源程序:#includestdio.h#includestdlib.h#defineElemTypechar//宏定义一个字符型的元素类型,以下使用不用定义//定义集合结构体typedefstructElemNode{ElemTypeelem;//集合元素域structElemNode*next;}*Set,ElemNode;//1、计算一个集合的长度用于对集合排序intLength(Setsrc){inti=0;while(src-next!=NULL)//集合元素不为空时i+1{i++;src=src-next;//依次向后}returni;}//2、创建一个从a-z字母集合voidCreate(Setdest){ElemTypech;Setp=dest,n;for(;;){ch=getchar();//输入字符if(ch=='\n')//遇到换行(一个集合输入完成)就返回终止break;if(ch97||ch122)//输入的字符不属于a-z就终止运行,用于实现限定元素功能continue;n=(Set)malloc(sizeof(ElemNode));//为集合n分配存储空间p-next=n;n-elem=ch;//将字符插入集合n-next=NULL;p=n;}return;}//3、清空一个集合voidEmpty(Setdest){Setp,n;while(dest-next!=NULL){p=dest;n=p-next;for(;n-next!=NULL;){p=n;n=n-next;}free(n);p-next=NULL;}}//4、销毁集合voidDestroy(Setdest){Empty(dest);free(dest);}//5、对一个字母集合进行从小到大的排序voidSort(Setdest
本文标题:西安石油大学数据结构数据结构程序设计报告--设计一个一元稀疏多项式简单计算器和集合的并,交和差运算概
链接地址:https://www.777doc.com/doc-3856444 .html