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

合集下载

数据结构实习报告——一元稀疏多项式运算器的设计

数据结构实习报告——一元稀疏多项式运算器的设计

数据结构实习报告——一元稀疏多项式运算器的设计一、引言在计算机科学领域中,数据结构是研究数据组织、存储和管理的关键概念之一。

在本次实习中,我设计并实现了一个一元稀疏多项式运算器,旨在使用适当的数据结构和算法来高效地进行多项式的加法、减法和乘法运算。

本报告将详细介绍该运算器的设计思路、算法实现以及性能评估。

二、设计思路1. 多项式的表示在设计多项式运算器时,首先需要确定多项式的表示方法。

为了高效地处理稀疏多项式,我选择使用链表作为基本数据结构。

每个节点包含多项式的系数和指数,并通过指针连接在一起形成链表。

这种表示方法可以有效地处理稀疏多项式,减少了不必要的空间浪费。

2. 多项式的输入和输出为了方便用户输入和输出多项式,我设计了简单的交互界面。

用户可以通过命令行输入多项式的系数和指数,并选择进行的运算操作。

运算结果将直接在命令行中输出。

三、算法实现1. 多项式的加法多项式的加法是指将两个多项式相加得到一个新的多项式。

为了实现这个功能,我设计了一个算法如下:- 创建两个空的链表,分别表示两个多项式。

- 逐个读取用户输入的系数和指数,并将其插入到相应的链表中。

- 对两个链表进行遍历,根据指数的大小关系进行合并操作。

- 将合并后的结果链表输出。

2. 多项式的减法多项式的减法是指将一个多项式减去另一个多项式得到一个新的多项式。

为了实现这个功能,我设计了一个算法如下:- 创建两个空的链表,分别表示两个多项式。

- 逐个读取用户输入的系数和指数,并将其插入到相应的链表中。

- 对第二个链表中的每个节点的系数取相反数。

- 对两个链表进行遍历,根据指数的大小关系进行合并操作。

- 将合并后的结果链表输出。

3. 多项式的乘法多项式的乘法是指将两个多项式相乘得到一个新的多项式。

为了实现这个功能,我设计了一个算法如下:- 创建一个空的链表,表示乘法结果。

- 逐个读取用户输入的系数和指数,并将其插入到链表中。

- 对第一个链表中的每个节点,与第二个链表中的每个节点进行乘法运算,并将结果插入到结果链表中。

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

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

一元稀疏多项式计算器数据结构一元稀疏多项式计算器是一种用于计算多项式的工具,该工具可以用于代数计算、数学分析以及计算机科学中的算法设计。

它可以通过一种特殊的数据结构来存储多项式,并可以对其进行加法、减法、乘法、除法等运算。

这种数据结构被称为稀疏多项式,它是一种基于链表的数据结构。

在稀疏多项式中,每个节点表示一个单项式,节点的数据包含该单项式的系数和指数。

在一个稀疏多项式中,只有少数几个节点表示一个多项式,这就是稀疏性的来源。

稀疏多项式的加法和减法非常简单,只需要对两个多项式的对应节点进行加减即可。

而稀疏多项式的乘法需要更复杂的算法。

乘法的过程中需要将两个多项式的每个单项式乘起来,并将同类项合并成一个新的多项式。

这个过程涉及到大量的链表操作,但只要注意一些细节,将会得到正确的结果。

除了基本的加法、减法、乘法运算,一元稀疏多项式计算器还有一个非常重要的运算,那就是求导。

求导是一种将多项式每个单项式的指数减一,并将系数乘以指数的运算。

它常用于解决微积分、概率论等问题。

求导操作可以通过修改节点的指数和系数来实现。

在计算机科学中,稀疏多项式可以用于设计高效的算法,例如在数论、密码学、图像处理、计算器表达式求值等方面。

稀疏多项式的优点在于它可以有效地节省存储空间和计算时间。

通过动态链表的形式,可以轻松地添加、删除节点,使得稀疏多项式非常适合用于处理大规模的数据。

总的来说,一元稀疏多项式计算器是一种非常实用的工具。

它可以用于解决多项式运算问题,并可以为计算机科学方面的算法设计提供很大的帮助。

通过了解这种数据结构,我们可以更深入地理解代数学、微积分学等数学原理,并且能够更好地应用于实际问题中。

数据结构实习报告——一元稀疏多项式运算器的设计

数据结构实习报告——一元稀疏多项式运算器的设计

数据结构实习报告——一元稀疏多项式运算器的设计一、引言在计算机科学领域中,数据结构是构建各种算法和程序的基础。

