数据结构一元多项式的计算

上传人:pu****.1 文档编号:508880140 上传时间:2023-12-24 格式:DOC 页数:12 大小:303KB
返回 下载 相关 举报
数据结构一元多项式的计算_第1页
第1页 / 共12页
数据结构一元多项式的计算_第2页
第2页 / 共12页
数据结构一元多项式的计算_第3页
第3页 / 共12页
数据结构一元多项式的计算_第4页
第4页 / 共12页
数据结构一元多项式的计算_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《数据结构一元多项式的计算》由会员分享,可在线阅读,更多相关《数据结构一元多项式的计算(12页珍藏版)》请在金锄头文库上搜索。

1、项目一 一元多项式的计算问题1.1设计题目与要求设计题目1)一元多项式计算任务:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输入;基本要求:在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法; 本程序关键点是如何将输入的两个多项式相加、相减操作。 如何将输入的一元多项式按指数的降序排列 如何确定要输入的多项式的项数; 如何将输入的两个一元多项式显示出来。 如何将输入的两个一元多项式进行相加操作。 如何将输入的两个一元多项式进行相减操作。 本程序是通过链表实现一元多

2、项式的相加减操作。、任务定义此程序需要完成如下的要求:将多项式按照指数降序排列建立并输出,将两个一元多项式进行相加、相减操作,并将结果输入。a:输入多项式的项数并建立多项式;b:输出多项式,输出形式分别为浮点和整数序列,序列按指数升序排列;c:多项式a和b相加,建立多项式 a+b;d:多项式a和b相减,建立多项式 a-b。e:多项式的输出。1.2数据结构的选择和概要设计:数据结构的选用A:基于链表中的节点可以动态生成的特点,以及链表可以灵活的添加或删除节点的数据结 构,为了实现任意多项式的加法,减法,因此选择单链表的结构体,它有一个系数,指数, 下一个指针3个元属;例如,图1中的两个线性链表分

