一元稀疏多项式计算器数据结构文档格式.docx

上传人:b****6 文档编号:20639144 上传时间:2023-01-24 格式:DOCX 页数:14 大小:181.36KB
下载 相关 举报
一元稀疏多项式计算器数据结构文档格式.docx_第1页
第1页 / 共14页
一元稀疏多项式计算器数据结构文档格式.docx_第2页
第2页 / 共14页
一元稀疏多项式计算器数据结构文档格式.docx_第3页
第3页 / 共14页
一元稀疏多项式计算器数据结构文档格式.docx_第4页
第4页 / 共14页
一元稀疏多项式计算器数据结构文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

一元稀疏多项式计算器数据结构文档格式.docx

《一元稀疏多项式计算器数据结构文档格式.docx》由会员分享,可在线阅读,更多相关《一元稀疏多项式计算器数据结构文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

一元稀疏多项式计算器数据结构文档格式.docx

输入并建立多项式;

(2)两个多项式相加;

(3)输出多项式:

n,c1,e1,c2,e2,…cn,en,其中,n是多项式项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列。

(4)计算多项式在x处的值;

(5)求多项式的导函数。

软件环境:

Windows,UNIX,Linux等不同平台下的VisualC++6.0

硬件环境:

512MB内存,80Gb硬盘,Pentium4CPU,CRT显示器。

2、

概要分析

本程序有五个函数:

PolyNode*Input()(输入函数);

PolyNode*Deri(PolyNode*head)(求导函数);

PolyNode*Plus(PolyNode*A,PolyNode*B)(求和函数);

voidOutput(PolyNode*head)(输出函数);

intmain()(主函数)

本程序可使用带有附加头结点的单链表来实现多项式的链表表示,每个链表结点表示多项式的一项,命名为node,它包括两个数据成员:

系数coef和指数exp,他们都是公共数据成员,*next为指针域,用链表来表示多项式。

适用于不定的多项式,特别是对于项数再运算过程中动态增长的多项式,不存在存储溢出的问题。

其次,对于某些零系数项,在执行加法运算后不再是零系数项,这就需要在结果多项式中增添新的项;

对于某些非零系数项,在执行加法运算后可能是零系数项,这就需要在结果多项式中删去这些项,利用链表操作,可以简单的修改结点的指针以完成这种插入和删除运算(不像在顺序方式中那样,可能移动大量数据项)运行效率高。

3、

详细设计

(1)主函数:

intmain()

{

PolyNode*head_a,*head_b;

intchoice;

head_a=newPolyNode;

head_a->

next=NULL;

do

{

system("

cls"

);

//清屏函数

Output(head_a);

cout<

<

"

______________________________\n"

;

|---------1.输入公式-----------|\n"

|---------2.求导-----------|\n"

|---------3.两式求和-----------|\n"

|---------4.退出程序-----------|\n"

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"

cin>

>

choice;

if(choice==1)head_a=Input();

elseif(choice==2)head_a=Deri(head_a);

//求导

elseif(choice==3){head_b=Input();

head_a=Plus(head_a,head_b);

}//求和

elseif(choice==4)break;

elsecout<

输入错误,重新输入:

\n"

}

while(choice!

=5);

return0;

(2)由于此程序是二人合作完成,我在此程序中主要是完成求和和求导函数的

设计。

所以下面着重介绍下求和函数和求导函数。

PolyNode*Deri(PolyNode*head)(求导函数):

流程图如下:

求导函数部分代码:

PolyNode*Deri(PolyNode*head)//求导

PolyNode*p=head;

while(p->

next!

=NULL)

if(p->

next->

exp==0)p->

//指数为零返回

else

{

p->

coef*=p->

exp;

//系数乘以指数

exp--;

//指数减一

p=p->

next;

}

returnhead;

用于对输入的多项式进行求导,求导在链表内进行计算,即运算完成链表的值改变,返回头指针。

PolyNode*Plus(PolyNode*A,PolyNode*B)(求和函数):

本函数用于对多项式进行加法计算,需要运用存有两个多项式的头指针,前一头指针可是前一计算的计算结果,也可是调用输入函数,后一头指针是调用输入函数输入的多项式的头接点。

经过计算得到一个新的链表,函数返回链表的头指针。

求和函数部分代码

PolyNode*Plus(PolyNode*A,PolyNode*B)//相加

PolyNode*head,*p;

head=newPolyNode;

p=head;

A=A->

B=B->

while(A!

=NULL||B!

if(A==NULL){p->

next=B;

break;

}//如果A空,把B后面的所有接点接到p之后

if(B==NULL){p->

next=A;

}//如果B空,把A后面的所有接点接到p之后

if(A->

exp==B->

exp)//如果两指数数相等,相加

if(A->

coef+B->

coef!

=0)

{p->

next=newPolyNode;

exp=A->

coef=A->

coef;

}

A=A->

B=B->

continue;

//如果两系数互为倒数,不保存,后指,继续循环

if(A->

exp>

B->

exp)//A的指数大于B的指数

//将A的当前接点接到新链表后面,A后指

exp=B->

coef=B->

//将B的当前接点接到新链表后面,B后指

if(A==NULL&

&

B==NULL)//如果AB都为空

p->

returnhead;

//返回头指针

}

(3)其他函数(同组的成员设计)

#include<

iostream>

process.h>

usingnamespacestd;

typedefstructnode

floatcoef;

//系数

intexp;

//指数

structnode*next;

//指针域指向下一个系数不为0的子项

}PolyNode;

