数据结构课程设计报告顺序结构动态链表结构下的一元多项式的加法减法乘法的实现。

合集下载

数据结构课程设计-一元多项式的加法、减法、乘法的实现

数据结构课程设计-一元多项式的加法、减法、乘法的实现

一、设计题目一元多项式的加法、减法、乘法的实现。

二、主要内容设有一元多项式A m(x)和B n(x).A m(x)=A0+A1x1+A2x2+A3x3+… +A m x mB n(x)=B0+B1x1+B2x2+B3x3+… +B n x n请实现求M(x)= A m(x)+B n(x)、M(x)= A m(x)-B n(x)和M(x)= A m(x)×B n(x)。

要求:1) 首先判定多项式是否稀疏2) 采用动态存储结构实现;3) 结果M(x)中无重复阶项和无零系数项;4) 要求输出结果的升幂和降幂两种排列情况三、具体要求及应提交的材料1.每个同学以自己的学号和姓名建一个文件夹,如:“312009*********张三”。

里面应包括:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中)、任务书和课程设计说明书的电子文档。

2.打印的课程设计说明书(注意:在封面后夹入打印的“任务书”以后再装订)。

四、主要技术路线提示为把多个小功能结合成一个完整的小软件,需使用“菜单设计”技术(可以是控制台方式下的命令行形式,若能做成图形方式则更好)。

五、进度安排共计两周时间,建议进度安排如下:选题,应该在上机实验之前完成需求分析、概要设计可分配4学时完成详细设计可分配4学时调试和分析可分配10学时。

2学时的机动,可用于答辩及按教师要求修改课程设计说明书。

注:只用课内上机时间一般不能完成设计任务,所以需要学生自行安排时间做补充。

六、推荐参考资料(不少于3篇)[1]苏仕华等编著,数据结构课程设计,机械工业出版社,2007[2]严蔚敏等编著,数据结构(C语言版),清华大学出版社,2003[3]严蔚敏等编著,数据结构题集(C语言版),清华大学出版社,2003指导教师签名日期年月日系主任审核日期年月日摘要分析了matlab,mathmatic,maple等数学软件对一元多项式的计算过程,步骤后。

由于这些软件比较大功能齐全,但是实用性不强。

数据结构一元多项式加、减乘运算设计报告

数据结构一元多项式加、减乘运算设计报告

韶关学院计算机科学学院数据结构课程设计题目:多项式运算学生姓名:学号:专业:班级:指导教师姓名及职称:讲师起止时间:年月——年月1.课题分析1.1课题背景及意义《数据结构课程设计》是一门实践性的计算机课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。

通过这次课程设计,要求掌握较大程序的设计方法,相应数据结构的选择应用、算法的设计及其实现和性能分析等方面中加深对课程基本内容的理解。

同时,在设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

1.2程序功能本程序的功能是建立按照指数降序排列的两个一元多项式,并能够完成加、减和乘运算,最后将结果按照指数降序排列显示出来。

输入和输出值范围:系数精确到小数点6位,指数以整数表示。

输入形式:系数指数系数指数……0 0 //以0 0作为结束输出形式:fk(x)=系数x^指数+系数x^指数+……+0 x^01.3测试数据:1)加法操作:请输入第一个要操作的多项式:请按多项式指数由高到低输入系数和指数:(以0 0结束)8 64 5-2 4-123 3-1 110 00 0fa(x)=(8.000000x^6)+(4.000000x^5)+(-2.000000x^4)+(-123.000000x^3)+(-1.000000x ^1)+(10.000000x^0)请输入第二个要操作的多项式:请按多项式指数由高到低输入系数和指数:(以0 0结束)2 3-5 21 10 0fb(x)=(2.000000x^3)+(-5.000000x^2)+(1.000000x^1)请选择你要进行的操作:1.多项式相加2.多项式相减3.多项式相乘1fa(x)+f(b)=(8.000000x^6)+(4.000000x^5)+(-2.000000x^4)+(-121.000000x^3)+(-5.000 000x^2)+(10.000000x^0)2)减法操作:请输入第一个要操作的多项式:请按多项式指数由高到低输入系数和指数:(以0 0结束)8 64 5-2 4-123 3-1 110 00 0fa(x)=(8.000000x^6)+(4.000000x^5)+(-2.000000x^4)+(-123.000000x^3)+(-1.000000x ^1)+(10.000000x^0)fa(x)=(3.000000x^3)+(2.000000x^2)请输入第二个要操作的多项式:请按多项式指数由高到低输入系数和指数:(以0 0结束)2 3-5 21 10 0fb(x)=(2.000000x^3)+(-5.000000x^2)+(1.000000x^1)请选择你要进行的操作:1.多项式相加2.多项式相减3.多项式相乘2fa(x)-fb(x)=(8.000000x^6)+(4.00000x^5)+(-2.000000x^4)+(-125.000000x^3)+(-5.0000 00x^2)+(-2.000000x^1)+(10.000000x^0)3)乘法操作:请输入第一个要操作的多项式:请按多项式指数由高到低输入系数和指数:(以0 0结束)8 64 5-2 4-123 3-1 110 00 0fa(x)=(8.000000x^6)+(4.000000x^5)+(-2.000000x^4)+(-123.000000x^3)+(-1.000000x ^1)+(10.000000x^0)fa(x)=(3.000000x^3)+(2.000000x^2)请输入第二个要操作的多项式:请按多项式指数由高到低输入系数和指数:(以0 0结束)2 3-5 21 10 0fb(x)=(2.000000x^3)+(-5.000000x^2)+(1.000000x^1)请选择你要进行的操作:1. 多项式相加2. 多项式相减3. 多项式相乘3fa(x)*fb(x)=(16.000000x^9)+(-32.000000x^8)+(-16.000000x^7)+(-232.000000x^6)+(6 13.000000x^5)+(-125.000000x^4)+(25.000000x^3)+(-51.000000x^2)+(10.000000x^1) 2.概要设计2.1本程序包含的模块typedefstructLinkNode //定义单向链表{}linknode;voidcreatelink(linknode *head){ };//构建一个以单链表存储的多项式void show(linknode *head){ };//显示多项式voidaddtion(linknode *fa,linknode *fb,linknode *fc){ };//加法操作void subtraction(linknode *fa,linknode *fb,linknode *fc){ } ;//减法操作void multiply(linknode *fa,linknode *fb,linknode *fc){ };//乘法操作voidsortion(linknode *fc){ };//将乘法所得的结果合并同类项void deletion(linknode *head,linknode *s);{ };//删除结点操作voidmian(){ };//主程序2.2问题解决的思路概述首先是确定结构化程序设计的流程图,利用已存在的数据结构来构造一个存储一元多项式的结构,接着把三则运算分成五个主要的模块:实现加法的模块、实现减法的模块、实现乘法的模块、实现合并同类项模块、删除结点模块,然后各个模块里面还要分成若干种情况来考虑并通过函数的嵌套调用来实现其功能。

数据结构链式表实现一元多项式加减乘运算课程方案实验报告

数据结构链式表实现一元多项式加减乘运算课程方案实验报告

数据结构课程设计设计题目:基于链式表实现一元多项式的加减乘运算目录问题分析11.1 问题描述设计一个n元多项式程序,并完成多项式的乘法运算。

从实际的角度出发,这里设计的程序是基于一元n次多项式的数学模型。

