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

上传人:b****8 文档编号:12783813 上传时间:2023-06-08 格式:DOCX 页数:11 大小:76.18KB
下载 相关 举报
一元稀疏多项式计算器数据结构.docx_第1页
第1页 / 共11页
一元稀疏多项式计算器数据结构.docx_第2页
第2页 / 共11页
一元稀疏多项式计算器数据结构.docx_第3页
第3页 / 共11页
一元稀疏多项式计算器数据结构.docx_第4页
第4页 / 共11页
一元稀疏多项式计算器数据结构.docx_第5页
第5页 / 共11页
一元稀疏多项式计算器数据结构.docx_第6页
第6页 / 共11页
一元稀疏多项式计算器数据结构.docx_第7页
第7页 / 共11页
一元稀疏多项式计算器数据结构.docx_第8页
第8页 / 共11页
一元稀疏多项式计算器数据结构.docx_第9页
第9页 / 共11页
一元稀疏多项式计算器数据结构.docx_第10页
第10页 / 共11页
一元稀疏多项式计算器数据结构.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

一元稀疏多项式计算器数据结构

 

中南民族大学

 

学生实验报告

 

院系:

计算机科学学院

专业:

软件工程

年级:

2013级

课程名称:

数据结构

姓名:

韦宜(2034)

指导教师:

宋中山

 

2015年12月15日

 

题目:

设计一个一元稀疏多项式简单计算器

班级:

软件工程1301姓名:

韦宜学号:

2034完成日期:

12月15日

一、需求分析

问题描述:

设计一个一元多项式加法器

基本要求:

输入并建立多项式;

(2)两个多项式相加;

(3)输出多项式:

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

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

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

软件环境:

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

硬件环境:

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

二、

概要分析

本程序有五个函数:

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

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

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

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

intmain()(主函数)

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

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

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

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

三、

详细设计

(1)主函数:

intmain()

{

PolyNode*head_a,*head_b;

intchoice;

head_a=newPolyNode;head_a->next=NULL;

do

{

system("cls");入公式-----------|\n";

cout<<"|---------2.求导-----------|\n";

cout<<"|---------3.两式求和-----------|\n";

cout<<"|---------4.退出程序-----------|\n";

cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";

cin>>choice;

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

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

N

N

Y

start

建立以head1为头指针的空链表,A指向后一接点

建立以head2为头指针的空链表,p=head2

q=B的第一个接点

返回指针head1

调用求和函数

head1=head1+head2

A指向后一接点

q指向的接点与A指向的接点相乘,结果保存到head2后面,q指向后一接点

A!

=NULL

q!

=NULL

Y

END

PolyNode

*Mul(PolyNode*A,

PolyNode*B)

start

N

Y

N

Y

N

Y

Y

N

N

Y

N

Y

N

Y

建立链表head,p=head,两头指针A、B均指向各自的next

A、B为空

A的指数大于B的指数

A、B的系数互为倒数

AB指数相等

B为空

A为空

p->next=NULL

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

A、B均后指

将B接到p后面

合并相同系数相同项,连接到新链表后面

将A接到p后面

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

如果AB都为空

返回头指针

END

PolyNode

*Plus(PolyNode*A,

PolyNode*B)

....00:

\n";

head=newPolyNode;//建立头接点

p=head;p->next=NULL;

for(;;)

{

cin>>c>>e;

if(c==0&&e==0)break;//结束输入

if(c==0)continue;//从新输入,不保存

if(head->next==NULL)//输入第一个接点

{

p->next=newPolyNode;

p=p->next;

p->coef=c,p->exp=e;

p->next=NULL;

continue;

}

p=head;

while(p->next!

=NULL&&e<=p->next->exp)p=p->next;//如果输入的指数小于p的下一个接点,p向后指

if(e==p->exp){p->coef+=c;continue;}//如果相等,直接加上去,继续循环

q=newPolyNode;

q->coef=c,q->exp=e;

if(p->next!

=NULL&&e>p->next->exp)//如果p的后继接点的指数小于输入的指数,插入到p的当前接点之后

{

r=p->next;

p->next=q;

q->next=r;

continue;

}

p->next=q;//如果输入的值小于所有接点,接在最后一个接点之后

p=p->next;p->next=NULL;

}

returnhead;

}

输出函数

voidOutput(PolyNode*head)//输出

{

PolyNode*p;

p=head->next;

if(p==NULL){cout<<"当前没有公式或计算结果为0,请选1输入\n";return;}

if(p!

=NULL)

{

cout<<"计算结果:

\n";

cout<coef<<"X~"<exp;p=p->next;

}

while(p!

=NULL)

{

cout<<"+"<coef<<"X~"<exp;

p=p->next;

}

cout<

cout<<"如果想重新输入公式,请选1输入\n\n";

}

 

四、调试分析与操作说明

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

如图:

此时输入1-4选择操作

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

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

(3)求导:

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

结果正确。

(4)求和:

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

图求和界面

输入22446600后结果会出来:

图求和结果

结果正确。

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

 

五、心得体会

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

通过做这次实验,我意识到,自己对C语言的掌握稍微熟练了一些;在写程序的过程中,遇到一些问题是在所难免的,但我相信只要用心去做,就一定会有收获。

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

当前位置:首页 > 总结汇报 > 实习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2