数据结构上机作业DOC.docx
《数据结构上机作业DOC.docx》由会员分享,可在线阅读,更多相关《数据结构上机作业DOC.docx(34页珍藏版)》请在冰豆网上搜索。
数据结构上机作业DOC
实验一线性表
1、实验题线性表的应用———多项式计算
2、程序设计思路
包括每个函数的功能说明,及一些重要函数的算法实现思路一链式存储:
1.voidInitPoly(LNode*&p)初始化多项式
2.voidTraversePoly(LNode*&p)遍历多项式
3.voidClearPoly(LNode*&p)清除多项式
4.voidInsertPoly(LNode*&p,doublea,inte)插入一项
5.voidDeletetPoly(LNode*&p,intpos)删除一项
6.doublePolySum(LNode*&p,doublex)多项式求值
7.LNode*PolyAdd(LNode*&p1,LNode*&p2)多项式相加
顺序存储:
1.voidInitPoly1(SeqList&L)初始化多项式
2.voidClearPoly1(SeqList&L)清除多项式
3.voidTraversePoly1(SeqListL)遍历多项式
4.boolInsertPoly1(SeqList&L,ElemTypeitem)插入一项
5.doublePolySum1(SeqListL,doublex)多项式求值
6.boolDeleteList1(SeqList&L,intpos)删除一项
7.SeqListPolyAdd1(SeqList&L1,SeqList&L2)多项式相加
三、源程序代码
#include
#include
#include
#include"Linkpoly.h"
#include"Seqpoly.h"
voidmain()
{
cout<<"现在进行第一次测试。
(链表表示)"<doublesum;
inti,e,n,pos;
floata,x;
NodeType*pa,*pb,*pp;
InitPoly(pa);//初始化多项式
InitPoly(pb);
cout<<"请输入要测试的项数:
";
cin>>n;
cout<<"请依次输入要测试的各项的系数和指数:
";
for(i=0;icin>>a;
cin>>e;
InsertPoly(pa,a,e);//插入一项
pa=pa->next;
}
pa=pa->next;
cout<<"该多项式为:
";
TraversePoly(pa);//输出多项式
cout<cout<<"现在进行删除测试,请输入要删除的项的系数和指数以及pos值:
";
cin>>a;
cin>>e;
cin>>pos;
if(DeletetPoly(pa,a,e,pos)){
cout<<"删除成功!
现在多项式为:
";
TraversePoly(pa);
cout<}
else
cout<<"删除失败!
"<cout<<"请输入X的值,进行多项式计算:
";
cin>>x;
sum=PolySum(pa,x);
cout<<"该多项式的值为:
"<cout<<"请输入另一个多项式的项数:
";
cin>>n;
cout<<"请输入该多项式的各项系数和指数:
";
for(i=0;icin>>a;
cin>>e;
InsertPoly(pb,a,e);//插入一项
pb=pb->next;
}
pb=pb->next;
pp=PolyAdd(pa,pb);
cout<<"两多项式相加后得到的多项式为:
";
TraversePoly(pp);
cout<ClearPoly(pa);
ClearPoly(pb);
ClearPoly(pp);
cout<cout<cout<<"现在进行第二次测试。
(顺序表表示)"<ListTypes,t,q;
InitPoly1(s);
InitPoly1(t);
InitPoly1(q);
cout<<"请输入要测试的项数:
";
cin>>n;
cout<<"请依次输入要测试的各项的系数和指数:
";
for(i=0;icin>>a;
cin>>e;
InsertPoly1(s,a,e);
}
cout<<"该多项式为:
";
TraversePoly1(s);
cout<cout<<"现在进行删除测试,请输入要删除的项的系数和指数以及pos值:
";
cin>>a;
cin>>e;
cin>>pos;
if(DeletetPoly1(s,a,e,pos)){
cout<<"删除成功!
现在多项式为:
";
TraversePoly1(s);
cout<}
else
cout<<"删除失败!
"<cout<<"请输入X的值,进行多项式计算:
";
cin>>x;
sum=PolySum1(s,x);
cout<<"该多项式的值为:
"<cout<<"请输入另一个多项式的项数:
";
cin>>n;
cout<<"请输入该多项式的各项系数和指数:
";
for(i=0;icin>>a;
cin>>e;
InsertPoly1(t,a,e);//插入一项
}
q=PolyAdd1(s,t);
cout<<"两多项式相加后得到的多项式为:
";
TraversePoly1(q);
cout<ClearPoly1(s);
ClearPoly1(t);
ClearPoly1(q);
}
Linkploy.h:
structNodeType{
floatcoef;
intexp;
NodeType*next;
};
boolInitPoly(NodeType*&p)//初始化多项式
{
if((p=newNodeType)==NULL)
returnfalse;
p->next=p;
returntrue;
}
voidTraversePoly(NodeType*p)//输出多项式
{
NodeType*h=p->next;
if(h!
=p){
cout<coef<<"*"<<"X"<<"^"<exp;
h=h->next;
}
while(h!
=p){
if(h->coef>0)
cout<<"+";
cout<coef<<"*"<<"X"<<"^"<exp;
h=h->next;
}
}
voidClearPoly(NodeType*&p)//清除多项式
{
NodeType*cp,*np;
cp=p->next;
while(cp!
=p){
np=cp->next;
deletecp;
cp=np;
}
p->next=p;
}
boolInsertPoly(NodeType*&p,floata,inte)//插入一项
{
NodeType*h;
if((h=newNodeType)==NULL)
returnfalse;
h->coef=a;
h->exp=e;
h->next=p->next;
p->next=h;
returntrue;
}
boolDeletetPoly(NodeType*&p,floata,inte,intpos)//删除一项
{
if(pos>1||pos<-1)
returnfalse;
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;
}
}
}
elseif(pos==-1)
while(cp!
=p){
np=cp;
cp=cp->next;
}
np->next=cp->next;
deletecp;
returntrue;
}
doublePolySum(NodeType*p,floatx)//多项式求值
{
inti;
doublesum=0,item;
NodeType*cp=p->next;
while(cp!
=p){
item=1;
for(i=1;i<=cp->exp;i++)
item=item*x;
sum=sum+item*cp->coef;
cp=cp->next;
}
returnsum;
}
NodeType*PolyAdd(NodeType*p1,NodeType*p2)//多项式相加
{
floatcoef;
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;
}
elseif(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;
}
returnc;
}
Seqploy.h:
#defineMaxSize10000
structListType{
float*list;
intsize;
};
voidInitPoly1(ListType&p)//初始化多项式
{
p.list=(float*)malloc(MaxSize*sizeof(float));
if(p.list==NULL){
cout<<"动态可分配的储存空间用完,退出运行!
"<exit
(1);
}
p.size=0;
for(inti=0;ip.list[i]=0;
}
voidTraversePoly1(ListTypep)//输出多项式
{
inti=0;
if(p.list[i]!
=0)
cout<
else{
for(i=1;iif(p.list[i]!
=0)
break;
cout<
}
for(i=i+1