资源描述:
《一元稀疏多项式计算器(大数据结构).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、院系:计算机科学学院专业:软件工程年级:2013级课程名称:数据结构姓名:韦宜(201321092034)指导教师:宋2015年12月15日题目:设计一个一元稀疏多项式简单计算器班级:软件工程1301:韦宜学号:201321092034完成日期:12月15日一、需求分析问题描述:设计一个一元多项式加法器基本要求:输入并建立多项式;(2)两个多项式相加;(3)输出多项式:n,c1,e1,c2,e2,…,en,其中,n是多项式项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列。(4)计算多项式在x处的值;(5)求多项式的导函数。软件环境:Windows,UNIX,Linux等不同平台
2、下的VisualC++6.0硬件环境:512MB存,80Gb硬盘,Pentium4CPU,CRT显示器。概要分析本程序有五个函数:PolyNode*Input()(输入函数);PolyNode*Deri(PolyNode*head)(求导函数);PolyNode*Plus(PolyNode*A,PolyNode*B)(求和函数);voidOutput(PolyNode*head)(输出函数);intmain()(主函数)本程序可使用带有附加头结点的单链表来实现多项式的链表表示,每个链表结点表示多项式的一项,命名为node,它包括两个数据成员:系数coef和指数exp,他们都是公共数据成员,
3、*next为指针域,用链表来表示多项式。适用于不定的多项式,特别是对于项数再运算过程中动态增长的多项式,不存在存储溢出的问题。其次,对于某些零系数项,在执行加法运算后不再是零系数项,这就需要在结果多项式中增添新的项;对于某些非零系数项,在执行加法运算后可能是零系数项,这就需要在结果多项式中删去这些项,利用链表操作,可以简单的修改结点的指针以完成这种插入和删除运算(不像在顺序方式中那样,可能移动大量数据项)运行效率高。详细设计(1)主函数:intmain(){PolyNode*head_a,*head_b;intchoice;head_a=newPolyNode;head_a->next=N
4、ULL;do{system("cls");//清屏函数Output(head_a);cout<<"______________________________";cout<<"
5、---------1.输入公式-----------
6、";cout<<"
7、---------2.求导-----------
8、";cout<<"
9、---------3.两式求和-----------
10、";cout<<"
11、---------4.退出程序-----------
12、";cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";cin>>choice;if(choic
13、e==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<<"输入错误,重新输入:";}while(choice!=5);return0;(2)由于此程序是二人合作完成,我在此程序中主要是完成求和和求导函数的设计。所以下面着重介绍下求和函数和求导函数。PolyNode*Deri(PolyNode*head)(求导函数):流程图如下:
14、NNYstart建立以head1为头指针的空链表,A指向后一接点建立以head2为头指针的空链表,p=head2q=B的第一个接点返回指针head1调用求和函数head1=head1+head2A指向后一接点q指向的接点与A指向的接点相乘,结果保存到head2后面,q指向后一接点A!=NULLq!=NULLYENDPolyNode*Mul(PolyNode*A,PolyNode*B)求导函数部分代码:PolyNode*Deri(PolyNode*head)//求导{PolyNode*p=head;while(p->next!=NULL){if(p->next->exp==0)p->next
15、=NULL;//指数为零返回else{p->next->coef*=p->next->exp;//系数乘以指数p->next->exp--;//指数减一p=p->next;}}returnhead;用于对输入的多项式进行求导,求导在链表进行计算,即运算完成链表的值改变,返回头指针。PolyNode*Plus(PolyNode*A,PolyNode*B)(求和函数):流程图如下:startNYNYNYYNNYNYNY建立链