1.2 问题的数学模型在数学上,一个一元多项式Pn(x>可按升幂写成:Pn(x>=a 0+a1 x+a2 x^2 +…+a n x^n-1.它由n+1个系数惟一确定,因此,在计算机里,它可用一个线性表P来表示:Pn=(a0,a1,a2,…,an>每一项的指数i隐含在其系数ai的序号里。

多项式的乘法规则:多次运用单项式与多项式相乘的法则得到的.计算时(a+b>(m+n>,先把(m+n>看成一个单项式,(a+b>是一个多项式,运用单项式与多项式相乘的法则,得到(a+b>(m+n>=a(m+n>+b(m+n>,然后再次运用单项式与多项式相乘的法则。

1.3 构造数据结构通过分析多项式的特征,不难看出多项式是由单项式构成的,而每个单项式都具有系数和指数,当系数为0时,该项就失去了意义,在计算机内要表示一个多项式,至少以下数据信息:系数信息、指数信息和指向下一个单项式的指针。

通过指针,我们就可以把多个单项式连接起来,形式一个多项式,需要说明的是从广义的角度讲,单项式也是一个多项式。

基于以上的分析,我们定义多项式的数据结构为如下结构体形式:typedef struct Polynomial{float coef。

//系数int expn。

//指数struct Polynomial *next。

//指向下一个结点}*Polyn,Polynomial。

//Polyn为结点指针类型2 系统分析2.1 可行性研究该程序主要从技术的角度来分析可行性。

技术上的可行性研究主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。

该系统采用了Windows XP操作系统结合Visual C++ 6.0,TC 2.0等软件开发平台已成熟可行。

数据结构课程设计报告一元多项式加减乘除精

数据结构课程设计报告一元多项式加减乘除精

数据结构课程设计报告一元多项式加减乘除精多项式想加减与乘与升降序学院计算机科学与技术专业信息安全学号 12070学生姓名陶宝中辅导教师姓名12月 22 日一、设计目的与内容了解数据结构的与算法的设计方法,独立分析和设计一元多项式加减与乘除的程序编码,经过程序编写掌握软件开发过程的问题分析,系统设计,程序编码,测试等基本方法和技能,提高综合运用所学理论知识和方法独立分析和解决问题的能力,经过这次实践将实验问题中的所涉及的对象在计算机中表示出来并对她们进行处理,掌握线除。

任务与分析本课题主要的目的是分别采用顺序和动态存储结构实现一元多项式的加法、减法和乘法。

并将操作结果分别按升序和降序输出程序的主要功能一元多项式创立建立一元多项式的顺序表和链式表,按程序提示输入每个项数据结束创立。

借助元素在存储器中的相对位置来表示数据元素之间的关系,顺序表中第i个位置表示一元多项式的第i项的系数为第i个位置存放的内容,指数为i-1。

创立一个一元多项式顺序表,对一元多项式的运算中会出现的各种情况进行分析,实现一元多项式的相加、相减、相乘操作。

用链表来表示只存储多项式中系数非零的项。

链表中的每一个结点存放多项式的一个term项结构和指向下一个节点的指针域,term又包括系数和指数两个域分别存放该项的系数、。

创立一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减、相乘操作。

一元多项式的加法对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别复抄到和多项式中去。

一元多项式的减法对于两个一元多项式中所有指数相同的项,对应系数相减,若其差不为零,则构成“和多项式”中的一项;对于两个一元多项式中所有指数不相同的项,将其按减法规则复抄到差多项式中去。

一元多项式的乘法将乘法运算分解为一系列的加法运算利用两个一元多项式相加的算法实现。

数据结构课程设计一元多项式的加减法运算

数据结构课程设计一元多项式的加减法运算

武汉理工大学华夏学院课程设计报告书课程名称:数据结构与算法分析题目:用C语言实现一元多项式的加减法运算系名:信息工程系专业班级:物联网工程1122班姓名:隋明超学号: 10213312201 指导教师:司晓梅2014年 1 月 3 日武汉理工大学华夏学院信息工程系课程设计任务书课程名称:数据结构与算法分析指导教师:司晓梅班级名称:物联网1121-2 开课系、教研室:信息系计算机一、课程设计目的与任务《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程。

目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据的逻辑结构和存储结构以及相应操作,把现实世界中的问题转换为计算机内部的表示和处理,这就是一个良好的程序设计技能训练的过程。

提高学生的程序设计能力、掌握基本知识、基本技能,提高算法设计质量与程序设计素质的培养就是本门课程的课程设计的目的。

任务:根据题目要求,完成算法设计与程序实现,并按规定写出课程设计报告。

二、课程设计的内容与基本要求设计题目:用C语言实现一元多项式的加减法计算〔问题描述〕输入并建立两个多项式并输出多项式设计一个程序:对两个多项式进行加、减法运算,建立一个新多项式并输出。

〔实现提示〕:选择单链表存储多项式具体要完成的任务是:A. 编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。

B. 写出规范的课程设计报告书;三、课程设计步骤及时间进度和场地安排时间:本课程设计安排在第18周地点:现代教育中心具体时间安排如下:第一天:布置题目,确定任务、查找相关资料第二天~第四天:功能分析,编写程序,调试程序、运行系统;第五天上午:撰写设计报告;第五天下午:程序验收、答辩。

四、课程设计考核及评分标准课程设计考核将综合考虑学生的系统设计方案、运行结果、课程设计报告书的质量、态度、考勤、答辩情况等各因素。

数据结构线性表链式存储实现一元多项式加减课程实施方案实验报告

数据结构线性表链式存储实现一元多项式加减课程实施方案实验报告

数据结构课程设计设计题目:基于线性表链式存储实现一元多项式加减课题名称基于线性表地链式存储实现一元多项式地相加减姓名成绩课题设计目地与设计意义1、课题设计目地:(1).熟练掌握线性表链式存储基本地存储形式:单链表,循环链表以及双链表(2).熟练运用线性表链式存储地基本运算(3).能应用循环链表实现一元多项式地相加减(4).将一元多项式相加减地思想利用C语言编写程序在计算机上实现2、课题设计意义:(1).进一步了解循环链表地特点:无须增加存储量,仅对表地连接方式稍作改变,即可使得表处理更加方面灵活(2).学会将数学语言转化为计算机语言(3).懂得课程设计地格式及要求,有利于以后写毕业论文(4).耐心,细心以及广泛地材料收集地成功地前提指导教师:年月日目录第一章.课程设计地目地与意义4b5E2RGbCAP1.1课题设计地目地4p1EanqFDPw1.2课题设计地意义4DXDiTa9E3d第二章.课题设计地内容和要求4RTCrpUDGiT2.1 课题设计地内容45PCzVD7HxA2.2 课题设计地要求4jLBHrnAILg第三章.问题分析4xHAQX74J0X3.1问题描述4LDAYtRyKfE3.2解决途径5Zzz6ZB2Ltk3.2.1顺序表与链式表地比较5dvzfvkwMI13.2.2构造数据类型5rqyn14ZNXI第四章.概要设计5EmxvxOtOco4.1构造数据类型5SixE2yXPq54.2基本运算66ewMyirQFL4.2.1主函数6kavU42VRUs4.2.2输入输出函数6y6v3ALoS894.2.3多项式地相加减6M2ub6vSTnP第五章.详细分析70YujCfmUCw5.1思路分析7eUts8ZQVRd5.2具体分析7sQsAEJkW5T5.2.1主函数7GMsIasNXkA根据流程图可写出主函数地主要语句8TIrRGchYzg5.2.2输入输出函数87EqZcWLZNX5.2.3 多项式相加9lzq7IGf02E5.2.4 多项式相减12zvpgeqJ1hk第六章运行结果分析15NrpoJac3v16.1 输入输出分析151nowfTG4KI6.2 运行结果分析16fjnFLDa5Zo第七章结束语17tfnNhnE6e57.1心得体会与总结17HbmVN777sL第八章源代码17V7l4jRB8Hs参考文献:2383lcPA59W9第一章.课程设计地目地与意义1.1课题设计地目地(1).熟练掌握线性表链式存储基本地存储形式:单链表,循环链表以及双链.(2).熟练运用线性表链式存储地基本运算.(3).能应用循环链表实现一元多项式地相加减.(4).将一元多项式相加减地思想利用C语言编写程序在计算机上实现1.2课题设计地意义(1).进一步了解循环链表地特点:无须增加存储量,仅对表地连接方式稍作改变,即可使得表处理更加方面灵活mZkklkzaaP(2).学会将数学语言转化为计算机语言(3).懂得课程设计地格式及要求,有利于以后写毕业论文(4).耐心,细心以及广泛地材料收集地成功地前提第二章.课题设计地内容和要求2.1 课题设计地内容利用计算机语言实现一元n次多项式地输入输出及其多项式地相加减并正确输出,并且让别人看得一目了然(即编辑程序界面友好化).AVktR43bpw2.2 课题设计地要求(1)程序运行需在Visuai C++地条件下进行(2)熟悉C语言地环境,语句及函数地作用(3)明确自己课题设计地主题,目地及意义(4)熟练掌握线性表链式存储地方式及有关知识(5)大量收集资料并整理(6) 良好地语言组织能力与逻辑思维能力第三章.问题分析3.1问题描述已知2个一元多项式,它们地每一项由系数与指数确定.编写程序实现这2个一元n次多项式地相加减,并能正确输出这两个一元n次多项式及加减后地结果.ORjBnOwcEd3.2解决途径3.2.1顺序表与链式表地比较(1)基于空间地考虑当线性表地地长度变化较大,难以估计其存储规模时,宜采用动态链表作为存储结构为好;当线性表地长度变化不大,易于事先确定其大小,为了节约存储空间,宜采用顺序表作为存储结构.2MiJTy0dTT(2)基于时间地考虑若线性表地操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;对于频繁进行插入和删除地线性表,宜采用链表做存储结构.若表地插入和删除主要发生在表地首尾端,则采用尾指针表示地单循环链表为宜.gIiSpiue7A(3)基于语言地考虑当线性表地长度不变,仅需改变结点间地相对关系时,静态链表比动态链表可能更方便.基于以上三点考虑,用计算机语言实现一元n次多项式地相加减,应该采用线性表链式存储地循环链表实现.3.2.2构造数据类型在计算机内,我们用一个结点来存放多项式地一项,为了节约空间,并和书写习惯一致,只需保留非0系数地项.每个结点分系数,指数和指针三个域,如下图uEh0U1Yfmh系数指数指针coef exp next图1 多项式结点格式建立两条循环链表A,B编写程序实现指数相同地项相加.具体思想如下:① 若p1->exp==p2->exp,则将两个结点中地系数相加,当和不为0时修改结点p1地系数,否则修改结点p2地系数IAg9qLsgBX② 若p1->exp>p2->exp,则结点p2所指地结点应是“和多项式”中地一项,将结点p2插入在结点p1之前,且令指针p2在原来地链表上后移.WwghWvVhPE③ 若p1->exp<p2->exp,则结点p1所指地结点应是“和多项式”中地一项,将结点p1插入在结点p2之前,且令指针p1在原来地链表上后移.asfpsfpi4k第四章.概要设计4.1构造数据类型根据上面地解决途径可以对指数,系数及指针进行以下说明:typedef struct pnode{int exp; /*指数*/float coef; /*系数*/struct pnode *next;}polynode;4.2基本运算4.2.1主函数(1)功能:进入程序,并实现函数调用(2)数据流入:要输入控制调用函数地序号和是否介绍数字(3)测试要点:输入地数字能否调用对应地函数思想:(1) 用输入地i控制菜单(2)根据输入地i对函数进行调用(3)利用菜单实现对程序地控制以及运算地先后顺序(4)再次利用输入地i选择程序是否结束4.2.2输入输出函数(1)功能:将要进行相加减地一元n次多项式输入输出(2)数据流入:要输入地多项式地系数与指数.(3)数据流出:合并同类项后地多项式.(4)测试要点:输入地多项式是否正确,若输入错误则重新输入思想:(1)首先判断输出地多项式地下一个系数是否为零(2)如果不为,判断系数是否大于零;则就输出这一项(3)如果系数大于零,则输出这一项并在后面加“+”;否则直接输出这一项(4)该项输出后,将指针指向下一个4.2.3多项式地相加减(1)功能:实现输入地一元n 次多项式地相加减(2)测试要点:进行加减运算后(即合并同类项后)地多项式是否正确思想:(1)将p1=A->next,p2=B->next,并生成新地结点p(2)判断p1,p2是否同时非空(3)若不成了再判断p1,p2地指数是否相等,反之不做(4)若p1,p2地指数相等,则将p1,p2地系数相加或相减,并改变p1,p2地指针;若p1,p2地指数不相等,则判断p1,p2指数地大小,若p1->exp>p2->exp,将p2地指数及系数赋给p,并使p2向后移一位(如果是相减则将p2地系数取反后再赋给p,指数不变),反之将p1地系数及指数赋给p,并使p1向后移一位,循环运算,直到p1->next=0或p2->next=0,在把没比较完地多项式后面地项直接赋到p地后面.ooeyYZTjj1第五章.详细分析5.1思路分析(1)主函数 定义所需要地数据类型,并用switc h ~case 语句实现各函数地调用(2)输出函数 判断输出多项式地下一个系数是否为零,不为零再判断系数是否大于零,大于零组输出时在后面加上“+”,否则直接输出BkeGuInkxI(3)多项式相加 定义所需变量,在非空条件下判断指数是否相等,相等则系数相加,否则再判断指数哪个大,将小是赋给p ,指针向后移,再判断是否为空,不为零即赋到p 地后面PgdO0sRlMo(4)多项式相减 定义所需变量,在非空条件下判断指数是否相等,相等则系数相加,否则再判断指数哪个大,将小是赋给p ,指针向后移,再判断是否为空,不为零即取反赋到p 地后面3cdXwckm15 5.2具体分析 5.2.1主函数 模块图如下:h8c52WOngM图2 主函数地模块图0 1 2 3 4 5 6 7 1 0输入i输出多项式D多项式A 与B 相减输出多项式C输出多项式B输出多项式A多项式A 与B 相加建立多项式B建立多项式A结束 继续根据流程图可写出主函数地主要语句 switch(i) { case 0:creatA();break; case 1:creatB();break; case 2:p=polyadd(A,B);break; case 3:printA(A);break; case 4:printB(B);break; case 5:printC(p);break; case 6:p=polyminus(A,B);break; case 7:printD(p);break; }printf("\n\t\t0:结束\n\t\t1:继续\n"); scanf("%d",&i);}5.2.2输入输出函数流程图如下v4bdyGiousN YN生成新地结点空间输入多项式地项数输入多项式地系数与指数函数地输出 p->next!=NULL p->next->coef>0 开始根据以上输入输出函数地流程图写出以下主要语句:while(p->next!=NULL) /*判断是否有下一项*/{if(p->next->coef>0) /*判断下一项地系数是否大于零*/printf("%.2fx^%d+",p->coef,p->exp);elseprintf("%.2fx^%d",p->coef,p->exp);p=p->next;}printf("%.2fx^%d",p->coef,p->exp);主要思想是:判断下一项是否为空,不空再判断下一项系数是否大于零,大于零则输出该项并在后面加上“+”,否则直接输出;若下一项为空则直接输出该项.J0bm4qMpJ95.2.3 多项式相加根据以上地思想分析,可画如下流程图XVauA9grYPp1->exp>p2->exp NN 开始生成新地结点空间p 并将建立地多项式赋给新定义地共用体类型p1,p2P1,p2是否有空地 p1->exp==p2->exp 将该项系数相加,并赋给xX=0?将相加后地系数赋给p 地系数,将指数赋给p 地指数将p1地指数及系数赋给p 地指数和系数 将p2地指数及系数赋给p 地指数和系数p1=p1->next p2=p2->next ;判断p1是否判断p2是否为空 结束YYYYNYN在单链表中,从已知结点出发,只能访问到该结点及其后续结点,无法找到该结点之前地其他结点.而在循环链表中,从任一结点出发都可访问到表中所有结图4 多项式相加流程图点,这一优点使得某些运算在单循环链表上易于实现. bR9C6TJscw两个多项式相加地运算规则很简单,即对所有指数相同地项,将其对应系数相加,若和部位零,则构成“和多项式”中地一项,将所有指数不相同地项复制到和多项式中.pN9LBDdtrd根据以上流程图以及多项式相加地运算规则和单循环链表地性质可以编写以下主要语句:while(p1&&p2) /*判断p1,p2是否有空*/{if(p1->exp==p2->exp) /*判断p1,p2该项地指数是否相等*/{x=p1->coef+p2->coef; /*将p1,p2该项地系数相加,并赋给x*/if(x!=0) /*判断相加后地系数是否为零*/{p->next=(polynode*)malloc(sizeof(polynode)); /*生成心结点*/DJ8T7nHuGTp=p->next; /*改变p地指向*/QF81D7bvUAp->coef=x; /*将x赋给p地系数*/p->exp=p1->exp; /*将p1地指数赋给p地指数*/ }p1=p1->next; /*p1,p2都指向项下一个*/4B7a9QFw9hp2=p2->next;}else{p->next=(polynode*)malloc(sizeof(polynode));p=p->next;if(p1->exp>p2->exp) /*判断p1,p2指数地大小*/ix6iFA8xoX{p->coef=p2->coef;p->exp=p2->exp; /*将p2该项地指数与系数赋给p*/p2=p2->next; /移到p2地下一项*/ }else{p->coef=p1->coef;p->exp=p1->exp; /*将p1地该项该项地指数与系数赋给p*/p1=p1->next; /*移到p1地下一项*/ }}}while(p1!=NULL) /*判断p1是否为空*/wt6qbkCyDE {p->next=(polynode*)malloc(sizeof(polynode));p=p->next;p->coef=p1->coef /*将p1该项地指数与系数赋给p,并指向p1地下一项*/ p->exp=p1->exp;p1=p1->next;}while(p2!=NULL) /*判断p2是为空*/{p->next=(polynode*)malloc(sizeof(polynode));p=p->next;p->coef=p2->coef /*将p2该项地指数与系数赋给p,并指向p2地下一项*/p->exp=p2->exp;p2=p2->next;}5.2.4 多项式相减根据以上地思想分析,可以画如下流程图:一元n次多项式地减法运算规则,思想与加法一样,因此我们也应该运用循环链表,并一一比较指数地大小.Kp5zH46zRkNp1->exp>p2->exp N 开始生成新地结点空间p 并将建立地多项式赋给新定义地共用体类型p1,p2P1,p2是否有空地 p1->exp==p2->exp 将该项系数相减,并赋给xX=0?将相减后地系数赋给p 地系数,将指数赋给p 地指数将p1地指数及系数赋给p 地指数和系数将p2地指数及系数取反赋给p 地指数和系数p1=p1->next p2=p2->next ;YYYNYN以上流程图,算法分析以及设计思想,可以写出实现多项式相减地主要语句:while(p1&&p2) /*判断p1,p2是否有空*/{if(p1->exp==p2->exp){x=p1->coef-p2->coef;if(x!=0){p->next=(polynode*)malloc(sizeof(polynode));p=p->next;p->coef=x;p->exp=p1->exp;}p1=p1->next;p2=p2->next;}else{p->next=(polynode*)malloc(sizeof(polynode));p=p->next;if(p1->exp>p2->exp){p->coef=p2->coef;p->exp=-p2->exp;p2=p2->next;}else{p->coef=p1->coef;p->exp=p1->exp;p1=p1->next;}} }while(p1!=NULL) {p->next=(polynode*)malloc(sizeof(polynode)); p=p->next;p->coef=p1->coef; p->exp=p1->exp; p1=p1->next; }while(p2!=NULL) {p->next=(polynode*)malloc(sizeof(polynode)); p=p->next;p->coef=-p2->coef; p->exp=p2->exp; p2=p2->next; }第六章 运行结果分析6.1 输入输出分析输入i 地值为零时,即建立多项式A,现A=342352x x x +++,2324B x x =++ 程序运行后地以下结果:由此可知函数地输入输出是没有问题地,故下面实现多项式地相加减若出现故障值可能是加减本身函数地问题而不是输入输出函数地问题.Yl4HdOAA616.2 运行结果分析根据以上截屏可以看到,多项式地减法地算法程序是正确地,由于加法与减法地思想一致,故编写地算法程序基本一致,而且由算法运行结果可知,加法地程序是正确地.ch4PJx4BlI第七章结束语7.1心得体会与总结(1)进一步掌握了循环链表地作用与基本运算,有关知识,操作以及与顺序表地基本区别和它们在各程序中地优缺点(2)经过这次课程设计,我深刻认识到算法在程序设计中地重要性,一个完整地程序总是由若干个函数构成地,这些相应地函数体现了算法地基本思想.qd3YfhxCzo(3)通过直接对链表地操作,加深了对数据结构地理解和认识.并在完成课程设计地过程作主动查阅了相关资料,学到了不少课本上没有地技术知识.E836L11DO5(4)编写程序中遇到问题再所难免,应耐心探究其中地原因,从出现问题地地方起,并联系前后程序,仔细推敲,逐个排查,直到最终搞清为止.S42ehLvE3M(5)不仅加深了我对书本知识地掌握程度,而且加强了我对思维能力和耐力.不管是程序编写还是实验报告都需要清晰地思维能力和耐心.501nNvZFis第八章源代码#include<stdio.h>#include<stdlib.h>typedef struct pnode{int exp;float coef;struct pnode *next;}polynode;polynode *A,*B,*C,*D;polynode *creatA(){polynode *p1,*r;int i,n;A=(polynode*)malloc(sizeof(polynode));A->next=NULL;r=A;printf("请输入A多项式地项数:");scanf("%d",&n);for(i=1;i<=n;i++){p1=(polynode*)malloc(sizeof(polynode));printf("请输入A地第i项地系数和指数:",i);scanf("%f%d",&p1->coef,&p1->exp);r->next=p1;r=p1;}r->next=NULL;return A;}polynode *creatB(){polynode *p2,*r;int i,n;B=(polynode*)malloc(sizeof(polynode));B->next=NULL;r=B;printf("请输入B多项式地项数:");scanf("%d",&n);for(i=1;i<=n;i++){p2=(polynode*)malloc(sizeof(polynode));printf("请输入B地第i项地系数和指数:",i);scanf("%f%d",&p2->coef,&p2->exp);r->next=p2;r=p2;}r->next=NULL;return B;}void printA(polynode *A){polynode *p1;p1=A->next;while(p1->next!=NULL){if(p1->next->coef>0)printf("%.2fx^%d+",p1->coef,p1->exp);elseprintf("%.2fx^%d",p1->coef,p1->exp);p1=p1->next;}printf("%.2fx^%d",p1->coef,p1->exp);}void printB(polynode *B){polynode *p2;p2=B->next;while(p2->next!=NULL){if(p2->next->coef>0)printf("%.2fx^%d+",p2->coef,p2->exp);elseprintf("%.2fx^%d",p2->coef,p2->exp);p2=p2->next;}printf("%.2fx^%d",p2->coef,p2->exp);}void printC(polynode *C){polynode *p=C->next;while(p->next!=NULL){if(p->next->coef>0)printf("%.2fx^%d+",p->coef,p->exp);elseprintf("%.2fx^%d",p->coef,p->exp);p=p->next;}printf("%.2fx^%d",p->coef,p->exp);}void printD(polynode *D){polynode *p=D->next;while(p->next!=NULL){if(p->next->coef>0)printf("%.2fx^%d+",p->coef,p->exp);elseprintf("%.2fx^%d",p->coef,p->exp);p=p->next;}printf("%.2fx^%d",p->coef,p->exp);}polynode *polyadd(polynode *A,polynode *B){polynode *p1,*p2,*p,*C;float x;p1=A->next;p2=B->next;p=(polynode*)malloc(sizeof(polynode));p->next=NULL;C=p;while(p1&&p2){if(p1->exp==p2->exp){x=p1->coef+p2->coef;if(x!=0){p->next=(polynode*)malloc(sizeof(polynode));p=p->next;p->coef=x;p->exp=p1->exp;}p1=p1->next;p2=p2->next;}else{p->next=(polynode*)malloc(sizeof(polynode));p=p->next;if(p1->exp>p2->exp){p->coef=p2->coef;p->exp=p2->exp;p2=p2->next;}else{p->coef=p1->coef;p->exp=p1->exp;p1=p1->next;}}}while(p1!=NULL){p->next=(polynode*)malloc(sizeof(polynode));p=p->next;p->coef=p1->coef;p->exp=p1->exp;p1=p1->next;}while(p2!=NULL){p->next=(polynode*)malloc(sizeof(polynode));p=p->next;p->coef=p2->coef;p->exp=p2->exp;p2=p2->next;}p->next=NULL;return C;}polynode *polyminus(polynode *A,polynode *B){polynode *p1,*p2,*p,*D;float x;p1=A->next;p2=B->next;p=(polynode*)malloc(sizeof(polynode));p->next=NULL;D=p;while(p1&&p2){if(p1->exp==p2->exp){x=p1->coef-p2->coef;if(x!=0){p->next=(polynode*)malloc(sizeof(polynode));p=p->next;p->coef=x;p->exp=p1->exp;}p1=p1->next;p2=p2->next;}else{p->next=(polynode*)malloc(sizeof(polynode));p=p->next;if(p1->exp>p2->exp){p->coef=p2->coef;p->exp=p2->exp;p2=p2->next;}else{p->coef=p1->coef;p->exp=p1->exp;p1=p1->next;}}}while(p1!=NULL){p->next=(polynode*)malloc(sizeof(polynode));p=p->next;p->coef=p1->coef;p->exp=p1->exp;p1=p1->next;}while(p2!=NULL){p->next=(polynode*)malloc(sizeof(polynode));p=p->next;p->coef=-p2->coef;p->exp=p2->exp;p2=p2->next;}p->next=NULL;return D;}void main(){polynode *p1,*p2,*p;int i;while(i){printf("\t\t0:创建多项式A\n\t\t1:创建多项式B\n\t\t2:多项式A与多项式B相加\n\t\t3:输出多项式A\n\t\t4:输出多项式B\n\t\t5:输出相加后地多项式C\n\t\t6:多项式A与多项式B相减\n\t\t7:输出相减后地多项式D\n");jW1viftGw9scanf("%d",&i);switch(i){case 0:creatA();break;case 1:creatB();break;case 2:p=polyadd(A,B);break;case 3:printA(A);break;case 4:printB(B);break;case 5:printC(p);break;case 6:p=polyminus(A,B);break;case 7:printD(p);break;}printf("\n\t\t0:结束\n\t\t1:继续\n");scanf("%d",&i);}}参考文献:[1]孙家启、万家华、刘运.C语言程序设计[2]唐策善、李小澎、黄刘生.数据结构——用C语言描述版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.xS0DOYWHLP 用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬.LOZMkIqI0wUsers may use the contents or services of this article for personal study, research or appreciation, and othernon-commercial or non-profit purposes, but at the same time, they shall abide by the provisions of copyright law and other relevant laws, and shall not infringe upon the legitimate rights of this website and its relevant obligees. In addition, when any content or service of this article is used for other purposes, written permission and remuneration shall be obtained from the person concerned and the relevant obligee.ZKZUQsUJed转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任.dGY2mcoKtTReproduction or quotation of the content of this article must be reasonable and good-faith citation for the use of news or informative public free information. It shall not misinterpret or modify the original intention of the contentof this article, and shall bear legal liability such as copyright.rCYbSWRLIA。

数据结构利用线性表链式存储实现一元多项式相加减课程方案试验报告

数据结构利用线性表链式存储实现一元多项式相加减课程方案试验报告

数据结构课程设计设计题目:利用线性表链式存储实现一元多项式相加减目录第一章、课题描述1第二章、课题设计目的1第三章、课题设计意义1第四章、设计思路1第五章、需求分析2个人资料整理仅限学习使用第六章、概要设计26.1、存储结构:26.2、基本算法:26.2.1、输入输出26.2.2、构造数据类型36.2.3、多项式的加法46.2.4、多项式的减法4第七章、程序结果及截图4第八章、算法的时间复杂度及改进5第九章、总结及心得体会5第十章、附录6第十^一章、参考文献13个人资料整理仅限学习使用第一章、课题描述能够完成两个或多个多项式的输出,并且实现两个多项式的相加和相减,并且输出结果。

第二章、课题设计目的了解数据结构与算法的设计方法,独立分析和设计一元多项式加减的程序编码,通过程序编写掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能,提高综合运用所学的理论知识和方法独立分析和解决问题的能力,通过这次实践将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理,掌握线性表的链式存储如何实现一元多项式的加减,通过不断探索程序的算法,不断优化程序,使得学生的知识掌握更加牢固,实践能力加强,也激发了学生对于数据结构这门课的兴趣,为以后这门课的深入研究做了准备,这次实践使同学更加深入了解了数据结构内在的逻辑关系。

第三章、课题设计意义通过完成此次课题,可以了解各种数据结构内在的逻辑关系,讨论它在计算机中的存储表示,以及在其上进行各种运算时的算法实现,并对算法的效率和优化进行简单的分析和讨论,不仅加强了学生对于线性表链式存储的理解,也提高了学生的思维能力,促进学生的综合应用能力和专业素质的提高,解决了现实生活中复杂繁琐的计算过程,不仅提高了效率,也增加了正确率,学生对于线性表和指针等知识的理解更加深入深刻,也灵活运用了理论知识解决了实际问题,活学活用,加强了学生的实践能力,同时完成作业还需要与同学的讨论,增强了学生的团队合作能力。

数据结构_基于线性表的链式存储进行一元多项式的相加减_课程设计_实验报告

数据结构_基于线性表的链式存储进行一元多项式的相加减_课程设计_实验报告
3
比较两个节点中的指数项,有下列三种情况: (1) 指针 qa 所指节点的指数值<指针 qb 所指节点的指数值,则应摘取 qa 所指节点的指数值插入到“和多项式”链表中去; (2) 指针 qa 所指节点的指数值>指针 qb 所指节点的指数值,则应摘取 qb 所指节点的指数值插入到“和多项式”链表中去,则将两个节点中的系数 相加; (3) 指针 qa 所指节点的指数值=指针 qb 所指节点的指数值,若和数不等 于零,则修改 qa 所指节点的系数值,同时释放 qb 所指节点;反之,从多 项式 A 的链表中删除相应节点,并释放指针 qa 和 qb 所指节点。
种可能情况进行分析,实现一元多项式的相加、相减操作。
指导教师: 年月日
目录
一 需求分析.........................................................................................................................1 二 目的和意义.....................................................................................................................1 三 问题分析.........................................................................................................................1
一 需求分析
利用线性表的链式存储结构,通过尾插法建立两个单链表,分别存储两个一元多 项式,,建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储 在内存中,然后依次找出系数相同的项来合并同类项,最后完成两个多项式的加减运 算并输出结果。实现本程序需要解决以下几个问题:

数据结构基于线性表链式存储实现一元多项式加减课程研究设计实验报告

数据结构基于线性表链式存储实现一元多项式加减课程研究设计实验报告

数据结构课程设计设计题目:基于线性表链式存储实现一元多项式加减课题名称基于线性表的链式存储实现一元多项式的相加减姓名成绩课题设计目的与设计意义1、课题设计目的:(1).熟练掌握线性表链式存储基本的存储形式:单链表,循环链表以及双链表(2).熟练运用线性表链式存储的基本运算(3).能应用循环链表实现一元多项式的相加减(4).将一元多项式相加减的思想利用C语言编写程序在计算机上实现2、课题设计意义:(1).进一步了解循环链表的特点:无须增加存储量,仅对表的连接方式稍作改变,即可使得表处理更加方面灵活(2).学会将数学语言转化为计算机语言(3).懂得课程设计的格式及要求,有利于以后写毕业论文(4).耐心,细心以及广泛的材料收集的成功的前提指导教师:年月日目录第一章.课程设计的目的与意义41.1课题设计的目的41.2课题设计的意义4第二章.课题设计的内容和要求42.1 课题设计的内容42.2 课题设计的要求4第三章.问题分析43.1问题描述43.2解决途径53.2.1顺序表与链式表的比较53.2.2构造数据类型5第四章.概要设计54.1构造数据类型54.2基本运算64.2.1主函数64.2.2输入输出函数64.2.3多项式的相加减6第五章.详细分析65.1思路分析65.2具体分析75.2.1主函数7根据流程图可写出主函数的主要语句75.2.2输入输出函数85.2.3 多项式相加95.2.4 多项式相减12第六章运行结果分析156.1 输入输出分析156.2 运行结果分析16第七章结束语167.1心得体会与总结16第八章源代码17参考文献:22第一章.课程设计的目的与意义1.1课题设计的目的(1).熟练掌握线性表链式存储基本的存储形式:单链表,循环链表以及双链。

(2).熟练运用线性表链式存储的基本运算。

(3).能应用循环链表实现一元多项式的相加减。

(4).将一元多项式相加减的思想利用C语言编写程序在计算机上实现1.2课题设计的意义(1).进一步了解循环链表的特点:无须增加存储量,仅对表的连接方式稍作改变,即可使得表处理更加方面灵活(2).学会将数学语言转化为计算机语言(3).懂得课程设计的格式及要求,有利于以后写毕业论文(4).耐心,细心以及广泛的材料收集的成功的前提第二章.课题设计的内容和要求2.1 课题设计的内容利用计算机语言实现一元n次多项式的输入输出及其多项式的相加减并正确输出,并且让别人看得一目了然(即编辑程序界面友好化)。

数据结构课程设计报告一元多项式加减乘计算

数据结构课程设计报告一元多项式加减乘计算

《数据结构》课程设计多项式计算班级:学号:姓名:指导老师:多项式计算1、问题描述能够按照指数降序排列建立多项式;能够完成两个多项式的相加、相减和相乘,并将结果输出。

2、设计思路这个程序的关键是多项式的创建和排列,以及相乘时系数相乘和指数相加、相加时相同指数的系数相加、相减时相同指数的系数相减。

由于多项式拥有指数和系数(假设基数已定),所以可以定义一个包含指数系数的结构体,用单链表存储多项式的数据,所以结构体包含next指针。

数据插入时比较两数的指数,按照降序排序,从表头的next开始,直至找到合适的位置,然后开始链表中数值的插入,如果相等则直接将指数相加,如果大于就将新数据插入到当前指向的前面,否则将新数据插入到最后。

输入完数据后选择计算方式(相乘、相加、相减),多项式运算时要循环遍历整个多项式,多项式的每一组数据都要和另一个多项式整组数据相运算(每一个运算值都存储到新建的“多项式”链表中),直到两个多项式都遍历完结束。

3、数据结构设计在模拟多项式对象时,为了简化处理,只取最核心的两个数据:多项式的系数和指数。

前面提到,要用单链表操作,所以要加上个next指针,再由该结构体定义一个结点类型和指针类型。

具体数据结构定义如下:typedef struct node{int xs; /*系数*/int zs; /*指数*/struct node * next; /*next指针*/}Dnode,* Dnodelist;4、功能函数设计(1)链表初始化函数Creat_node()带有头结点的头指针指向空(NULL)。

(2)多项式数据的创建函数Creat_Dmeth()当链表初始化成功后,开始创建多项式。

分别循环输入两个多项式的系数和指数,其中要用到插入函数。

(3)数据的插入函数Insert_node()当创建多项式时,要用到此函数,即利用插入的方式将多项式的数据连接起来。

再输入一组数据后,程序自动调用此函数,插入时也进行着排序,从表头的next开始,一一比较指数大小,直到大于或等于当前指向的数据或遍历完所有数据时停止,然后开始链表中数值的插入,如果相等则直接将指数相加,如果大于就将新数据插入到当前指向的前面,否则将新数据插入到最后。

数据结构-利用链表计算一元多项式-课程设计-实验报告

数据结构-利用链表计算一元多项式-课程设计-实验报告
数据结构课程设计
本课程设计已调试通过,请放心使用。请到:道客巴 巴或豆丁网充值购买 word 版,省多项式-课程设计-实验 报告
设计题目: 利用链表计算一元多项式
1
目录
一:课题设计目的和意义................................................................................................................. 3
//系数为 0 的话释放结点
q1->next=q2->next;
free(q2);
}
}
else{
//指数为新时将结点插入
p->next=q2;
q1->next=p;
}
}
}//Insert
Polyn CreatePolyn(Polyn head,int m){//建立一个头指针为 head、
分析和设计能力; 3.初步掌握软件开发过程的问题分析、系统设计、程序编码、
测试等基本方法和技能 ; 4.提高综合运用所学的理论知识和方法独立分析和解决问题
的能力; 5.加深对常用数据结构的理解,强化学生的逻辑思维能力和动手 能力,巩固良好 的编程习惯,掌握工程软件设计的基本方法,为后续课程的学习 打下坚实基础。 1.2 课题设计意义
一:课题设计目的和意义 1.1 课题设计目的 1.本次课程设计的主要目的是设计一个一元多项式简单计算 器,熟悉掌握一元多项式在链式存储结构上的实现,能够按照指 数降序排列建立并输出多项式;能够完成两个多项式的相加、相
3
减,并将结果输入并体会两种存储结构各自的优缺点和适用性; 2.了解并掌握数据结构与算法的设计方法,具备初步的独立

数据结构课程设计-一元多项式的四则运算

数据结构课程设计-一元多项式的四则运算

一元多项式的四则运算学生姓名:指导老师:摘要本课程设计主要解决一元多项式的运算问题,通过链表的使用,实现对一元多项式的构建、录入、存储、打印、以及之间的运算。

在本课程设计中,程序设计语言为C++语言,程序运行平台为Windows/98/2000/XP,程序采用了链表存储方法以及结构化和模块化的设计方法,通过调试运行,可以进行多项式的加、减、乘运算,勉强实现了设计目标,并且经过适当完善后,将可应用到实际中解决某些问题。

关键词程序设计; C++ ;一元多项式;运算1 引言一般来说,我们只知道数学上的一元多项式的运算,这一般都是用笔来进行运算的,然而此课程设计将一元多项式的运算用电脑来进行,只需要将多项式输入,然后就可以出结果,速度快,省去了认为计算的环节,在现实中带来不少方便。

1.1 课题背景一元多项式的运算,虽然无法直接在除数学外的其他领域作出贡献,但是在数学上,它可以为人们解决一些自己动笔动手很难解决的问题,比如说那些很长很长的多项式,用笔算可能要算半天,但是用该程序,只需短短的几秒钟,所以它给人们带来了不少方便,同时相信它也能间接地为其他领域做出贡献。

1.2 课程设计目的个人觉得,该数据结构课程设计一方面可以让自己更加熟悉那些些常用的数据结构,掌握数据结构内在的逻辑关系,以及它们在计算机中的存储表示,和对它们实行的各种运算;另一方面,可以让自己对于整体和局部,以及结构化和模块化编程有一个更深层次的了解。

作为网络工程的学生,虽然之前有过一次C语言课程设计,但是深知自己编程能力尚为欠缺,所以这一次数据结构课程设计是对我的编程能力和组织能力的又一次考验。

1.3课程设计内容本课程设计是用链表实现一元多项式的存储及运算,其中包括多项式系数及指数的录入(即一元多项式的录入),以及储存、一元多项式的显示、一元多项式之间的加、减、乘法运算。

2 设计思路与方案2.1设计思路该系统使用C++语言进行开发和实现,程序中的各个功能分别由不同的的函数实现,然后在main函数中调用实现。

数据结构课程设计,一元多项式的加法、减法、乘法的实现

数据结构课程设计,一元多项式的加法、减法、乘法的实现

HUNAN CITY UNIVERSITY 数据结构课程设计报告设计题目:一元多项式的加法、减法、乘法的实现专业:计算机科学与技术(嵌入式)学生姓名:班级学号:分组成员:指导教师:陈强老师2012 年 6月 8日1006402《数据结构》课程设计报告一、设计时间2011年6月4日——6月8日二、设计地点湖南城市学院实验楼计算机房407三、设计目的《数据结构》主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论,是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。

该课程的特点是实践性较强,为了学好这门课程,需要在掌握理论知识的同时,加强上机实践。

本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。

具体要求如下:1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2.初步掌握软件开发过程的问题分析、系统设计、程序编码测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

四、设计小组成员五、指导教师:六、设计课题:顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现设有一元多项式Am(x)和Bn(x).Am(x)=A0+A1x1+A2x2+A3x3+…+A m x mBn(x)=B0+B1x1+B2x2+B3x3+…+B n x n请实现求M(x)=Am(x)+Bn(x)、M(x)=Am(x)-Bn(x)和M(x)=Am(x)×Bn(x)。

数据结构利用线性表链式存储实现一元多项式相加减课程方案实验报告

数据结构利用线性表链式存储实现一元多项式相加减课程方案实验报告

数据结构课程设计设计题目:利用线性表链式存储实现一元多项式相加减目录第一章、课题描述1第二章、课题设计目的1第三章、课题设计意义1第四章、设计思路1第五章、需求分析2第六章、概要设计26.1、存储结构:26.2、基本算法:26.2.1、输入输出26.2.2、构造数据类型36.2.3、多项式的加法46.2.4、多项式的减法4第七章、程序结果及截图4第八章、算法的时间复杂度及改进5 第九章、总结及心得体会5第十章、附录6第十一章、参考文献13第一章、课题描述能够完成两个或多个多项式的输出,并且实现两个多项式的相加和相减,并且输出结果。

第二章、课题设计目的了解数据结构与算法的设计方法,独立分析和设计一元多项式加减的程序编码,通过程序编写掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能,提高综合运用所学的理论知识和方法独立分析和解决问题的能力,通过这次实践将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理,掌握线性表的链式存储如何实现一元多项式的加减,通过不断探索程序的算法,不断优化程序,使得学生的知识掌握更加牢固,实践能力加强,也激发了学生对于数据结构这门课的兴趣,为以后这门课的深入研究做了准备,这次实践使同学更加深入了解了数据结构内在的逻辑关系。

第三章、课题设计意义通过完成此次课题,可以了解各种数据结构内在的逻辑关系,讨论它在计算机中的存储表示,以及在其上进行各种运算时的算法实现,并对算法的效率和优化进行简单的分析和讨论,不仅加强了学生对于线性表链式存储的理解,也提高了学生的思维能力,促进学生的综合应用能力和专业素质的提高,解决了现实生活中复杂繁琐的计算过程,不仅提高了效率,也增加了正确率,学生对于线性表和指针等知识的理解更加深入深刻,也灵活运用了理论知识解决了实际问题,活学活用,加强了学生的实践能力,同时完成作业还需要与同学的讨论,增强了学生的团队合作能力。

第四章、设计思路这个程序的关键是多项式的创建和排列,以及相加时相同指数的系数相加。

一元多项式的链表和数组实现

一元多项式的链表和数组实现

一元多项式的链表和数组实现.顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

(限2 人完成)设有一元多项式A m(x)和B n(x).A m(x)=A0+A1x1+A2x2+A3x3+… +A m x mB n(x)=B0+B1x1+B2x2+B3x3+… +B n x n请实现求M(x)= A m(x)+B n(x)、M(x)= A m(x)-B n(x)和M(x)= A m(x)×B n(x)。

要求:1)首先判定多项式是否稀疏2)分别采用顺序和动态存储结构实现;3)结果M(x)中无重复阶项和无零系数项;4)要求输出结果的升幂和降幂两种排列情况############################################# ################################## #####数组、#include#include#define MAX 100int arrange1(int addp[][2],int count){int i,j,a,b=0;for(i=0;i<="">{if(addp[i][0]==0){for(b=i;b<count;b++)< bdsfid="87" p=""></count;b++)<> {addp[b][0] = addp[b+1][0];addp[b][1] = addp[b+1][1];}i--;count--;}}for(i=1;i<="">{for(j=0;j<count-1;j++)< bdsfid="99" p=""></count-1;j++)<> {if(addp[j][1] > addp[j+1][1]){a = addp[j][0];addp[j][0] = addp[j+1][0];addp[j+1][0] = a;a = addp[j][1];addp[j][1] = addp[j+1][1];addp[j+1][1] = a;}}}print(addp,count);}int arrange2(int addp[][2],int count){int i,j,a,b=0;for(i=0;i<="">if(addp[i][0]==0){for(b=i;b<count;b++)< bdsfid="122" p=""></count;b++)<> {addp[b][0] = addp[b+1][0];addp[b][1] = addp[b+1][1];}i--;count--;}}for(i=1;i<="">{for(j=0;j<count-1;j++)< bdsfid="134" p=""></count-1;j++)<>{if(addp[j][1] < addp[j+1][1]){a = addp[j][0];addp[j][0] = addp[j+1][0];addp[j+1][0] = a;a = addp[j][1];addp[j][1] = addp[j+1][1];addp[j+1][1] = a;}}}print(addp,count);}int print(int Am[][2],int m){int i,j;if(m==0){printf("该多项式为Y=0\n");exit(-1);}printf("该多项式为Y=");if(Am[0][1]!=0) //第一项{printf("%dX^%d",Am[0][0],Am[0][1]);}if(Am[0][1]==0)printf("%d",Am[0][0]);if(m == 1) printf("\n");else{for(i=1;i<m;i++)< bdsfid="168" p=""></m;i++)<> {if(Am[i][0]>0) printf("+");if(Am[i][1]!=0){printf("%dX^%d",Am[i][0],Am[i][1]);}if(Am[i][1]==0)printf("%d",Am[i][0]);}printf("\n");}}int main(){int Am[MAX][2],Bn[MAX][2];int xuan,n,m,i,j,biaoji,count1,count2,zhongjian; char sign;biaoji = 1;for(i=0;i < MAX;i++){for(j = 0;j < 2;j++ ){Am[i][j]=0;Bn[i][j]=0;}}printf("1、创建两个一元多项式\n");printf("2、两多项式相加得一新多项式\n");printf("3、两多项式相减得一新多项式\n");printf("4、两多项式相乘得一新多项式\n");printf("5、销毁已建立的两个多项式\n");printf("6、退出\n");printf("\n");while(1){printf("请选择:");scanf("%d",&xuan);switch(xuan){case 1:for(i = 0;i<max;i++)< bdsfid="210" p=""></max;i++)<> {if(Am[i][0] != 0 || Am[i][1] != 0){printf("多项式已经建立,请选择其他操作");biaoji = 2;i = MAX;}}if(biaoji == 2) break;printf("请输入第一个多项式:\n");printf("要输入几项:");scanf("%d",&m);while(m == 0){printf("m 不能为0,请重新输入m:");scanf("%d",&m);}count1 = 1;for(i = 0;i < m;i++){printf("请输入第%d 项的系数和指数:",count1++); scanf("%d%d",&Am[i][0],&Am[i][1]);if(Am[i][0] == 0) {i--;m--;}}biaoji = 3;for(i = 0;i<="">{for(j=i+1;j<m;j++)< bdsfid="240" p=""></m;j++)<> {if(Am[i][1] == Am[j][1]){Am[i][0] = Am[i][0] + Am[j][0];for(zhongjian = j;zhongjian < m;zhongjian++){Am[zhongjian][0]=Am[zhongjian+1][0];Am[zhongjian][1]=Am[zhongjian+1][1];}m--;}}}printf("*************************m=%d",m);print(Am,m);printf("请输入第二个多项式:\n");printf("要输入几项:");scanf("%d",&n);while(n == 0){printf("项数不能为0,请重新输入m:");scanf("%d",&n);}count2 = 1;for(i = 0;i < n;i++){printf("请输入第%d 项的系数和指数:",count2++); scanf("%d%d",&Bn[i][0],&Bn[i][1]);if(Bn[i][0] == 0) {i--;n--;}}biaoji = 3;for(i = 0;i<n;i++)< bdsfid="273" p=""></n;i++)<> {for(j=i+1;j<n;j++)< bdsfid="276" p=""></n;j++)<> {if(Bn[i][1] == Bn[j][1]){Bn[i][0] = Bn[i][0] + Bn[j][0];for(zhongjian = j;zhongjian < n;zhongjian++){Bn[zhongjian][0]=Bn[zhongjian+1][0];Bn[zhongjian][1]=Bn[zhongjian+1][1];}n--;}}}printf("*************************n=%d",n);print(Bn,n);break;case 2:if(biaoji == 1){printf("请先创建两个一元多项式!\n");break;}int addp[MAX][2];for(i=0;i<m;i++)< bdsfid="301" p=""></m;i++)<>{addp[i][0] = Am[i][0];addp[i][1] = Am[i][1];}for(i,j=0;i<m+n;i++)< bdsfid="307" p=""></m+n;i++)<> {addp[i][0] = Bn[j][0];addp[i][1] = Bn[j][1];j++;}count1 = m+n;for(i = 0;i<="">{for(j=i+1;j<count1;j++)< bdsfid="318" p=""></count1;j++)<>{if(addp[i][1] == addp[j][1]){addp[i][0] = addp[i][0] + addp[j][0];for(zhongjian = j;zhongjian < count1;zhongjian++){addp[zhongjian][0]=addp[zhongjian+1][0];addp[zhongjian][1]=addp[zhongjian+1][1];}count1--;}}}printf("升序1 , 降序2\n");printf("选择:");scanf("%d",&j);if(j == 1) arrange1(addp,count1);else arrange2(addp,count1);break;case 3:if(biaoji == 1){printf("请先创建两个一元多项式!\n");break;}int subp[MAX][2];for(i=0;i<m;i++)< bdsfid="346" p=""></m;i++)<>{subp[i][0] = Am[i][0];subp[i][1] = Am[i][1];}for(i,j=0;i<m+n;i++)< bdsfid="352" p=""></m+n;i++)<>{subp[i][0] = -Bn[j][0];subp[i][1] = Bn[j][1];j++;}count1 = m+n;for(i = 0;i<="">{for(j=i+1;j<count1;j++)< bdsfid="363" p=""></count1;j++)<>{if(subp[i][1] == subp[j][1]){subp[i][0] = subp[i][0] + subp[j][0];for(zhongjian = j;zhongjian < count1;zhongjian++){subp[zhongjian][0]=subp[zhongjian+1][0];subp[zhongjian][1]=subp[zhongjian+1][1];}count1--;}}}printf("升序1 , 降序2\n");printf("选择:");scanf("%d",&j);if(j == 1) arrange1(subp,count1);else arrange2(subp,count1);break;if(biaoji == 1){printf("请先创建两个一元多项式!\n");break;}int multp[MAX][2];count1 = 0;for(i=0;i<m;i++)< bdsfid="391" p=""></m;i++)<>{for(j=0;j<n;j++)< bdsfid="394" p=""></n;j++)<>{multp[count1][0] = Am[i][0] * Bn[j][0];multp[count1][1] = Am[i][1] + Bn[j][1];count1++;}}for(i = 0;i<="">{for(j=i+1;j<count1;j++)< bdsfid="405" p=""></count1;j++)<>{if(multp[i][1] == multp[j][1]){multp[i][0] = multp[i][0] + multp[j][0];for(zhongjian = j;zhongjian < count1;zhongjian++){multp[zhongjian][0]=multp[zhongjian+1][0]; multp[zhongjian][1]=multp[zhongjian+1][1]; }count1--;}}}printf("升序1 , 降序2\n");printf("选择:");scanf("%d",&j);if(j == 1) arrange1(multp,count1);else arrange2(multp,count1);break;case 5:if(biaoji == 1){printf("请先创建两个一元多项式!\n"); break;biaoji = 1;for(i=0;i < MAX;i++){for(j = 0;j < 2;j++ ){Am[i][j]=0;Bn[i][j]=0;}}break;case 6:exit(-1);}}}############################################# ################################################################################## ############################### ####链表#include#includetypedef struct //数据项{float coef; //系数int expn; //指数} term;typedef struct LNode //结点{term data; //term 多项式值struct LNode *next;}LNode,*LinkList;typedef LinkList polynomail;int cmp(term a,term b) //比较指数{if(a.expn>b.expn) return 1;if(a.expn==b.expn) return 0;if(a.expn<="" bdsfid="466" p="" return="">else return 0;}int arrange1(polynomail pa) //升序排列{polynomail h=pa,p,q,r;if(pa==NULL) return 0;for(p=pa; p->next!=NULL; p=p->next);r=p;while(h->next!=r) //大的沉底{for(p=h; p->next!=r&&p!=r; p=p->next){if(cmp(p->next->data,p->next->next->data)==1) {q=p->next->next;p->next->next=q->next;q->next=p->next;p->next=q;}}r=p;//r 指向参与比较的最后一个,不断向前移动}}int arrange2(polynomail pa) //降序排列{polynomail h=pa,p,q,r;if(pa==NULL) return 0;for(p=pa; p->next!=NULL; p=p->next);r=p;while(h->next!=r) //小的沉底{for(p=h; p->next!=r&&p!=r; p=p->next){if(cmp(p->next->next->data,p->next->data)==1) {q=p->next->next;p->next->next=q->next;q->next=p->next;p->next=q;}}r=p;//r 指向参与比较的最后一个,不断向前移动} }polynomail copypolyn(polynomail pa){polynomail r,p,zhi,q;p = (LNode *)malloc(sizeof(LNode));r = (LNode *)malloc(sizeof(LNode));q = (LNode *)malloc(sizeof(LNode));q = p;for(r = pa->next;r != NULL;r = r->next){zhi = (LNode *)malloc(sizeof(LNode));zhi->data.coef = r->data.coef;zhi->data.expn = r->data.expn;q->next = zhi;q = zhi;}q->next = NULL;return p;}int printpolyn(polynomail P) //打印多项式{polynomail q;q = (LNode *)malloc(sizeof(LNode));if(P == NULL) printf("无项!\n");else if(P->next == NULL) printf("Y=0\n");else{printf("该多项式为Y=");q=P->next; //打印第一项if(q->data.coef!=0&&q->data.expn!=0){printf("%.2fX^%d",q->data.coef,q->data.expn); }if(q->data.expn==0&&q->data.coef!=0) printf("%.2f",q->data.coef);q=q->next;if(q==NULL){printf("\n");}else{while(1)//while 中,打印剩下项中系数非零的项,{if(q->data.coef!=0&&q->data.expn!=0){if(q->data.coef>0) printf("+");printf("%.2fX^%d",q->data.coef,q->data.expn); }if(q->data.expn == 0&&q->data.coef != 0) {if(q->data.coef>0)printf("+");printf("%.2f",q->data.coef);}q=q->next;if(q == NULL){printf("\n");break;}}}return 0;}}polynomail creatpolyn(polynomail P,int m) //1、创建并初始化多项式链表{polynomail r,q,p,s,Q;int i;P=(LNode*)malloc(sizeof(LNode));r=P;for(i=0; i<="" p="">{s=(LNode*)malloc(sizeof(LNode));printf("请输入第%d 项的系数和指数:",i+1);scanf("%f%d",&s->data.coef,&s->data.expn);r->next=s;r=s;}r->next=NULL;for(q=P->next;q != NULL ; q=q->next) //合并同类项for(p=q->next,r=q; p!=NULL;p=p->next){if(q->data.expn==p->data.expn){q->data.coef=q->data.coef+p->data.coef;r->next=p->next;Q=p;free(Q);}else{r=r->next;}}return P;}polynomail addpolyn(polynomail pa,polynomail pb) //2、两多项式相加{polynomail newp,q,p,r,Q,Pa,Pb;Pa = copypolyn(pa);Pb = copypolyn(pb);int j;p=Pa->next;q=Pb->next;newp=(LNode*)malloc(sizeof(LNode));r=newp;if(p && q){for(p;p->next != NULL;p = p->next);p->next = q;newp->next = Pa->next;}else if(p){newp->next = p;}else if(q){newp->next = q;}for(q=newp->next;q != NULL ; q=q->next) //合并同类项{r = q;for(p=q->next; p!=NULL;p=p->next){if(q->data.expn==p->data.expn){q->data.coef=q->data.coef+p->data.coef;r->next=p->next;Q=p;free(Q);}else{r=r->next;}}}printf("升序1 , 降序2\n");printf("选择:");scanf("%d",&j);if(j == 1) arrange1(newp);else arrange2(newp);return newp;}polynomail subpolyn(polynomail pa,polynomail pb) //3、两多项式相减{polynomail newp,q,p,r,Q,Pa,Pb;int j;Pa = copypolyn(pa);Pb = copypolyn(pb);p=Pa->next;q=Pb->next;newp=(LNode*)malloc(sizeof(LNode));r=newp;while(q != NULL){q->data.coef = q->data.coef * (-1);q = q->next;}q = Pb->next;if(p && q){for(p;p->next != NULL;p = p->next);p->next = q;newp->next = Pa->next;}else if(p){newp->next = p;}else if(q){newp->next = q;}for(q=newp->next;q != NULL ; q=q->next) //合并同类项for(p=q->next,r=q; p!=NULL;p=p->next){if(q->data.expn==p->data.expn){q->data.coef=q->data.coef+p->data.coef;r->next=p->next;Q=p;free(Q);}else{r=r->next;}}printf("升序1 , 降序2\n");printf("选择:");scanf("%d",&j);if(j==1) arrange1(newp);else arrange2(newp);return newp;}polynomail mulpolyn(polynomail pa,polynomail pb) //4、两多项式相乘{polynomail s,newp,q,p,r;int i=20,j;newp=(LNode*)malloc(sizeof(LNode));r=newp;for(p=pa->next; p!=NULL; p=p->next)for(q=pb->next; q!=NULL; q=q->next){s=(LNode*)malloc(sizeof(LNode));s->data.coef=p->data.coef*q->data.coef;s->data.expn=p->data.expn+q->data.expn;r->next=s;r=s;}r->next=NULL;printf("升序1 , 降序2\n");printf("选择:");scanf("%d",&j);if(j == 1) arrange1(newp);else arrange2(newp);for(q=newp->next;q->next!=NULL;q=q->next) //合并同类项for(p=q; p!=NULL&&p->next!=NULL; p=p->next)if(q->data.expn==p->next->data.expn){q->data.coef=q->data.coef+p->next->data.coef;r=p->next;p->next=p->next->next;free(r);}return newp;}void delpolyn(polynomail pa,polynomail pb) //销毁多项式{ polynomail p,q;p=pa;while(p!=NULL){q=p;p=p->next;free(q);}p=pb;while(p!=NULL){q=p;p=p->next;free(q);}printf("两个多项式已经销毁\n");}int main(){polynomail pa=NULL,pb=NULL;polynomail p,q;polynomail addp=NULL,subp=NULL,mulp=NULL; int n,m;printf("1、创建两个一元多项式\n");printf("2、两多项式相加得一新多项式\n");printf("3、两多项式相减得一新多项式\n");printf("4、两多项式相乘得一新多项式\n");printf("5、销毁已建立的两个多项式\n");printf("6、退出\n");printf("\n");while(1){printf("请选择:");scanf("%d",&n);switch(n){case 1:{printf("已建立两个一元多项式,请选择其他操作!"); break;}printf("请输入第一个多项式:\n");printf("要输入几项:");scanf("%d",&m);while(m==0){printf("m 不能为0,请重新输入m:");scanf("%d",&m);}pa=creatpolyn(pa,m);printpolyn(pa);printf("请输入第二个多项式:\n");printf("要输入几项:");scanf("%d",&m);pb=creatpolyn(pb,m);printpolyn(pb);break;case 2:if(pa == NULL){printf("请先创建两个一元多项式!\n");break;}getchar();addp=addpolyn(pa,pb); printpolyn(addp);break;case 3:if(pa == NULL){printf("请先创建两个一元多项式!\n"); break;}subp=subpolyn(pa,pb); printpolyn(subp);break;case 4:if(pa==NULL){printf("请先创建两个一元多项式!\n"); }mulp=mulpolyn(pa,pb); printpolyn(mulp);break;case 5:if(pa==NULL){printf("请先创建两个一元多项式!\n"); break;}delpolyn(pa,pb);pa=pb=NULL;break;case 6:if(addp!=NULL) {p=addp; while(p!=NULL) {q=p;p=p->next; free(q);}}if(subp!=NULL) {p=subp;while(p!=NULL) {q=p;p=p->next; free(q);}}exit(-2);}//switch}//while}。

数据结构课程设计报告顺序结构动态链表结构下的一元多项式的加法减法乘法的实现Word

数据结构课程设计报告顺序结构动态链表结构下的一元多项式的加法减法乘法的实现Word

山东理工大学计算机学院课程设计(数据结构)班级姓名学号指导教师二○一二年一月十日课程设计任务书及成绩评定课题名称顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

Ⅰ、题目的目的和要求:1. 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2.设计题目要求:1)首先判定多项式是否稀疏2)分别采用顺序和动态存储结构实现;3)结果M(x)中无重复阶项和无零系数项;4)要求输出结果的升幂和降幂两种排列情况;Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一二年一月十日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计 (3)第四章详细设计 (4)第五章运行与测试 (17)第六章总结与心得 (19)参考文献 (20)第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。