本次实习项目旨在设计一个一元稀疏多项式运算器,通过合理的数据结构和算法实现多项式的加法、减法和乘法运算,以及求导和求值等功能。

本文将详细介绍该运算器的设计思路、数据结构选择、算法实现和性能优化等方面。

二、设计思路为了实现一元稀疏多项式的运算,我们需要选择合适的数据结构来存储和操作多项式的系数和指数。

考虑到多项式中只有少数系数非零,我们可以使用链表来表示多项式,每个节点存储一个非零系数和对应的指数。

这样可以节省空间,并且方便插入和删除操作。

三、数据结构选择在设计中,我们选择了一个单向链表作为多项式的数据结构。

链表节点的定义如下:```struct Node {int coefficient; // 系数int exponent; // 指数Node* next; // 下一个节点指针};```链表的头节点指针指向第一个非零项,便于遍历和操作。

四、算法实现1. 多项式的输入用户可以通过标准输入方式输入多项式的系数和指数,我们通过读取用户输入的系数和指数,并根据其大小构建链表。

2. 多项式的加法和减法运算多项式的加法和减法运算可以通过遍历两个多项式的链表,并根据指数的大小进行合并操作。

具体的实现可以使用双指针的方式,分别指向两个链表的当前节点,比较指数的大小,然后将较小的节点插入到结果链表中,并将指针向后移动。

3. 多项式的乘法运算多项式的乘法运算可以通过遍历两个多项式的链表,并将每一项相乘得到新的项,然后将新的项插入到结果链表中。

具体的实现中,可以使用一个嵌套的循环,先遍历一个多项式的链表,再遍历另一个多项式的链表,将每一项相乘,并根据指数的大小插入到结果链表中。

4. 多项式的求导和求值多项式的求导可以通过遍历链表,将每一项的系数乘以指数,并将指数减一得到新的项。

多项式的求值可以通过遍历链表,将每一项的系数乘以变量的值的指数次方,并累加得到结果。

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

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

院系:计算机科学学院专业:软件工程年级: 2013级课程名称:数据结构姓名:韦宜(201321092034)指导教师:宋中山2015年 12 月 15日题目:设计一个一元稀疏多项式简单计算器班级:软件工程1301 姓名:韦宜学号:201321092034 完成日期:12月15日一、需求分析问题描述:设计一个一元多项式加法器基本要求:输入并建立多项式;(2)两个多项式相加;(3)输出多项式:n, c1, e1, c2, e2, …cn , en, 其中,n是多项式项数,ci和ei分别是第 i 项的系数和指数,序列按指数降序排列。

(4)计算多项式在x处的值;(5)求多项式的导函数。

软件环境:Windows,UNIX,Linux等不同平台下的Visual C++ 6.0硬件环境: 512MB内存,80Gb硬盘,Pentium4 CPU,CRT显示器。

概要分析本程序有五个函数:PolyNode *Input()(输入函数);PolyNode *Deri(PolyNode *head)(求导函数);PolyNode * Plus(PolyNode *A,PolyNode *B)(求和函数);void Output(PolyNode*head)(输出函数);int main()(主函数)本程序可使用带有附加头结点的单链表来实现多项式的链表表示,每个链表结点表示多项式的一项,命名为node,它包括两个数据成员:系数coef和指数exp,他们都是公共数据成员,*next为指针域,用链表来表示多项式。

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

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

数据结构C语言实现多项式源代码

数据结构C语言实现多项式源代码

一、一元稀疏多项式计算器#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Status;#define LIST_INIT_SIZE 51 //假设次数不超过50typedef struct{//coef表示系数,expo表示指数。

float coef;int expo;}ElemType;typedef struct LNode{ //结点类型ElemType data;struct LNode *next;}LNode,*LinkList;//记:Link与Position均为指向LNode的指针类型typedef LinkList Polynomail;//在单链表的基础上定义并实现//多项式用链表存储Status CreateList_L(LinkList &L){int n;printf("请输入需创建的多项式的长度:\n");scanf("%d",&n);LNode *CurPtr,*PrePtr;//创建递增链表L=(LinkList) malloc(sizeof(LNode));L->next=NULL;if(!L) exit(OVERFLOW);PrePtr=L;for(int i=1;i<=n;++i){CurPtr=(LNode *)malloc(sizeof(LNode));printf("请输入不同的多项式的非0系数:");scanf("%f",&(CurPtr->data).coef );printf("请输入不同的多项式的指数:");scanf("%d",&(CurPtr->data).expo );CurPtr->next=NULL;PrePtr->next=CurPtr;PrePtr=PrePtr->next;//插入到表头}CurPtr->next =L;//冒泡排序法对多项式按指数由大到小排列。

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

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

1.一元稀疏多项式简单的计算器(实验类型:综合型)1)问题描述:用线性表表示一元稀疏多项式,设计一个一元多项式运算器2)实验要求:✧采用单链表存储结构一元稀疏多项式✧输入并建立多项式✧输出多项式✧实现多项式加、减运算3) 实现提示:以两个多项式相加为例✧结果多项式另存✧扫描两个相加多项式,若都未检测完:⏹若当前被检测项指数相等,系数相加,若结果未变成0,则将结果插入到结果多项式。

