一元多项式计算(数据结构课程设计)

上传人:公**** 文档编号:472844357 上传时间:2022-08-24 格式:DOCX 页数:25 大小:220.91KB
返回 下载 相关 举报
一元多项式计算(数据结构课程设计)_第1页
第1页 / 共25页
一元多项式计算(数据结构课程设计)_第2页
第2页 / 共25页
一元多项式计算(数据结构课程设计)_第3页
第3页 / 共25页
一元多项式计算(数据结构课程设计)_第4页
第4页 / 共25页
一元多项式计算(数据结构课程设计)_第5页
第5页 / 共25页
点击查看更多>>
资源描述

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

1、_元多项式计算(数据结构课程 设计)池州学院CH I ZHOU COLLEGE数据结构课程设计报告学 号:57 54 39 37 20 25 27姓 名:周田张永鹏武警温凯侨李坤米昌华阮健健班 级:10计算机科学与技术(2)班指导教师:成 绩:数学与计算机科学系1、设计名称一元多项式计算2、主要功能能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结 果输出;3、设计平台电脑、Visual c+ 6.0、系统设计1、算法思想根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的 项,对应指数相加(减)若其和(差)不为零,则构成“和(差)多项式”中 的一项;对于

2、两个一元多项式中所有指数不相同的项,则分别写到“和(差) 多项式”中去。因为多项式指数最高项以及项数是不确定的,因此采用线性链表的存储结构 便于实现一元多项式的运算。为了节省空间,我采用两个链表分别存放多项式a 和多项式b,对于最后计算所得的多项式则利用多项式a进行存储。主要用到了 单链表的插入和删除操作。一元多项式加法运算 它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等 的话,系数就应该相加;相加的和不为零的话,用头插法建立一个新的节点。P 的指数小于q的指数的话就应该复制q的节点到多项式中。P的指数大于q的 指数的话,就应该复制p节点到多项式中。当第二个多项式空,第一

3、个多项式 不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个多项式 不为空时,将第二个多项式用新节点产生。(2)元多项式的减法运算它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相 等的话,系数就相减;相加的和不为零的话,用头插法建立一个新的节点。p的 指数小于q的指数的话,就应该复制q的节点到多项式中。P的指数大于q的 指数的话就应该复制p的节点到多项式中,并且建立的节点的系数为原来的相 反数;当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点 产生。当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点 产生,并且建立的节点的系数为原来的相反

4、数。2、概要设计(1)主函数流程图:(注:a代表第一个一元二次方程,b代表第二个一元二次方程)(2)元多项式计算算法用类C语言表示:Typedef struct00 项的表示,多项式的项作为LinkList的数据元素Float coef; 细数Int expn; /指数term,ElemType; /两个类型名:term 用于本 ADT, ElemType 为 LinkList 的数据对象名Typedef LinkList polynomial: 用带表头的节点的有序链表表示多项式基本操作的函数原型说明Void CreatePolyn( polynomail&P);/输入n的系数和指数,建立表

5、示一元多项式的有序链表P 销毁一元多项式PVoid DestroyPolyn(polynomailP);销毁一元多项式PvoidPrintPoly(polynomail P);打印输入一元多项式PIntPolynLength(polynnomail P);返回一元多项式P中的项数void CreatPolyn( polynomail&Pa.polunomail&Pb);完成多项式相加运算,即:Pa=Pa+Pb,并贤惠一元多项式PbvoidSubtractPolyn( polunomail&Papolunomail&Pb);完成多项式相减运算,即:Pa=Pa-Pb,并销毁一元多项式Pb/基本操作

