当前位置:首页 > 商业/管理/HR > 经营企划 > 数据结构课程设计报告-一元多项式加减运算
山东理工大学计算机学院课程设计(数据结构)班级计科1102姓名张汝全学号1111051010指导教师肖爱梅2013年1月7日课程设计任务书及成绩评定课题名称动态链表结构下的一元多项式的加法、减法和乘法的实现。Ⅰ、题目的目的和要求:1.巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。2.设计题目要求:1)首先判定一元多项式是否稀疏2)分别采用顺序和链式结构实现;3)结果在M(x)中无重复阶项和无零系数项;4)要求结果以升幂排列输出Ⅱ、设计进度及完成情况日期内容1.7-1.9选取参考书,查阅有关文献资料,完成资料搜集和系统分析工作。1.10-1.12创建相关数据结构,录入源程序。1.13-1.15调试程序并记录调试中的问题,初步完成课程设计报告。1.16上交课程设计报告打印版并进行课程设计答辩,要求每个同学针对自己的设计回答指导教师3-4个问题。1.17考核结束后将课程设计报告和源程序的电子版交班长统一刻光盘上交。Ⅲ、主要参考文献及资料[1]严蔚敏数据结构(C语言版)清华大学出版社1999[2]严蔚敏数据结构题集(C语言版)清华大学出版社1999[3]谭浩强C语言程序设计清华大学出版社[4]与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二年月日目录第一章概述……………………………………………………………1第二章系统分析………………………………………………………2第三章概要设计………………………………………………………3第四章详细设计………………………………………………………4第五章运行与测试……………………………………………………18第六章总结与心得……………………………………………………20参考文献………………………………………………………………211第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。在这次的课程设计中我选择的题目是动态链表结构下的一元多项式的加法、减法和乘法的实现。一元多项式计算是用C语言设计一个一元多项式简单计算器。它能够实现按指数升序排列建立并输出多项式,并且能够完成两个多项式的相加、相减与相乘的运算和将其结果输入的功能。通过设计一元多项式,初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能提高,综合运用所学的理论知识和方法独立分析和解决问题的能力;加深对常用数据结构的理解,强化逻辑思维能力和动手能力,巩固良好的编程习惯,掌握工程软件设计的基本方法,为后续课程的学习打下坚实基础。2第二章系统分析1.动态链表结构下的一元多项式的加法、减法、乘法的实现。可以分为几个模块:输入模块、输出模块(升幂)、数据处理模块(多项式的加减乘)、主程序模块。2.在程序执行过程中加入汉字提示符,让使用者清楚明白的操作该程序。运行程序时看起来简洁有序,操作简单明了。3.程序执行时的命令:①创建两个一元多项式②输入第一个一元多项式的项数③依次输入一元多项式的系数和指数④以相同方式输入第二个一元多项式⑤数据处理⑥输出结果。4.测试数据。输入的一元多项式系数指数分别为70,31,98,517和81,227,-98。加法结果为:7+11x+22x^(7)+5x^(17)减法结果为:7-5x-22x^(7)+18x^(8)+5x^(17)5.乘法结果为:56x+24x^(2)+154x^(7)+3x^(8)+45x^(9)+198x^(15)-81x^(16)+40x^(18)+110x^(24)-45x^(25)3第三章概要设计1.数据结构的设计为了节省存储空间,只存储多项式中系数非零的项,本程序使用链式存储结构。2.算法的设计本设计从总体上划分为3个模块。a)主函数模块。程序的入口,主要实现各个函数的调用。b)头文件模块。定义类和结构体。c)函数模块。数据处理和实现每个功能。3.抽象数据类型ADTlist{数据对象:D={ai|ai∈ElenSet,i=1,2,…,n,n≥0}数据关系:R1={ai-1,ai|ai-1,ai∈D,i=2,…,n}基本操作:InitLink(&head,len)初始条件:链表为空。操作结果:创建链表。Sparsity(&head,len)初始条件:链表已存在。操作结果:判断是否稀疏。Display(head)初始条件:链表已存在。操作结果:输出多项式。Merge(&head)初始条件:链表已存在。操作结果:合并指数相同的项。SelectSort(&head)初始条件:链表已存在。操作结果:选择排序。Negative(&head)初始条件:链表已存在。操作结果:取负。DelZero(&head)初始条件:链表已存在。操作结果:删除系数为0的项。operator+(&head,&b);初始条件:链表已存在。操作结果:重载+。operator*(&head,&b);初始条件:链表已存在。操作结果:重载*。}4第四章详细设计1.类定义。polynomial.h#ifndefPOLYNOMIAL_H_INCLUDED#definePOLYNOMIAL_H_INCLUDEDtemplatetypenameTstructNode{Tcoef;//定义系数Texpn;//定义指数Node*next;};//定义结构体templatetypenameT//模板类classLinkList{private:NodeT*head;//定义头结点public:LinkList();//初始化链表voidInitLink(intlen);//建立链表voidSparsity(intlen);//是否稀疏voidDisplay();//显示voidMerge();//合并指数相同的项voidSelectSort();//选择排序voidNegative();//取负voidDelZero();//删除系数为0的项LinkListToperator+(LinkListT&b);//重载+LinkListToperator*(LinkListT&b);//重载*};#endif//POLYNOMIAL_H_INCLUDED2.成员函数。polynomial.cpp5#includeiostream#includepolynomial.husingnamespacestd;templatetypenameTLinkListT::LinkList(){head=newNodeT;head-next=NULL;}//初始化templatetypenameTvoidLinkListT::InitLink(intlen){NodeT*p,*q;q=head;cout系数指数:endl;while(len--){p=newNodeT;cinp-coefp-expn;p-next=NULL;q-next=p;q=p;}}//建立多项式templatetypenameTvoidLinkListT::Display(){DelZero();NodeT*q;q=head-next;6if(!q){//空链表输出0cout0endl;return;}if(q-coef){if(q-coef==1){if(q-expn==0){coutq-coef;}elseif(q-expn==1){coutx;}else{coutx^(q-expn);}}elseif(q-coef==-1){if(q-expn==0){coutq-coef;}elseif(q-expn==1){cout-x;}else{cout-x^(q-expn);}}else{if(q-expn==0){coutq-coef;7}elseif(q-expn==1){coutq-coefx;}else{coutq-coefx^(q-expn);}}}q=q-next;while(q){if(q-coef){if(q-coef0){if(q-coef==1){if(q-expn==0){cout+;}elseif(q-expn==1){cout+x;}else{cout+x^(q-expn);}}else{if(q-expn==0){cout+q-coef;}elseif(q-expn==1){cout+q-coefx;8}else{cout+q-coefx^(q-expn);}}}else{if(q-coef==-1){if(q-expn==0){coutq-coef;}elseif(q-expn==1){cout-x;}else{cout-x^(q-expn);}}else{if(q-expn==0){coutq-coef;}elseif(q-expn==1){coutq-coefx;}else{coutq-coefx^(q-expn);}}}9}q=q-next;}coutendl;}//输出多项式templatetypenameTvoidLinkListT::Sparsity(intlen){if(head-next==NULL){cout0endl;cout不稀疏!endl;return;}NodeT*p,*q;q=head;p=head-next;while(q-next){q=q-next;}doublex=1.0*len/(q-expn-p-expn);Display();if(x=0.05)cout稀疏!endl;elsecout不稀疏!endl;}//判断是否稀疏templatetypenameTvoidLinkListT::Merge(){NodeT*p,*q,*t;10for(q=head-next;q;q=q-next){for(p=q-next;p&&p-expn==q-expn;){q-coef+=p-coef;q-next=p-next;t=p;p=p-next;free(t);}}}//合并指数相同的项templatetypenameTvoidLinkListT::SelectSort(){NodeT*p,*q;for(q=head-next;q;q=q-next){for(p=q-next;p;p=p-next){if(q-expnp-expn){swap(q-coef,p-coef);swap(q-expn,p-expn);}}}Merge();}//选择排序升幂templatetypenameTvoidLinkListT::Negative(){NodeT*p;p=head-next;while(p){11p-coef=0-p-coef;p=p-next;}}//取负tem
本文标题:数据结构课程设计报告-一元多项式加减运算
链接地址:https://www.777doc.com/doc-2430902 .html