⏹若当前被检测项指数不等,则将指数较小者插入到结果多项式。

若有一个多项式已检测完,则将另一个多项式剩余部分直接连接到结果多项式。

4.一元稀疏多项式简单的计算器(实验类型:综合型)#include<stdio.h>#include<stdlib.h>typedef struct{float coef;//系数int expn;//指数} Term;typedef struct ploynomial{Term term;ploynomial* next;} ploynomial,*LinkList;void InitList(LinkList&L){//初始化链表L= (ploynomial*)malloc(sizeof(ploynomial));//头结点L->term.coef=0.0;L->term.expn=-1; L->next=NULL;}int cmp(Term a,Term b){//比较结点的系数大小函数if(a.expn>b.expn) return -1;else if(a.expn==b.expn) return 0; else return 1;}void insertNode(LinkList&L,Term e){//将结点插入多项式链表的适当位置,可以同时起到创建链表和多项式相加的功能ploynomial* q=L;while(q->next!=NULL){if(cmp(q->next->term,e)<0)//如果当前结点q的下一个结点的指数大于要插入的结点的指数q=q->next;//q指向下一个结点else break;//此时,q.term.expn>e.expn>=q->next->term.expn }if(q->next!=NULL&&cmp(q->next->term,e)==0) //指数相同,系数相加{q->next->term.coef+=e.coef;}else{ploynomial* node =(ploynomial*) malloc(sizeof(ploynomial));node->term.coef=e.coef;node->term.expn=e.expn;if(q->next==NULL)node->next=NULL; //如果q结点为尾结点,则node的指针域设为NULLelsenode->next=q->next; //否则node的指针域指向q的下一个结点q->next=node;//将node结点插入链表中}}void CreatPolyn(LinkList&L,int m){//输入m项的系数和指数,建立表示一元多项式的有序链表L Term e;InitList(L);for(int i=1; i<=m; i++){printf("\n第%d项的系数和指数:",i);scanf("%f%d",&e.coef,&e.expn);insertNode(L,e);}}void addPolyn(LinkList&L,LinkList L1,LinkList L2){//用L返回L1+L2的结果ploynomial* q;for(q=L1->next; q!=NULL; q=q->next){insertNode(L,q->term);//将L1的每一项插入到L中}for(q=L2->next; q!=NULL; q=q->next) //将L2的每一项插入到L 中{insertNode(L,q->term);}}void SubtracatPolyn(LinkList&L,LinkList L1,LinkList L2){//用L返回L1-L2的结果ploynomial* q;for(q=L1->next; q!=NULL; q=q->next){insertNode(L,q->term);//将L1的每一项插入到L中}for(q=L2->next; q!=NULL; q=q->next){q->term.coef = -(q->term.coef); //把系数变成相反数,再进行相加操作,即为L1-L2insertNode(L,q->term);//将L2的每一项插入到L中}}void multiplyPolyn(LinkList&L,LinkList L1,LinkList L2) {//用L返回L1*L2的结果ploynomial *p,*q;Term term;term.coef=0.0;term.expn=0;for(q=L1->next; q!=NULL; q=q->next){for(p=L2->next; p!=NULL; p=p->next){term.coef=(q->term.coef)*(p->term.coef);//系数相乘term.expn=(q->term.expn)+(p->term.expn);// 指数想加insertNode(L,term);}}}void derivativePolyn(LinkList&L,LinkList L1){//用L返回L1的导数ploynomial *p;Term term;for(p=L1->next; p!=NULL; p=p->next){if(p->term.expn==0){ continue;//指数为0时,导数为0 ,跳过此次循环}else{ term.coef=(p->term.coef)*(p->term.expn); //系数乘以指数term.expn=(p->term.expn)-1;//指数减一insertNode(L,term);}}}void visitList(LinkList L){//以类数学表达式的形式打印输出一元多项式L,//即指数或者系数为1的情况下省略1ploynomial* q=L;int flag;while(q->next!=NULL){q=q->next;flag=1;if(q->term.coef==0) continue;//系数为0 不输出if(q->term.expn==0&&flag==1) //指数为1{if(q->term.coef>0)printf("+%.2f",q->term.coef);elseprintf("%.2f",q->term.coef);flag=0;}if((q->term.coef==1||q->term.coef==-1)&&flag==1)//系数为1{if(q->term.expn==1){ if(q->term.coef==1)printf("+X"); elseprintf("-X");}else{if(q->term.coef==1)printf("+X^%d",q->term.expn); elseprintf("-X^%d",q->term.expn); } flag=0;}if(flag==1){ if(q->term.coef>0)printf("+%.2fX^%d",q->term.coef,q->term.expn);elseprintf("%.2fX^%d",q->term.coef,q->term.expn);} } printf("\n");}int main(){LinkList L1,L2; int n1,n2;printf("请输入多项式L1的项数:");scanf("%d",&n1);CreatPolyn(L1,n1);printf("请输入多项式L2的项数:");scanf("%d",&n2);CreatPolyn(L2,n2);printf("\n多项式L1:");visitList(L1);printf("\n多项式L2: ");visitList(L2);LinkListadd,sub,multiply,derivative1,derivative2;InitList(ad d);InitList(sub);InitList(multiply);InitList(derivative1);InitList(derivative2);derivativePol yn(derivative1,L1);derivativePolyn(derivative2,L2);printf("\nL1的导数:");visitList(derivative1);printf("\nL2的导数:");visitList(derivative2);addPolyn(add,L1,L2);SubtracatPolyn(sub,L1,L2);multiplyPolyn(multiply ,L1,L2);printf("\nL1 + L2: ");visitList(add);printf("\nL1 - L2: ");visitList(sub);printf("\nL1 * L2: ");visitList(multiply);}实验心得:无。

