一元稀疏多项式的加法运算.doc_第1页
一元稀疏多项式的加法运算.doc_第2页
一元稀疏多项式的加法运算.doc_第3页
一元稀疏多项式的加法运算.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一元稀疏多项式的加法运算一、需求分析1、 要求用带头结点的单链表存储两个多项式,然后进行多项式加法运算,存入另一个单链表中。2、 从键盘输入多项式a的项数,然后分别输入每项的系数和指数;类此输入多项式b。3、 测试数据:(1)、(1+x+x2+x3+x4+x5)+(-x3-x4)=(1+x+x2+x5)(2)、(x+x100)+(x100+x200)=(x+2x100+x200)(3)、(2x+5x8-3x11)+(7-5x8+11x9)=(7+2x+11x9-3x11)二、设计1、 设计思想(1)、存储结构:带头结点的单链表(2)、主要算法基本思想先输入多项式的项数j,建立一个循环,分别进行链表的插入操作,插入时就是建立空结点存入系数和指数后再插入链表中。在插入的同时要比较与原链表中指数项的大小,从而建立由低次方到高次方的存储链表。在多项式相加时,将多项式a先存入多项式c中,此时c中的指数是升序排列,再将b中系数与指数存入,存入的方法是:指数比较寻找插入结点,指数相等时,进行系数相加操作,其他是建立一个空结点,存入b的系数与指数载插入c中。至于输入过程,多项式a、b、c均可输出,由于存储的按指数升序存的,所以不必进行查找了,只需要按一个个结点顺序输出即可。#include#include#includetypedef structfloat coef;int expn;count;typedef struct Nodefloat coef;/系数int expn;/指数struct Node *next;LinkList;void ListInitiate(LinkList *head)/链表初始化if(*head=(LinkList *)malloc(sizeof(LinkList)=NULL) exit(0);(*head)-next=NULL;void ListInsert(LinkList *head,count L)/链表插入操作LinkList *p,*q;p=head;while(p-next!=NULL)/从系数由小到大排序的角度寻找插入结点if(p-next-expnL.expn)break;p=p-next;if(q=(LinkList *)malloc(sizeof(LinkList)=NULL)exit(0);q-coef=L.coef;q-expn=L.expn;q-next=p-next;p-next=q;int print(LinkList *head)/输出LinkList *p;p=head-next;if(p=NULL)/多项式为零时直接输出printf(0n);exit(0);while(p-coef=1&p-expn0)/指数不为零时系数为1时的输出printf(x%d,p-expn);p=p-next;if(p=NULL)return 0;else printf(+);while(p-next)printf(%gx%d,p-coef,p-expn);p=p-next;if(p-coef0)printf(+);printf(%gx%d,p-coef,p-expn);return 1;void Add(LinkList *a,LinkList *b,LinkList *c)/多项式a、b相加等于多项式cLinkList *p,*q,*s,*k;s=c;p=a-next;while(p!=NULL)/先将a存入c中if(q=(LinkList *)malloc(sizeof(LinkList)=NULL)exit(0);q-coef=p-coef;q-expn=p-expn;q-next=NULL;c-next=q;c=c-next;p=p-next;c=s;p=b-next;while(p!=NULL)/将b存入c中while(c-next!=NULL)&(p-expn)(c-next)-expn)/寻找插入结点c=c-next;if(c-next=NULL)/从最后插入if(q=(LinkList *)malloc(sizeof(LinkList)=NULL)exit(0);q-coef=p-coef;q-expn=p-expn;q-next=c-next;c-next=q;else if(p-expn=c-next-expn) /指数相等时系数相加 s=c;c=c-next;c-coef=c-coef+p-coef;if(c-coef=0)k=c;c=s;c-next=c-next-next;free(k);else if(p-expnc-expn&c-next!=NULL)/普通插入if(q=(LinkList *)malloc(sizeof(LinkList)=NULL)exit(0);q-coef=p-coef;q-expn=p-expn;q-next=c-next;c-next=q;p=p-next;void main()/主函数LinkList *a,*b,*c;count L;int i,j;ListInitiate(&a);ListInitiate(&b);ListInitiate(&c);printf(请输入a的项数:);scanf(%d,&j);for(i=0;ij;i+)printf(输入a的第%d项系数:,i+1);scanf(%g,&L.coef);printf(输入a的第%d项指数:,i+1);scanf(%d,&L.expn);ListInsert(a,L);printf(输入b的项数:);scanf(%d,&j);for(i=0;ij;i+)printf(输入b的第%d项系数:,i+1);scanf(%g,&L.coef);printf(输入b的第%d项指数:,i+1);scanf(%d,&L.expn);ListInsert(b,L

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论