实验1 线性表应用多项式计算_实验1线性表及其应用
实验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;}