一元稀疏多项式计算器课程设计

一元稀疏多项式计算器课程设计

软件学院课程设计报告书课程名称数据结构设计题目一元稀疏多项式计算器专业班级软件工程11级1班学号 1120010107姓名指导教师2013 年 1月目录1设计时间 42设计目的 43设计任务 44设计内容 44.1需求分析 44.1.1.程序所能达到的功能 44.1.2.输入的形式和输入值的范围 44.1.3.输出的形式 44.1.4.测试数据 54.2总体设计 54.2.1.本程序中用到的所有抽象数据类型的定义 54.2.2.主程序的流程 74.2.3.各程序模块之间的层次(调用)关系 74.3详细设计 74.3.1实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法 74.3.2.对主程序和其它主要函数伪码算法 114.3.3.函数的调用关系图 124.4测试与分析 124.4.1测试 124.4.2分析 134.5 附录 135 总结与展望 19参考文献 20 成绩评定 204.1.3.输出的形式本程序要输出的是分别把创建的第一个多项式和第二个多项式按指数升序排序,并且把计算加减后的运算结果按指数升序排列输出。

4.1.4.测试数据(1)正确:图1程序输出(2)错误:图2程序输出4.2总体设计4.2.1.本程序中用到的所有抽象数据类型的定义ADT List{初始条件:多项式L已存在。

操作结果:显示多项式。

AddPoly( L_1,L_2,L_add )初始条件:多项式L_1,L_2,L_add已存在。

操作结果:生成L_1,L_2之和的多项式L_add DiffPoly( L ,L_diff)初始条件:多项式L ,L_diff已存在。

操作结果:生成L的导数多项式L_add。

AlterPoly( L )初始条件:多项式L已存在。

操作结果:将L多项式取相反数。

}ADT Poly4.2.2.主程序的流程图3主程序流程4.2.3.各程序模块之间的层次(调用)关系图4模块层次调用关系4.3详细设计4.3.1实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法Typedef Polynomial //定义结构体类型{float coef; //多项式系数int expn; //多项式指数struct Polynomial *next; //多项式的下一个指针域}*Polyn,Polynomial;void Insert( &p,&h) //定义插入函数{if(p.coef==0) //若p的系数是则释放pfree(p);else{q1=h;q2=h->next;while(q2&&q2.expn<p.expn) //找到链表中第一个指数大于p的指数的项{q1=q2;q2=q2.next;}PrintPolyn(pc);pc=SubtractPolyn(pa,pb);printf("\n输出多项式之差a-b="); PrintPolyn(pc);printf("\n 感谢使用此程序!\n"); DestroyPolyn(pa);DestroyPolyn(pb);4.3.3.函数的调用关系图图5函数调用关系4.4测试与分析4.4.1测试输入:a=2X+3X^2; b=2X^3+7X^4输出:a+b=2X+3X^2+ 2X^3+7X^4a-b=2X+3X^2-2X^3-7X^4图6程序输出。

