实验1 线性表应用多项式计算_实验1线性表及其应用

2020-02-27 其他范文 下载本文

实验1 线性表应用多项式计算由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验1线性表及其应用”。

一.实验目的和要求

1.进一步掌握线性表的的基本操作。

2.掌握线性表的典型应用----多项式表示与计算。

二.实验内容

1. 设用线性表((a1, e1),(a2, e2), ……,(am, em))表示多项式P(x)= a1*xe1 + a2*xe2 +…+ am*xem,请编写用链式存储结构(带表头附加结点的单链表)存储该多项式时,多项式基本操作的实现函数。要求:把多项式线性表的结构定义及多项式基本操作实现函数存放在文件Linkpoly.h中。说明:基本操作可包括如下 ① 初始化多项式InitPoly(p)② 输出多项式TraversePoly(p)③ 清除多项式ClearPoly(p)④ 插入一项 InsertPoly(p, a, e)

⑤ 删除一项 DeletetPoly(p, a, e, pos)⑥ 多项式求值PolySum(p, x)

⑦ 多项式相加PolyAdd(p1, p2)

2. 建立主程序文件test1.cpp,在主函数main()中通过调用Linkpoly.h中的函数进行测试。

3. 编写用顺序存储结构存储多项式时,上述各多项式基本操作的实现函数。要求: 把多项式线性表的结构定义及多项式基本操作实现函数存放在文件Seqpoly.h中,在主程序文件test1.cpp中增加测试语句对Seqpoly.h中的函数进行测试。

4. 填写实验报告,实验报告文件取名为report1.doc。

5. 上传实验报告文件report1.doc与源程序文件test1.cpp及Linkpoly.h、Seqpoly.h 到Ftp服务器上自己的文件夹下。

三.函数的功能说明及算法思路

包括每个函数的功能说明,及一些重要函数的算法实现思路

四.实验结果与分析

包括运行结果截图等

五.心得体会

记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。

【附录----源程序】 Test1.cpp: #include #include #include #include “Linkpoly.h” #include “Seqpoly.h” void main(){ cout

//初始化多项式

InitPoly(pb);cout>n;cout

cin>>a;

cin>>e;

InsertPoly(pa, a, e);

//插入一项

pa=pa->next;} pa=pa->next;cout

//输出多项式

cout>a;cin>>e;cin>>pos;if(DeletetPoly(pa, a, e, pos)){

cout

TraversePoly(pa);

cout

cout>x;sum=PolySum(pa, x);cout>n;cout

cin>>a;

cin>>e;

InsertPoly(pb, a, e);

//插入一项

pb=pb->next;} pb=pb->next;pp=PolyAdd(pa, pb);cout

cout

cout

cout>n;cout

cin>>a;

cin>>e;

InsertPoly1(s, a, e);} cout>a;cin>>e;cin>>pos;if(DeletetPoly1(s, a, e, pos)){

cout

TraversePoly1(s);

cout

cout>x;sum=PolySum1(s, x);cout>n;cout

cin>>a;

cin>>e;

InsertPoly1(t, a, e);

//插入一项

} q=PolyAdd1(s, t);cout

Linkploy.h: struct NodeType{

float coef;

int exp;

NodeType *next;};bool InitPoly(NodeType *&p)

//初始化多项式 { if((p=new NodeType)==NULL)

return false;p->next=p;return true;} void TraversePoly(NodeType *p)

//输出多项式 {

NodeType *h=p->next;if(h!=p){

coutcoefexp;

h=h->next;} while(h!=p){

if(h->coef>0)

cout

coutcoefexp;

h=h->next;} } void ClearPoly(NodeType *&p)

//清除多项式 { NodeType *cp,*np;cp=p->next;while(cp!=p){

np=cp->next;

delete cp;

cp=np;} p->next=p;} bool InsertPoly(NodeType *&p, float a, int e)

//插入一项 { NodeType *h;if((h=new NodeType)==NULL)

return false;h->coef=a;h->exp=e;h->next=p->next;p->next=h;return true;} bool DeletetPoly(NodeType *&p, float a, int e, int pos)

//删除一项 { if(pos>1||pos

return false;NodeType *cp=p->next;NodeType *np=p;if(pos==0){

while(cp!=p){

if(cp->coef==a&&cp->exp==e)

break;

else{

np=cp;

cp=cp->next;

}

} } else if(pos==-1)

while(cp!=p){

np=cp;

cp=cp->next;

} np->next=cp->next;delete cp;

return true;} double PolySum(NodeType *p, float x)

//多项式求值 { int i;double sum=0,item;

NodeType *cp=p->next;while(cp!=p){

item=1;

for(i=1;iexp;i++)

item=item*x;

sum=sum+item*cp->coef;

cp=cp->next;} return sum;} NodeType *PolyAdd(NodeType *p1, NodeType *p2)

//多项式相加 { float coef;NodeType *a=p1->next,*b=p2->next,*c,*pc;

InitPoly(c);pc=c;while(a!=p1&&b!=p2){

if(a->exp==b->exp){

coef=a->coef+b->coef;

if(coef!=0){

InsertPoly(pc, coef, a->exp);

pc=pc->next;

}

a=a->next;

b=b->next;

}

else if(a->expexp){

InsertPoly(pc,a->coef,a->exp);

pc=pc->next;

a=a->next;

}

else{

InsertPoly(pc,b->coef,b->exp);

pc=pc->next;

b=b->next;

} } while(a!=p1){

InsertPoly(pc,a->coef,a->exp);

pc=pc->next;

a=a->next;

} while(b!=p2){

InsertPoly(pc,b->coef,b->exp);

pc=pc->next;

b=b->next;

} return c;}

Seqploy.h: #define

MaxSize 10000 struct ListType{

float *list;

int

size;};void InitPoly1(ListType &p)

//初始化多项式 { p.list=(float*)malloc(MaxSize*sizeof(float));

if(p.list==NULL){

cout

exit(1);

}

p.size=0;for(int i=0;i

p.list[i]=0;} void TraversePoly1(ListType p)

//输出多项式 { int i=0;if(p.list[i]!=0)

cout

for(i=1;i

if(p.list[i]!=0)

break;

cout

if(p.list[i]>0){

cout

cout

}

if(p.list[i]

cout

//清除多项式 { if(p.list!=NULL){

delete []p.list;

p.list=NULL;} p.size=0;} void InsertPoly1(ListType &p, float a, int e)

//插入一项 { p.list[e]=a;if(p.size

p.size=e;} bool DeletetPoly1(ListType &p, float a, int e, int pos)

//删除一项 { int i,n;if(p.size==0){

cout

return false;} if(pos==0)

if(p.list[e]==a)

p.list[e]=0;else if(pos==-1)

p.list[p.size]=0;return true;} double PolySum1(ListType p, float x)

{ double sum=0,item;int i,j;for(i=0;i

item=1;

for(j=1;j

item=item*x;

sum=sum+item*p.list[i];} return sum;} ListType PolyAdd1(ListType p1, ListType p2){ ListType p;InitPoly1(p);float coef;int i,j;for(i=0;i

coef=p1.list[i]+p2.list[i];

InsertPoly1(p, coef, i);}

//多项式求值

//多项式相加

if(i

for(j=i;j

InsertPoly1(p, p1.list[j], j);if(i

for(j=i;j

InsertPoly1(p, p2.list[j], j);return p;}

《实验1 线性表应用多项式计算.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
实验1 线性表应用多项式计算
点击下载文档
相关专题 实验1线性表及其应用 多项式 线性表 实验1线性表及其应用 多项式 线性表
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文