下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一、线性结构综合应用一、实验题目:顺序表的应用二、实验内容:一元多项式求和.把任意给定的两个一元多项式P(x) ,Q(x)输入计算机,计算它们的和并输出计算结果.三、设计分析:实现要定义的一元多项式应采用链式存储结构.根据一元多项式相加的运算法那么,对于两个多项式中所有指数相同的项,对应系数相加,假设其和不为零,那么构成新多项式的一项;对于两个多项式中所有指数不同的项,分别复制到新多项式中.新多项式不必另外生成,而是在原来的两个多项式中摘取结点即可.采用顺序存储结构存储多项式系数A,使多项式的某些运算变得更简洁.但在实际使用时,多项式的阶数可能很高,不同的多项式阶数可能相差很大,这使顺序存
2、储结构的最大长度难以确定.而且,最高次藉与最低次藉项之间缺项很多时,采用顺序存储结构显然十分浪费存储空间,因此,一般情况下多采用链式存储结构来存储高阶多项式.在用线性链表来存储一个多项式时,多项式中的每个非零项系数对应一个结点,结点由数据元素项和指针组成.数据元素项中包含系数和指数值,设计中先定义定义数据元素中的数据,其中有指数、系数级指针next等.并要先构造一元多项式.在定义输出、删除、合并等模块.假设指针qa和qb分别指向多项式 A和B中当前进行操作的某个结点,比较这个结点的指数项,可能有三种情况: 指针qa->exp<qb->exp,那么摘取qa指针所指结点插入到和多
3、项式中; 指针qa->exp<qb->exp,那么摘取qb指针所指结点插入到和多项式中; 指针qa->exp=qb->exp,那么将系数相加,假设和数不为零,那么修改 qa->coef的值,同时释放qb所指结点,反之,从多项式A的链表中删除相应的结点,并释放指针Pa和Pb所指结点;还有就是在输入是采取的降序输入,也好使两个多项式进行合并.并输出.在主函数中将前面也的这些功能都运用起来就可以了四、程序代码:#include<iostream>#define NULL 0using namespace std;typedef struct Polyn
4、omial系数指数输入m项的系数和指数,建立一元多项式float coef; / int exp; /struct Polynomial *next; Polynomial;Polynomial *CreatPolyn() (/float mod; int ind;Polynomial *H,*p,*s; H=new Polynomial;s=H;cout<<"请输入多项式的系数和指数:按0结束输入"<<endl;cin>>mod>>ind;while(mod)(p=(Polynomial *)new Polynomial;
5、p->coef=mod;p->exp=ind;s->next=p;s=p;cin>>mod>>ind;s->next=NULL;return H;void Print(Polynomial *pa)(/打印输出一元多项式pwhile(pa->next!=NULL) (pa=pa->next;cout<<pa->coef<<"*xA"<<pa->exp;if(pa->next!=NULL&&pa->next->coef>0)cou
6、t<<"+"void Delete(Polynomial *pa)(/删除一元多项式Polynomial *p,*q;p=pa->next;while(p)(q=p;p=p->next;delete q;pa->next=NULL;void AddPolyn(Polynomial *pa,Polynomial *pb)(/用于链表的合并使用完成多项式的相加运算float sum;Polynomial *p,*q,*pre,*temp;p=pa->next;q=pb->next;pre=pa;while(p!=NULL&&am
7、p;q!=NULL)(if(p->exp>q->exp)(pre->next=p;pre=pre->next;p=p->next;else if(p->exp=q->exp)(sum=p->coef+q->coef;if(sum!=0) p->coef=sum;pre->next=p;pre=pre->next;p=p->next;temp=q;q=q->next;delete temp;elsetemp=p->next;delete p;p=temp;temp=q->next;delete
8、q;q=temp;elsepre->next=q;pre=pre->next;q=q->next;将多项式A中剩余的结点参加到和多项式中 if(p!=NULL) / pre->next=p;else pre->next=q; int main()int c;int t=1;while(t)cout<<*菜单*、"<<endl<<endl;cout<<1.创立并显示一元多项式A和B,计算一元多项式A加B并显示和"<<endl<<endl;cout<<2.退出程序.<<endl;cin>>c;switch(c)case "Polynomial *p1,*p2;p1=CreatPolyn();cout<< 一元多项式 A是:"Print(p1);cout<<endl;p2=CreatPolyn();cout<< 一元多项式 B是:"Print(p2);cout<<endl;AddPolyn(p1,p2);cout<<" 一元多项式 A加B的和是:"Print(p1);cout<<endl;Dele
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论