数据结构课程设计___一元稀疏多项式计算器(报告+代码)__完整版.

数据结构课程设计___一元稀疏多项式计算器(报告+代码)__完整版.

数据结构课程设计系别电子信息系专业计算机科学与技术班级学号4090113姓名王健指导教师党群成绩2011年7 月14 日目录一、课程题目 (1)二、需求分析 (1)三、测试数据 (2)四、概要设计 (2)五、调用关系图 (3)六、程序代码 (3)七、心得体会及总结 (12)数据结构课程设计一、课程题目一元稀疏多项式计算器二、需求分析1、一元稀疏多项式简单计算器的功能是:1.1 输入并建立多项式;1.2 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,………cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列;1.3 求多项式a、b的导函数;1.4 计算多项式在x处的值;1.5多项式a和b相加,建立多项式a+b;1.6 多项式a和b相减,建立多项式a-b。

2、设计思路:2.1 定义线性表的动态分配顺序存储结构;2.2 建立多项式存储结构,定义指针*next2.3利用链表实现队列的构造。

每次输入一项的系数和指数,可以输出构造的一元多项式2.4演示程序以用户和计算机的对话方式执行,即在计算机终站上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;最后根据相应的输入数据(滤去输入中的非法字符)建立的多项式以及多项式相加的运行结果在屏幕上显示。

多项式显示的格式为:c1x^e1+c2x^e2+…+cnx^en3、设计思路分析要解决多项式相加,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表,所以我将结点结构体定义为运用尾插法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将单链表polyn p中的结点插入到单链表polyn h中),因此“和多项式”中的结点无须另生成。

为了实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项,由此得到下列运算规则:① 若p->expn<q->expn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

院系:计算机科学学院专业:软件工程
年级: 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等不同平台下的Visual C++
硬件环境: 512MB内存,80Gb硬盘,Pentium4 CPU,CRT显示器。

二、概要分析
本程序有五个函数:
PolyNode *Input()(输入函数);
PolyNode *Deri(PolyNode *head)(求导函数);
PolyNode * Plus(PolyNode *A,PolyNode *B)(求和函数);
void Output(PolyNode*head)(输出函数);
int main()(主函数)
本程序可使用带有附加头结点的单链表来实现多项式的链表表示,每个链表结点表示多项式的一项,命名为node,它包括两个数据成员:系数coef和指数exp,他们都是公共数据成员,*next为指针域,用链表来表示多项式。

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

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

三、详细设计
(1)主函数:
int main()
{
PolyNode *head_a,*head_b;
int choice;
head_a=new PolyNode;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();
else if (choice==2) head_a=Deri(head_a);
....0 0:\n";
head=new PolyNode; //建立头接点
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=new PolyNode;
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=new PolyNode;
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;
}
return head;
}
输出函数
void Output(PolyNode*head) //输出
{
PolyNode*p;
p=head->next;
if(p==NULL) {cout<<"当前没有公式或计算结果为0,请选1输入!!!\n"; return;} if(p!=NULL)
{
cout<<"计算结果:\n";
cout<<p->coef<<"X~"<<p->exp;p=p->next;
}
while(p!=NULL)
{
cout<<"+"<<p->coef<<"X~"<<p->exp;
p=p->next;
}
cout<<endl;
cout<<"如果想重新输入公式,请选1输入!!!\n\n";
}
四、调试分析与操作说明
(1)当程序运行时,进入主界面。

如图:
此时输入1-4选择操作
(2)输入1后按回车出现:
输入1 2 3 4 5 6 0 0后按回车之后会出现界面:(3)求导:输入2求导后按回车会出现结果:
结果正确。

(4)求和:如果进入图后输入3后按回车会出现界面:
图求和界面
输入2 2 4 4 6 6 0 0 后结果会出来:
图求和结果
结果正确。

此系统在得到计算结果后可以直接用计算的结果进行下一步计算,如果不想用当前的结果,也可按“1”重新输入公式进行下一步计算
五、心得体会
经过这学期的学习,我对数据结构了解更深了一点,因为第一次修的时候没有认真的去修,所以没有及格,我很惭愧,所以再一次的修让我觉得我该好好学习这么课程,因为对后面的学习都很有影响。

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

相关文档
最新文档