数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。

同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

山东理工大学计算机学院课程设计(数据结构)级班名姓号学指导教师二○一二年一月十日课程设计任务书及成绩评定顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的课题名称实现。

Ⅰ、题目的目的和要求:1. 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2.设计题目要求:1)首先判定多项式是否稀疏2)分别采用顺序和动态存储结构实现;结果M(x)3)中无重复阶项和无零系数项;要求输出结果的升幂和降幂两种排列情况; 4)Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)(签字)指导老师:日十月一年二○一二目录第一章概述 (1)第二章系统分析 (2)第三章概要设计 (3)第四章详细设计 (4)第五章运行与测试 (17)第六章总结与心得 (19)20参考文献……………………………………………………………….第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。

数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。

同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

在这次的课程设计中我选择的题目是顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

分别采用顺序结构和链式存储结构,利用多项得结果,最后得多项式中不含有重复阶项和零系数得项。

除此之外,还得分为降幂和升幂两种排序方式。

1第二章系统分析1.顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

可以分为几个模块:输入模块、输出模块(升幂降幂)、数据处理模块(多项式的加减乘)、主程序模块。

2.在程序过程中加入汉字提示符,让使用者清楚明白的操作该程序。

运行程序时看起来简洁有序,操作简单明了。

3.程序执行时的命令:①选择创建两个一元多项式②输入第一个一元多项式的项数③依次输入一元多项式的系数和指数④以相同方式输入第二个一元多项式⑤选择操作方式⑥选择降幂或升幂排序⑦输出结果⑧是否退出。