3、别表示一元多项式 k:沁总饯曲;矢沙和一元多项式 :。从图中可见,每个结点表示多项式中的一项。图i多项式表的单链存储结构B:本设计使用了以下数据结构:typedef struct no deint xs;/*系数 */int zs;/* 指数 */struct node * n ext;/*n ext指针 */ Dn ode,* Dn odelist;C:设计本程序需用到八个模块,用到以下八个子函数如下:链表初始化*/插入函数*/ 创建多项式*/ 多项式相加*/ 多项式相减*/ 选择函数*/ 显示(输出)函数*/1. Dn odelist Creat_ no de(void)/*2.i nt

4、In sert_ no de(D no delist D,i nt xs,i nt zs)/*3. D nodelist Creat_Dmeth( int len gth)/*4. Dnodelist Addresult(Dnodelist D1,Dnodelist D2) /*5. Dnodelist Subresult(Dnodelist D1,Dnodelist D2) /*6. D nodelist select(D nodelist D1,D no delist D2) /*7void Show(D nodelist D)/*8void mai n()主程序模块调用链一元多项式的各种

5、基本操作模块。多项式的输入先输入多项式的项数,采用尾插法的方式, 输入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头节点指向它;两个多项式的加法“和多项式”链表中的结点无需另生成,而应该从两个多项式的链表中摘取。其运算规则如下:假设指针A和B分别指向多项式a和多项式b中当前进行比较的某个结点, 则比较两个结点 中的指数项,有下列 3种情况: 指针A所指结点的指数值 指针B所指结点的指数值,则应摘取A指针所指结点插入到“和 多项式”链表中去; 指针A所指结点的指数值 指针B所指结点的指数值,则应摘取指针A所指结点插入到“和 多项式”链表中去; 指针A所指结点的指数值=指

6、针B所指结点的指数值,则将两个结点中的系数相加,若和数不为零,则修改A所指结点的系数值,同时释放B所指结点;反之,从多项式A的链 表中删除相应结点,并释放指针A和B所指结点。例如,由图2中的两个链表表示的多项式 相加得到的“和多项式”链表如图2所示,图中的长方框表示已被释放的结点。图2相加得到的和多项式上述多项式的相加过程归并两个有序表的过程极其类似,不同之处仅在于,后者在比较数据元素时只出现两种情况。因此,多项式相加的过程也完全可以利用线性链表的基本操作来完成。流程图(1)在主函数中调用函数进行多项式的输入、输出,运用选择语句来选择加法、减法进行 操作,流程图如图 3:开始依次输入 n个非零

7、/输出相减结 /结束图3 主函数流程图1.3 系统设计功能算法描述与数据结构说明该多项式程序除了 main() 函数外,主要有以下函数:void Insert(Polyn p,Polyn h)Polyn CreatePolyn(Polyn head,int m)void DestroyPolyn(Polyn p)void PrintPolyn(Polyn P)int compare(Polyn a,Polyn b)Polyn AddPolyn(Polyn pa,Polyn pb)Polyn SubtractPolyn(Polyn pa,Polyn pb)Polyn MultiplyPolyn(

8、Polyn pa,Polyn pb)系统主要功能函数的详细设计1. main ()函数main 函数用来实现提示使用者输入、显示功能列表、调用其他运算函数实现运算功能。在main ()函数中,定义 m n用来保存两个多项式的项数,pa、pb、pc、pd、pf定义程序所需链表的头指针。 在程序开始要求输入两个多项式的项数, 随后根据项数创建两个链表以 保存多项式,再显示出功能列表后通过 if 语句来实现功能的选择,从而对整个程序流程进 行控制。2. Polyn CreatePolyn(Polyn head,int m)该函数功能是创建新的多项式链表。int m保存的多项式的项数,使用for语句,

9、控制输入多项式的每一项。当创建的链表长度为 m时,将不再提示用户继续输入多项式的系数和指数。 在该函数中要用到分配空间的函数 malloc() 为新建链表分配空间。3. void DestroyPolyn(Polyn p) 该函数的功能是销毁掉创建的两个链表,释放内存。以辅助退出程序。4. void Insert(Polyn p,Polyn h)该函数功能:将新的节点p插入到现有链表的后面,并确保多项式的指数exp是升序。将s节点插入到 head 所指向的链表。在该函数的操作中,要注意指针是如何移动的。5. Polyn AddPolyn(Polyn pa,Polyn pb)该函数功能:实现两个

10、多项式pa、pb 相加,并将计算结果存储于新建立的pc 中,它的原理是将指数相同的单项式相加,系数相加后为0,则pa、pb的指针都后移。在加法计算中要求 pa, 与 pb 的幂次序都是升序,否则可能得到错误的结果。该函数调用了 int compare(Polyn a,Polyn b) 的结果,用来判断多项式在同一指数下 a、 b 是否有为系数为 0。同样也使用了 malloc() 关键字,为新链表创建空间。6. int compare(Polyn a,Polyn b)该函数功能:判断两个多项式在同一指数下是否有其中一个为系数为0。用来辅助加法和乘法运算。7. Polyn SubtractPol

11、yn(Polyn pa,Polyn pb)该函数功能:实现两个多项式 pa、 pb 相减,其原理根加法类似,将指数相同的指数相减。 与加法不同的是在送在减法中,创建了新的链表来存放结果,并返回该链表的头指针。8. void PrintPolyn(Polyn P) 该函数功能: 显示多项式链表。 在该函数中较复杂的是如何控制链表的输出, 尤其是第一项 的输出,同时还有符号的控制。 在输出第一项时要判断是不是常数项, 若是,则不要输出字 符 x 。9. Polyn MultiplyPolyn(Polyn pa,Polyn pb) 函数功能:实现两个多项式相乘, A(X) * B(x) 。计算时运用

12、单项式与多项式相乘的法则, 然后再次运用单项式与多项式相乘的法则。1.4 系统实现该程序实现了多项式的创建、多项式的加法、 减法、 乘法运算以及多项式的清除。为完成这 些功能,还用到了一些辅助函数。下面讨论重要函数具体实现过程及其参数的意义:( 1)链表初始化函数 Creat_node()带有头结点的头指针指向空( NULL)。( 2)多项式数据的创建函数 Creat_Dmeth()当链表初始化成功后, 开始创建多项式。 分别循环输入两个多项式的系数和指数, 其中 要用到插入函数。( 3)数据的插入函数 Insert_node()当创建多项式时, 要用到此函数, 即利用插入的方式将多项式的数据

13、连接起来。 再输入 一组数据后,程序自动调用此函数,插入时也进行着排序,从表头的 next 开始,一一比较 指数大小, 直到大于或等于当前指向的数据或遍历完所有数据时停止, 然后开始链表中数值 的插入, 如果相等则直接将指数相加, 如果大于就将新数据插入到当前指向的前面, 否则将 新数据插入到最后。( 4)多项式的显示函数 Show()从多项式表头的next开始,直到指向空(NULL ,将系数与指数一一显示。(5) 选择运算方式的函数select()三种选择: 1 为相加, 2 为相减,每一种选择调用相应的运算函数。(6) 多项式的运算函数:新建链表存储计算后的多项式1、多项式相加 Addre

14、sult()创建两个指针分别指向两个多项式表头的 next ,分别使用两个 while 函数独自循环, 遍历各自的每一组数据, 每遍历一次都将系数与指数存储到新建多项式的链表中。因为存储时利用到插入函数, 而插入函数中有相同指数的系数相加功能, 所以直接将两个多项式的数 据依次插入到新的多项式中即可完成多项式相加。2、多项式相减 Subresult()创建两个指针分别指向两个多项式表头的 next ,以两个指针同时不为空为条件循环遍 历,如果当前多项式 1的指数小于多项式 2,则将当前多项式 2 的系数置负,指数不变,存 入新建多项式中, 指向多项式 2 的指针指向下一个; 如果如果当前多项式

15、 1的指数大于多项 式 2,则将当前多项式 1的系数指数不变,存入新建多项式中,指向多项式 1 的指针指向下 一个; 否则将多项式 1 的系数减去 2的系数后存入新建多项式中,指数不变存入, 再将两个指针同时指向下一个。 结束循环后判断是哪一个多项式遍历完了,将未遍历完的多项式剩下的数据全部插入到新建多项式中。( 7 )主函数 main()创建两个多项式的链表并且初始化,分别调用相应的多项式创建函数,创建成功后选择运算方式,再将运算结果输出显示。5.其它函数的介绍请参见附录I中详细代码1.5调试及运行结果该程序在VC6.0中调试通过,没有错误和警告,运行结果经过检验为正确。下图即为该程序运行结果效果图。示:图中采用的是计算多项式2xA2+3xA1和3xA2+2xA3的加减两种运算进行演1.6源程序详见附录I附录I 一元多项式计算源代码#include#include typedef struct nodei

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号