PolyNode*Input()//输入函数

floatc;

//系数域

inte;

//指数域

PolyNode*p,*q,*r,*head;

请输入多项式:

形式:

系数1指数1系数2指数2系数3指数3......00:

//建立头接点

p->

for(;

cin>

c>

e;

if(c==0&

e==0)break;

//结束输入

if(c==0)continue;

//从新输入,不保存

if(head->

next==NULL)//输入第一个接点

coef=c,p->

exp=e;

continue;

}

p=head;

while(p->

=NULL&

e<

=p->

exp)p=p->

//如果输入的指数小于p的下一个接点,p向后指

if(e==p->

exp){p->

coef+=c;

continue;

}//如果相等,直接加上去,继续循环

q=newPolyNode;

q->

coef=c,q->

if(p->

=NULL&

e>

exp)//如果p的后继接点的指数小于输入的指数,插入到p的当前接点之后

r=p->

next=q;

q->

next=r;

//如果输入的值小于所有接点,接在最后一个接点之后

p=p->

p->

输出函数

voidOutput(PolyNode*head)//输出

PolyNode*p;

p=head->

if(p==NULL){cout<

当前没有公式或计算结果为0,请选1输入!

return;

if(p!

cout<

计算结果:

coef<

X~"

p=p->

while(p!

+"

}

endl;

如果想重新输入公式,请选1输入!

\n\n"

4、调试分析与操作说明

(1)当程序运行时,进入主界面。

如图:

此时输入1-4选择操作

(2)输入1后按回车出现:

输入12345600后按回车之后会出现界面:

(3)求导:

输入2求导后按回车会出现结果:

结果正确。

(4)求和:

如果进入图4.3后输入3后按回车会出现界面:

图4.5求和界面

输入22446600后结果会出来:

图4.6求和结果

此系统在得到计算结果后可以直接用计算的结果进行下一步计算,如果不想用当前的结果,也可按“1”重新输入公式进行下一步计算

5、心得体会

经过这学期的学习,我对数据结构了解更深了一点,因为第一次修的时候没有认真的去修,所以没有及格,我很惭愧,所以再一次的修让我觉得我该好好学习这么课程,因为对后面的学习都很有影响。

通过做这次实验,我意识到,自己对C语言的掌握稍微熟练了一些;

在写程序的过程中,遇到一些问题是在所难免的,但我相信只要用心去做,就一定会有收获。

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

当前位置:首页 > 经管营销 > 企业管理

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

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