数据结构上机作业DOC.docx

上传人:b****2 文档编号:57248 上传时间:2022-10-01 格式:DOCX 页数:34 大小:237.54KB
下载 相关 举报
数据结构上机作业DOC.docx_第1页
第1页 / 共34页
数据结构上机作业DOC.docx_第2页
第2页 / 共34页
数据结构上机作业DOC.docx_第3页
第3页 / 共34页
数据结构上机作业DOC.docx_第4页
第4页 / 共34页
数据结构上机作业DOC.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

数据结构上机作业DOC.docx

《数据结构上机作业DOC.docx》由会员分享,可在线阅读,更多相关《数据结构上机作业DOC.docx(34页珍藏版)》请在冰豆网上搜索。

数据结构上机作业DOC.docx

数据结构上机作业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;i

cin>>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;i

cin>>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;i

cin>>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;i

cin>>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;i

p.list[i]=0;

}

voidTraversePoly1(ListTypep)//输出多项式

{

inti=0;

if(p.list[i]!

=0)

cout<

else{

for(i=1;i

if(p.list[i]!

=0)

break;

cout<

}

for(i=i+1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1