欢迎来到天天文库
浏览记录
ID:53323479
大小:87.00 KB
页数:12页
时间:2020-04-03
《数据结构课程设计报告-一元多项式加减乘计算.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《数据结构》课程设计多项式计算班级:学号:姓名:指导老师:多项式计算1、问题描述能够按照指数降序排列建立多项式;能够完成两个多项式的相加、相减和相乘,并将结果输出。2、设计思路这个程序的关键是多项式的创建和排列,以及相乘时系数相乘和指数相加、相加时相同指数的系数相加、相减时相同指数的系数相减。由于多项式拥有指数和系数(假设基数已定),所以可以定义一个包含指数系数的结构体,用单链表存储多项式的数据,所以结构体包含next指针。数据插入时比较两数的指数,按照降序排序,从表头的next开始,直至找到合适的位置,然后开始链表中数值的插入,如果相等则直接将指数相加,如果大于就将
2、新数据插入到当前指向的前面,否则将新数据插入到最后。输入完数据后选择计算方式(相乘、相加、相减),多项式运算时要循环遍历整个多项式,多项式的每一组数据都要和另一个多项式整组数据相运算(每一个运算值都存储到新建的“多项式”链表中),直到两个多项式都遍历完结束。3、数据结构设计在模拟多项式对象时,为了简化处理,只取最核心的两个数据:多项式的系数和指数。前面提到,要用单链表操作,所以要加上个next指针,再由该结构体定义一个结点类型和指针类型。具体数据结构定义如下:typedefstructnode{intxs;/*系数*/intzs;/*指数*/structnode*ne
3、xt;/*next指针*/}Dnode,*Dnodelist;1、功能函数设计(1)链表初始化函数Creat_node()带有头结点的头指针指向空(NULL)。(2)多项式数据的创建函数Creat_Dmeth()当链表初始化成功后,开始创建多项式。分别循环输入两个多项式的系数和指数,其中要用到插入函数。(3)数据的插入函数Insert_node()当创建多项式时,要用到此函数,即利用插入的方式将多项式的数据连接起来。再输入一组数据后,程序自动调用此函数,插入时也进行着排序,从表头的next开始,一一比较指数大小,直到大于或等于当前指向的数据或遍历完所有数据时停止,然后
4、开始链表中数值的插入,如果相等则直接将指数相加,如果大于就将新数据插入到当前指向的前面,否则将新数据插入到最后。(4)多项式的显示函数Show()从多项式表头的next开始,直到指向空(NULL),将系数与指数一一显示。(5)选择运算方式的函数select()三种选择:1为相乘,2为相加,3为相减;每一种选择调用相应的运算函数。(6)多项式的运算函数:新建链表存储计算后的多项式1、多项式相乘Mulresult()创建两个指针分别指向两个多项式表头的next,使用两个while函数嵌套循环,遍历每一组数据,每遍历一次都将两组数据的系数相乘,指数相加,再利用插入函数将系数
5、与指数存储到新建多项式的链表中。2、多项式相加Addresult()创建两个指针分别指向两个多项式表头的next,分别使用两个while函数独自循环,遍历各自的每一组数据,每遍历一次都将系数与指数存储到新建多项式的链表中。因为存储时利用到插入函数,而插入函数中有相同指数的系数相加功能,所以直接将两个多项式的数据依次插入到新的多项式中即可完成多项式相加。3、多项式相减Subresult()创建两个指针分别指向两个多项式表头的next,以两个指针同时不为空为条件循环遍历,如果当前多项式1的指数小于多项式2,则将当前多项式2的系数置负,指数不变,存入新建多项式中,指向多项式
6、2的指针指向下一个;如果如果当前多项式1的指数大于多项式2,则将当前多项式1的系数指数不变,存入新建多项式中,指向多项式1的指针指向下一个;否则将多项式1的系数减去2的系数后存入新建多项式中,指数不变存入,再将两个指针同时指向下一个。结束循环后判断是哪一个多项式遍历完了,将未遍历完的多项式剩下的数据全部插入到新建多项式中。(7)主函数main()创建两个多项式的链表并且初始化,分别调用相应的多项式创建函数,创建成功后选择运算方式,再将运算结果输出显示。1、程序代码#include#includetypedefstructnode{
7、intxs;intzs;structnode*next;}Dnode,*Dnodelist;/*定义结构体*/DnodelistCreat_node(void)/*链表初始化*/{DnodelistD;D=(Dnodelist)malloc(sizeof(Dnode));if(D)D->next=NULL;returnD;}intInsert_node(DnodelistD,intxs,intzs)/*插入函数*/{Dnodelistp;Dnodelistq;Dnodelistr;p=D;while(p->next){r=p;p=p->next;if
此文档下载收益归作者所有