4. 测试数据。

输入的一元多项式系数指数分别为7 0,3 1,9 8,5 17和8 1,22 7,-9 8。

加法结果为;升幂降幂减法结果为:升幂降幂乘法结果为:升幂降幂2第三章概要设计1、数据结构的设计在该程序中分别分为顺序存储和链式存储结构。

2、算法的设计本程序主要分为四大模块①主程序模块②输入模块:通过main函数输入③输出模块(升幂降幂):PrintPolyn函数实现输出④数据处理模块(多项式的加减乘):通过一元多项式的Polynomial基本操作实现3、抽象数据类型的设计一元多项式抽象数据类型的定义:抽象数据类型Polynomial的定义:3第四章详细设计#include<iostream>using namespace std;struct term//顺序表和链表的的定义{float xishu; //系数int zhishu; //指数};struct LNode{term data; //term多项式值struct LNode *next;};typedef LNode* polynomail;*//*合并同类项polynomail hebing(polynomail Head){polynomail r,q,p,Q;for(q=Head->next;q!=NULL;q=q->next)//合并同类项for(p=q->next,r=q;p!=NULL;)if(q->data.zhishu==p->data.zhishu)//指数相等系数相加{q->data.xishu=q->data.xishu+p->data.xishu;r->next=p->next;Q=p;p=p->next;p释放delete Q;//}else{r=r->next;4p=p->next;}return Head;//得到不含同类项的多项式}/*又小到大排列*/void arrange1(polynomail pa){polynomail h=pa,p,q,r;for(p=pa;p->next!=NULL;p=p->next);r=p;//r指向参与比较的最后一个while(h->next!=r)// 大的沉底{for(p=h;p->next!=r&&p!=r;p=p->next)if(p->next->data.zhishu>p->next->next->data.zhishu)// 比较指数的大小 {q=p->next->next;p->next->next=q->next;//指数大的向前移动q->next=p->next;p->next=q;}指向参与比较的最后一个,不断向前移动r=p;//r}}*//*由大到小排序void arrange2(polynomail pa){polynomail h=pa,p,q,r;for(p=pa;p->next!=NULL;p=p->next); r=p;while(h->next!=r)//小的沉底{5for(p=h;p->next!=r&&p!=r;p=p->next)if(p->next->data.zhishu<p->next->next->data.zhishu)//指数比较大小{q=p->next->next;p->next->next=q->next;//指数小的向后移动q->next=p->next;p->next=q;}r=p;//r指向参与比较的最后一个,不断向前移动}}/*判断多项式的稀疏 */bool judge(polynomail Head)//逻辑变量字符bool{arrange2(Head);polynomail p;p=Head->next;bool xi=false;while(p!=NULL&&p->next!=NULL&&!xi){if(p->data.zhishu-p->next->data.zhishu>1)xi=true;p=p->next;}return xi;}*/ 求项数,打印多项式/*void printpolyn(polynomail P){int i;6polynomail q;if(P==NULL)潣瑵? 无项<<endl;else if(P->next==NULL)cout<<Y=0<<endl;else{潣瑵? 该多项式为Y=;q=P->next;i=1;if(q->data.xishu!=0&&q->data.zhishu!=0){cout<<q->data.xishu<<X^<<q->data.zhishu;i++;}if(q->data.zhishu==0&&q->data.xishu!=0)打印第一项 cout<<q->data.xishu;//q=q->next;if(q==NULL){cout<<endl;return ;}while(1)//while中,打印剩下项中系数非零的项,{if(q->data.xishu!=0&&q->data.zhishu!=0){if(q->data.xishu>0)cout<<+;cout<<q->data.xishu<<X^<<q->data.zhishu;7i++;}if(q->data.zhishu==0&&q->data.xishu!=0){if(q->data.xishu>0) cout<<+;cout<<q->data.xishu;}q=q->next;if(q==NULL){cout<<endl;break;}}}}/*1、创建并初始化多项式链表*/ polynomail creatpolyn(int m){polynomail Head,r,s;int i;Head=new LNode;r=Head;for(i=0;i<m;i++){s=new LNode;潣瑵?请输入第?椼??项的系数和指数: ; cin>>s->data.xishu>>s->data.zhishu; r->next=s; r=s;}8r->next=NULL;if(m>1){Head=hebing(Head);}return Head;}/*2、两多项式相加*/polynomail addpolyn(polynomail pa,polynomail pb){polynomail s,newHead,q,p,r;int j;p=pa->next;q=pb->next;newHead=new LNode;r=newHead;while(p){s=new LNode;s->data.xishu=p->data.xishu;s->data.zhishu=p->data.zhishu;r->next=s; r=s;p=p->next;}while(q){s=new LNode;s->data.xishu=q->data.xishu;s->data.zhishu=q->data.zhishu;r->next=s; r=s;q=q->next;9}r->next=NULL;if(newHead->next!=NULL&&newHead->next->next!=NULL)//合并同类项 newHead=hebing(newHead);潣瑵?升序 1 , 降序 2<<endl;潣瑵? 选择:;cin>>j;if(j==1)arrange1(newHead);elsearrange2(newHead);return newHead;}/*3、两多项式相减*/polynomail subpolyn(polynomail pa,polynomail pb){polynomail s,newHead,q,p,r; int j;p=pa->next;q=pb->next;newHead=new LNode;r=newHead;while(p){s=new LNode;s->data.xishu=p->data.xishu;s->data.zhishu=p->data.zhishu;r->next=s; r=s;p=p->next;}while(q)10{s=new LNode;s->data.xishu=-q->data.xishu;s->data.zhishu=q->data.zhishu;r->next=s; r=s;q=q->next;}r->next=NULL;if(newHead->next!=NULL&&newHead->next->next!=NULL)//合并同类项 newHead=hebing(newHead);潣瑵?升序 1 , 降序 2<<endl;潣瑵?选择:;cin>>j;if(j==1)arrange1(newHead);elsearrange2(newHead);return newHead;}*//*4两多项式相乘polynomail mulpolyn(polynomail pa,polynomail pb) {polynomail s,newHead,q,p,r;int j;newHead=new LNode;r=newHead;for(p=pa->next;p!=NULL;p=p->next)for(q=pb->next;q!=NULL;q=q->next){s=new LNode;11s->data.xishu=p->data.xishu*q->data.xishu;s->data.zhishu=p->data.zhishu+q->data.zhishu;r->next=s;r=s;}r->next=NULL;潣瑵?升序 1 , 降序 2<<endl;潣瑵?选择 :;cin>>j;if(j==1) arrange1(newHead);else arrange2(newHead);if(newHead->next!=NULL&&newHead->next->next!=NULL)//合并同类项newHead=hebing(newHead);return newHead;}/*5、销毁已建立的两个多项式*/void delpolyn(polynomail pa,polynomail pb){polynomail p,q;p=pa;while(p!=NULL)q=p;p=p->next;free(q);}p=pb;while(p!=NULL){q=p;12p=p->next;free(q);}潣瑵?两个多项式已经销毁 <<endl;}void main(){polynomail pa=NULL,pb=NULL;polynomail addp=NULL,subp=NULL,mulp=NULL;int n,m;while(1){cout<<、创建两个一元多项式<<endl;cout<< 、两多项式相加得一新多项式<<endl;cout<< 、两多项式相减得一新多项式 <<endl; cout<<、两多项式相乘得一新多项式 <<endl;cout<<_x0005_ 、销毁已建立的两个多项式 <<endl;cout<< 、退出<<endl;潣瑵?请选择: ;cin>>n;switch(n){case 1:if(pa!=NULL){潣瑵?已建立两个一元多项式,请选择其他操作! ;break;}:<<endl; 潣瑵? 请输入第一个多项式;潣瑵? 要输入几项:13cin>>m;while(m==0){cout<<m 不能为 0,请重新输入m:;cin>>m;}pa=creatpolyn(m);printpolyn(pa);if(judge(pa))<<endl; 潣瑵?该多项式稀疏else潣瑵? 该多项式稠密 <<endl;潣瑵? 请输入第二个多项式 :<<endl;潣瑵? 要输入几项:<<endl;cin>>m;pb=creatpolyn(m);printpolyn(pb);if(judge(pb))潣瑵? 该多项式稀疏 <<endl;else潣瑵? 该多项式稠密 <<endl;break;case 2:if(pa==NULL){潣瑵?请先创建两个一元多项式! <<endl;break;}多项式相加 addp=addpolyn(pa,pb);//printpolyn(addp);14break;case 3:if(pa==NULL){潣瑵?请先创建两个一元多项式 !<<endl;break;}多项式相减 subp=subpolyn(pa,pb);// 打印输出printpolyn(subp);//break;case 4:if(pa==NULL){潣瑵? 请先创建两个一元多项式 !<<endl;break;}多项式相乘 mulp=mulpolyn(pa,pb);//打印输出printpolyn(mulp);//break;case 5:if(pa==NULL){潣瑵?请先创建两个一元多项式 <<endl;break;}多项式的删除delpolyn(pa,pb);//pa=pb=NULL; break;case 6:delpolyn(pa,pb);15exit(0);}}}16第五章运行与测试程序开始界面分别输入两个多项177+3x+9x^8+5x^17第一项:2x^4+4x^3+5x^6第二项:18第六章总结与心得通过这次的课程设计,让我深有感触。

相关文档
最新文档