一元多项式求和 实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一、线性结构综合应用
一、实验题目:顺序表的应用
二、实验内容:一元多项式求和。
把任意给定的两个一元多项式P(x),Q(x)输入计算机,计算它们的和并输出计算结果。
三、设计分析:
实现要定义的一元多项式应采用链式存储结构。根据一元多项式相加的运
算法则,对于两个多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成新多项式的一项;对于两个多项式中所有指数不同的项,分别复制到新多项式中。新多项式不必另外生成,而是在原来的两个多项式中摘取结点即可。
采用顺序存储结构存储多项式系数A,使多项式的某些运算变得更简洁。但在实际使用时,多项式的阶数可能很高,不同的多项式阶数可能相差很大,这使顺序存储结构的最大长度难以确定。而且,最高次幂与最低次幂项之间缺项很多时,采用顺序存储结构显然十分浪费存储空间,因此,一般情况下多采用链式存储结构来存储高阶多项式。
在用线性链表来存储一个多项式时,多项式中的每个非零项系数对应一个结点,结点由数据元素项和指针组成。数据元素项中包含系数和指数值,
设计中先定义定义数据元素中的数据,其中有指数、系数级指针next等。并要先构造一元多项式。在定义输出、删除、合并等模块。
假设指针qa和qb分别指向多项式A和B中当前进行操作的某个结点,比较这个结点的指数项,可能有三种情况:
①指针qa->exp
②指针qa->exp
③指针qa->exp=qb->exp,则将系数相加,若和数不为零,则修改qa->coef的值,同
时释放qb所指结点,反之,从多项式A的链表中删除相应的结点,并释放指针Pa
和Pb所指结点;
还有就是在输入是采取的降序输入,也好使两个多项式进行合并。并输出。在主函数中将前面也的这些功能都运用起来就可以了
四、程序代码:
#include
#define NULL 0
using namespace std;
typedef struct Polynomial
{
float coef; //系数
int exp; //指数
struct Polynomial *next;
}Polynomial;
Polynomial *CreatPolyn()
{ //输入m项的系数和指数,建立一元多项式float mod;
int ind;
Polynomial *H,*p,*s;
H=new Polynomial;
s=H;
cout<<"请输入多项式的系数和指数:(按0结束输入)"<
while(mod){
p=(Polynomial *)new Polynomial;
p->coef=mod;
p->exp=ind;
s->next=p;
s=p;
cin>>mod>>ind;
}
s->next=NULL;
return H;
}
void Print(Polynomial *pa)
{ //打印输出一元多项式p while(pa->next!=NULL) {
pa=pa->next;
cout<
if(pa->next!=NULL&&pa->next->coef>0)
cout<<"+";
}
}
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&&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;
}
else
{
temp=p->next;
delete p;
p=temp;
temp=q->next;
delete q;
q=temp;
}
}
else
{
pre->next=q;
pre=pre->next;
q=q->next;
}