一元多项式求和 实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一、线性结构综合应用

一、实验题目:顺序表的应用

二、实验内容:一元多项式求和。

把任意给定的两个一元多项式P(x),Q(x)输入计算机,计算它们的和并输出计算结果。

三、设计分析:

实现要定义的一元多项式应采用链式存储结构。根据一元多项式相加的运

算法则,对于两个多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成新多项式的一项;对于两个多项式中所有指数不同的项,分别复制到新多项式中。新多项式不必另外生成,而是在原来的两个多项式中摘取结点即可。

采用顺序存储结构存储多项式系数A,使多项式的某些运算变得更简洁。但在实际使用时,多项式的阶数可能很高,不同的多项式阶数可能相差很大,这使顺序存储结构的最大长度难以确定。而且,最高次幂与最低次幂项之间缺项很多时,采用顺序存储结构显然十分浪费存储空间,因此,一般情况下多采用链式存储结构来存储高阶多项式。

在用线性链表来存储一个多项式时,多项式中的每个非零项系数对应一个结点,结点由数据元素项和指针组成。数据元素项中包含系数和指数值,

设计中先定义定义数据元素中的数据,其中有指数、系数级指针next等。并要先构造一元多项式。在定义输出、删除、合并等模块。

假设指针qa和qb分别指向多项式A和B中当前进行操作的某个结点,比较这个结点的指数项,可能有三种情况:

①指针qa->expexp,则摘取qa指针所指结点插入到和多项式中;

②指针qa->expexp,则摘取qb指针所指结点插入到和多项式中;

③指针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结束输入)"<>mod>>ind;

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<coef<<"*x^"<exp;

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;

}

相关文档
最新文档