




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/=用带表头结点的单链表实现多项式的加-减-乘-除运算的C+程序=/=一元多项式的运算:OOP=/1.降幂建立一个一元多项式并输出-/2.求两个多项式的和并输出(原多项式不变)-/3.利用求和函数,求两个多项式的差并输出(原多项式不变)-/4.利用求和与求差函数,求两个多项式的积并输出(原多项式不变)-/5.利用求和、差、积函数,求两多项式的商并输出(原多项式不变)-#include /getch#include /exit#include /fabs#include/cout,cinusing namespace std;typedef struct/元素类型定义float coef;/系数
2、(Coefficient)int expn;/指数(exponential )EType;/元素类型名(ElementType)typedef struct LNode/链表结点类型定义EType d;/结点数据域struct LNode *next;/结点指针域LNode,*LinkNP;/结点及结点指针类型名typedef struct/表头结点类型LinkNP head,tail;/链表头尾指针int len;/链表长度LHNode;/链表头结点类型名typedef LHNode* polyn;/多项式表头结点指针类型名/=多项式类的定义=/class polynomailprivate
3、:polyn p;/数据成员public:polynomail()/=构造函数:初始化表头结点及其指针=p=new LHNode;if(!p)errExit(New LHNode error!);/检测指针是否为空p-head=NULL,p-tail=NULL,p-len=0;void errExit(char *str)/遇错自动退出程序coutb.expn)return 1;else if(a.expnd=e;/给结点赋值L-next=NULL;return 1;void AppNode(LinkNP L)/=结点链入尾部=if(p-head=NULL)/若表为空p-head=p-tail
4、=L;elsep-tail-next=L;/L连到尾部p-tail=L;/修改头结点的尾指针p-len+=1;/表长增1void InsFirst(LinkNP s)/=s插入链首结点前=if(!p-head)AppNode(s);else s-next=p-head,p-head=s,p-len+=1;void InsSortNode(LinkNP s)/=s所指插入有序链p中=LinkNP h=p-head,t=p-tail;if(!h|s-d.expnd.expn)/若表空或s比尾大.AppNode(s);/.则直接连入尾部else if(s-d.expnh-d.expn)/s比首元素指
5、数大InsFirst(s);/作为首元素插入elsewhile(1)/查找插入位置if(s-d.expnh-next-d.expn)break;/h停在待插点前h=h-next;s-next=h-next;/插入h之后h-next=s;p-len+=1;int LocateElem(EType e,LinkNP& q)/=p中找e且指针入q=LinkNP h=p-head;while(h&CmpElemExpn(h-d,e)/查找是否有eh=h-next;q=h;/指针存入qif(q)return 1;/若有else return 0;/若无void CreatPoly(char *str)/
6、=逐个降幂有序创建=int i=1;LinkNP s,q;EType e;printf(nCreat polyn %s:n,str);while(1)printf(tcoef%d,expn%d=,i,i);scanf(%f,%d,&e.coef,&e.expn);/输入系数及幂次if(e.coef=0&e.expn=0)break;/若全0则结束if(fabs(e.coef)1.0e-30|(e.expn0)/若系数或指数非法coutError!n;continue;/重新输入if(!LocateElem(e,q)/若该项不存在.if(MakeNode(s,e)/若结点创建成功InsSortN
7、ode(s);/将s所指有序插入elsecoutError!n;continue;/.否则重新输入i+;/记录项数void ItemPrint(float a,int n)/输出某项axnif(n=0)couta;/指数为0else if(n=1)/指数为1if(a=1)coutx;else if(a=-1)cout-x;else coutax;else/指数大于1if(a=1)coutxn;else if(a=-1)cout-xn;else coutaxhead;if(L)/若非空则输出首元结点printf(n多项式%s中有%d项: ,str,p-len);ItemPrint(L-d.coe
8、f,L-d.expn);L=L-next;else printf(n多项式%s为空!,str);while(L)/输出之后所有结点if(L-d.coef0)coutd.coef,L-d.expn);L=L-next;/=两多项式类相加=/void AddPoly(polynomail pa,polynomail pb)/求两个多项式的和LinkNP ha,hb,ht;EType ea,eb,ec;ha=pa.p-head,hb=pb.p-head;while(ha&hb)/a,b都非空时循环ea=ha-d,eb=hb-d;switch(CmpElemExpn(ea,eb)/比较大小case 1
9、:/若ea大则将ea加入ecif(MakeNode(ht,ea)AppNode(ht);ha=ha-next;/a表指针后移break;case 0:/若ea与ec相等则将和加入ecec.coef=ea.coef+eb.coef;ec.expn=ea.expn;if(ec.coef)/若系数不为0if(MakeNode(ht,ec)/若开辟结点成功AppNode(ht);/将结点指针L链入cha=ha-next,hb=hb-next;/a,b两表指针同时后移break;case -1:/若eb大则将eb加入ecif(MakeNode(ht,eb)AppNode(ht);hb=hb-next;/
10、b表指针后移break;while(ha)/若ea有剩余,则将剩余加入ea=ha-d;if(MakeNode(ht,ea)AppNode(ht);ha=ha-next;while(hb)/若eb有剩余,则将剩余加入eb=hb-d;if(MakeNode(ht,eb)AppNode(ht);hb=hb-next;void CopyPoly(polynomail s)/拷贝多项式LinkNP np=s.p-head,q;while(np)if(MakeNode(q,np-d)AppNode(q);np=np-next;void RevSignPoly(polynomail &pn)/系数反号Lin
11、kNP p=pn.p-head;while(p)p-d.coef=-p-d.coef;/反号p=p-next;/=两多项式类相减=/void SubPoly(polynomail a,polynomail b)/将b反号与a相加polynomail pn;pn.CopyPoly(b);RevSignPoly(pn);AddPoly(a,pn);/=两多项式类相乘=/void MulPoly(polynomail a,polynomail b,polynomail &c)/a与b相乘存入cLinkNP ha=a.p-head,hb=b.p-head;polynomail pa,pb,pc,pt;
12、if(!ha|!hb)c=pt;return;/空多项式即0while(ha)/取多项式的某项pb.CopyPoly(b);hb=pb.p-head;while(hb)/与多项式b相乘hb-d.coef*=ha-d.coef;hb-d.expn+=ha-d.expn;hb=hb-next;pt.CopyPoly(c);/c复制到ptc.Destroy();/c清零c.AddPoly(pt,pb);/pt与pb之和存入cpt.Destroy();/pt清零pb.Destroy();ha=ha-next;/=两多项式类相除=/void DivPoly(polynomail a,polynomail
13、 b,polynomail &q,polynomail &r)/a与b相除商存入q余存入rpolynomail pa,pb,pt;LinkNP ep,h,ha=a.p-head,hb=b.p-head;if(!ha)q=r=pt;return;if(!hb)errExit(n多项式b不能为零);/除式不能为0pa.CopyPoly(a);while(ha&hb&ha-d.expn=hb-d.expn)/a比b首项指数大ep=new LNode;ep-next=NULL;ep-d.coef=ha-d.coef/hb-d.coef;ep-d.expn=ha-d.expn-hb-d.expn;q.A
14、ppNode(ep);/商式因子连入qpb.CopyPoly(b);h=pb.p-head;while(h)/商式与除式相乘h-d.coef*=ep-d.coef;h-d.expn+=ep-d.expn;h=h-next;pt.SubPoly(pa,pb);/再与被除式相减pa.Destroy();pb.Destroy();pa.CopyPoly(pt);pt.Destroy();ha=pa.p-head;r.CopyPoly(pa);void Destroy()/释放内存空间=LinkNP px=p-head,pt;while(px)pt=px;px=px-next;delete pt;/释放内存空间p-head=NULL;p-tail=NULL;p-len=0;/=多项式类的测试=/void main() polynomail a,b,c,r;/创建对象a,b,c空多项式a.CreatPoly(a);/有序创建多项式a并输出a.PrintPoly(a);b.CreatPoly(b);/有序创建多项式b并输出b.PrintPoly(b);c.AddPoly(a,b);/a与b相加其和存入c并输出c.PrintPoly(和式);c.Destroy();/清除cc.SubPoly(a,b);/a与b相减其
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关键事件对幼儿园男教师职业生涯发展影响的质性研究
- 二硒化钼-MXene负极复合材料的制备及其储钠性能的研究
- 考点攻克人教版八年级上册物理物态变化《温度》专项攻克试卷(含答案详解版)
- DB11T 1493-2025 城镇道路雨水口技术规范
- 上能转债案例研究
- 考点攻克人教版九年级物理《内能的利用》必考点解析试题(含答案解析)
- 巢湖主要入湖河流底栖生物完整性与化学完整性评价研究
- 量子场论中的费曼积分解析计算研究
- 色纱生产线项节能评估报告
- 第14课 文字编辑说课稿-2023-2024学年小学信息技术(信息科技)第二册黔教版
- 2026福建三钢集团秋季校园招聘57人考试参考试题及答案解析
- 2025年镇江市中考英语试题卷(含答案及解析)
- 2025-2030固态电池产业技术创新路径与下游需求市场预测研究报告
- 福建成人高考考试题库及答案
- 济南生物考试题目及答案
- 2025年营养指导员考试模拟试题库(含答案)
- 2025西安市第五医院招聘(6人)考试参考试题及答案解析
- GB/T 10213-2025一次性使用医用橡胶检查手套
- 诗经采葛课件
- 2025年江西省高考生物试卷真题(含标准答案及解析)
- 人民币国际化进程中跨境贸易人民币结算:现状、挑战与路径探索
评论
0/150
提交评论