数据结构实验报告-一元多项式

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

数据结构课程设计报告

课题: 一元多项式

姓名:XX

学号:************

专业班级:XXXX

指导教师:XXXX

设计时间:2015年12月30日星期三

评阅意见:

评定成绩:

指导老师签名:

年月日

目录

一、任务目标 (3)

二、概要设计 (4)

三、详细设计 (6)

四、调试分析 (8)

五、源程序代码 (8)

六、程序运行效果图与说明 (15)

七、本次实验小结 (16)

八、参考文献 (16)

一丶任务目标

分析 (1) a.能够按照指数降序排列建立并输出多项式

b.能够完成两个多项式的相加,相减,并将结果输入

要求:程序所能达到的功能:

a.实现一元多项式的输入;

b.实现一元多项式的输出;

c.计算两个一元多项式的和并输出结果;

d.计算两个一元多项式的差并输出结果;

除任务要求外新增乘法:

计算两个一元多项式的乘积并输出结果

(2)输入的形式和输入值的范围:

输入要求:分行输入,每行输入一项,先输入多项式的指数,再输入多项式的系数,以0 0为结束标志,结束一个多项式的输入。

输入形式:

2 3

-1 2

3 0

1 2

0 0

输入值的范围:系数为int型,指数为float型

(3)输出的形式:

第一行输出多项式1;

第二行输出多项式2;

第三行输出多项式1与多项式2相加的结果多项式;

第四行输出多项式1与多项式2相减的结果多项式;

第五行输出多项式1与多项式2相乘的结果多项式

二、概要设计

程序实现

a. 功能:将要进行运算的二项式输入输出;

b. 数据流入:要输入的二项式的系数与指数;

c. 数据流出:合并同类项后的二项式;

d. 程序流程图:二项式输入流程图;

e. 测试要点:输入的二项式是否正确,若输入错误则重新输入。

流程图:

三、详细设计

(1):存储结构

一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。

(2):数据链表

由于采用链表的方法,我们可以建立3条链;一条用于存放多项式HA,一条用于存放多项式HB,还有一条用于存放新形成的HC。此外,我们的程序应具备以下几个功能:建立链表,撤销链表,打印链表,按要求插入一个新的结点,复制链表;为了使上面程序结构分析进一步细化,为了使程序结构更加清晰,我们可以把上面的内容都编写成函数形式。

1、建立链表

该程序建立链表的函数与大多数建立链表的操作基本一致,但是由于实体是一元多项式的关系。我们更希望,在处理客户输入的数据的同时,能对数据进行适当的处理。也就是数学上所说的,“对一元多项式进行化简,并按照降幂排序。”由于在前面的练习中,我们得知,在链表中插入一个结点的函数,具有对链表的成员进行排序与合并的功能。如此一来,我们可以巧妙地处理,在建立链表的同时,调用”在链表中插入一个结点的函数”,对新建立的链表进行化简。

该函数的算法描述如下;

声明指针变量,并作为头指针的指针变量赋初值NULL;

创建一个新的结点,并输入链表的信息;

若输入的系数值与函数值同不为0时,调用”在链表中插入一个结点的insert函数”,将结点插入链表中;(注:这里建立链表的函数与以往的不同,我们是通过假想有一条空链,不断地调用insert函数来实现建立链表的功能。简言之;链表中成员的链接全都靠insert函数来实现,而该函数仅仅是不断地提供建立链表所要的数据罢了。)

若还要继续插入结点,转到步骤2继续进行;

否则,程序结束,把头指针返回主程序。

2、撤销链表

撤销链表是为了把链表所占用的地址回收起来,防止造成浪费。我们该程序可以采用从链表的始端逐步销去结点。在这个过程中,我们需要链表的头地址作为形式参数,还需要建立一个指针用来指向新头地址。

该函数的算法描述如下:

指针变量;并把头地址指针赋给新指针变量;

把头地址指针指向下一个结点;

删除新指针变量;

若还要继续删除结点,转到步骤1继续执行;

否则,结束程序。

3、按要求插入一个新的结点

由于前面的建立链表的creat函数,调用了该函数,所以我们这个函数的设计思想也明朗多了,由于建立的链表是有序的,并且需要合并指数相同的结点,所以要新结点需要按指数值降幂的顺序插入链表中。判断链表是否为空,如果为空则直接插入即可;否则按照要插入结点指数值的大小在链表中寻找他要插入的位置,对于插入位置有第一个节点、最后一个结点和链表中间这三种情况分别进行处理。

函数的形式参数:链表的头地址,指向要插入结点的指针;

返回结果:插入结点后新链表的头地址。

该函数的算法描述如下:

声明指针变量并令它指向连头结点;

判断指向要插入结点的指针是否为空;

如果是,则不需要插入新结点,直接返回头地址,程序结束;

否则再判断链表是否为空;

如果是,则直接插入结点,然后返回链表的头地址,程序结束;

否则,在链表中寻找待插入结点的插入位置:

1,若链表中存在着与“插入的结点”的指数相同的情况,我们依然插入链中,只是把该结点的系数修改为”0”,把链中的结点系数修改为”两系数之

相关文档
最新文档