6、的算法描述Int cmp(tem a,temp b);依a的指数值v (或=)(或的住数值,分别返回-1、0和+1Void CreatePolyn( polynomail&P,int m)/输入m项的系数和指数,建立表示一元多项式的有序链表PInitList (P); h=GetHead (P);E.coef=0.0;e.expn=-1; SerCurElem(h,e); 设置头结点的数据元素For (i=1; iv=m; +i) 依次输入m个非零项Scanf (ecoef,e.epn);If (! LocateElem (P,e,q,(*cmp)()当前链表中不存在该指数项If(MakeNo

7、de (s,e) InsFirst (q,s);生成节点并插入链表/CreatPolun-、详细设计1、算法实现(1)输入一元多项式函数:void shuchu(pnode *head) pnode *p;int one_time=1;p=head;while(p!=NULL) /* 如果不为空*/if(one_time=1)if(p-zhishu=0) /*如果指数为0的话,直接输出系数*/ printf(%52f,p-xishu); /*如果系数是正的话前面就要加+号*/ else if(p-xishu=1llp-xishu=-1)printf(XA%d,p-zhishu); /*如果系数

8、是1的话就直接输出+x*/*如果系数是-1的话就直接输出-x号*/else if(p-xishu0) /*如果系数是大于0的话就输出+系数xA指数的形式*/ printf(%5.2fXA%d,p-xishu9p-zhishu);else if(p-xishuxishu9p-zhishu);one_time=0;elseif(p-zhishu=0) /*如果指数为0的话,直接输出系数*/if(p-xishu0)printf(+%52f,p-xishu); /*如果系数是正的话前面就要加+号*/else if(p-xishu=1) /*如果系数是1的话就直接输出+x号*/ printf(+XA%d

9、,p-zhishu);else if(p-xishu=-1) /*如果系数是-1的话就直接输出-x号*/ printf(XA%d,p-zhishu);else if(p-xishu0) /*如果系数是大于0的话就输出+系数xA指数的形式*/ printf(+%5.2fXA%d,p-xishu,p-zhishu);else if(p-xishuxishu,p-zhishu);p=p-next; /*指向下一个指针*/printf(n);加法函数/*两个多项式的加法运算*/pnode * add(pnode *heada,pnode *headb)pnode *headc,*p,*q,*s,*r;

10、 /*headc为头指针,r,s为临时指针,p指向第1个多项 式并向右移动,q指向第2个多项式并向右移动*/float x; /*x为系数的求和*/p=heada; /*指向第一个多项式的头*/q=headb; /*指向第二个多项式的头*/headc=(pnode *)malloc(sizeof(pnode); /* 开辟空间*/r=headc;while(p!=NULL&q !=NULL) /*2个多项式的某一项都不为空时*/if(p-zhishu=q-zhishu) /* 指数相等的话*/x=p-xishu+q-xishu; /* 系数就应该相加*/if(x!=0)/*相加的和不为0的话*

11、/s=(pnode *)malloc(sizeof(pnode); /* 用头插法建立一个新的节点*/s-xishu=x;s-zhishu=p-zhishu;r-next=s;r=s;q=q-next;p=p-next; /*2 个多项式都向右移*/else if(p-zhishuzhishu) /*p的系数小于q的系数的话,就应该复制q节点到多项式中*/s=(pnode *)malloc(sizeof(pnode);s-xishu=q-xishu;s-zhishu=q-zhishu;r-next=s;r=s;q=q-next; /*q 向右移动*/else/*p的系数大于q的系数的话,就应该

12、复制p节点到多项式中*/s=(pnode *)malloc(sizeof(pnode);s-xishu=p-xishu;s-zhishu=p-zhishu;r-next=s;r=s;p=p-next; /*p 向右移动*/*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/while(p!=NULL)s=(pnode *)malloc(sizeof(pnode);s-xishu=p-xishu;s-zhishu=p-zhishu;r-next=s;r=s;p=p-next;/*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/while(q!=NULL)

13、s=(pnode *)malloc(sizeof(pnode);s-xishu=q-xishu;s-zhishu=q-zhishu;r-next=s;r=s;q=q-next;r-next=NULL; /*最后指向空*/headc=headc-next; /* 第一个头没有用到*/ return headc; /*返回头接点*/(3)减法函数/*两个多项式的加法运算*/pnode * add(pnode *heada,pnode *headb)pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项 式并向右移动,q指向第2个多项式并向右移

14、动*/float x; /*x为系数的求和*/p=heada; /*指向第一个多项式的头*/q=headb; /*指向第二个多项式的头*/headc=(pnode *)malloc(sizeof(pnode); /* 开辟空间*/r=headc;while(p!=NULL&q !=NULL) /*2个多项式的某一项都不为空时*/if(p-zhishu=q-zhishu) /* 指数相等的话*/x=p-xishu+q-xishu; /* 系数就应该相加*/if(x!=0)/*相加的和不为0的话*/s=(pnode *)malloc(sizeof(pnode); /* 用头插法建立一个新的节点*/s-xishu=x;s-zhishu=p-zhishu;r-next=s;r=s;q=q-next;p=p-next; /*2 个多项式都向右移*/else if(

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

最新文档


当前位置:首页 > 机械/制造/汽车 > 电气技术

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