(整理)一元稀疏多项式计算器

合集下载

一元稀疏多项计算器【加法和减法】

一元稀疏多项计算器【加法和减法】

Data Structure.实习报告【实习一线性表、堆栈和队列的应用】一元稀疏多项式运算器Xiaohui HuangChina University of Geosciences(Wuhan) , Wuhan,Wuhan , Hubei Province , China ;Email : hxh1994@/hxh20111003570@1.问题描述设计一个一元稀疏多项式简单计算器。

要求为:(1)输入并建立两个多项式;(2)多项式a与b相加,建立和多项式c;(3)多项式a与b相减,建立和多项式d;(4)输出多项式a,b,c,d。

输出格式:比如多项式a为:A(x)=c1x e1+ c2x e2+…+ c m x em,其中,c i 和e i分别为第i项的系数和指数,且各项按指数的升幂排列,即0≤e1<e2<…<e m。

2.设计◆设计思想我们知道,一个一元多项式可表示为A(x)=a0+a1x+a2x2+⋯+a n x n 其中,a0、a1、a2、…、a n为多项式的系数,惟一确定了这个多项式,而每一项的指数这隐藏在系数a i的序号中了。

那么我们可以使用线性表(a0、a1、a2、…、a n)来表示。

设A=(a0、a1、a2、…、a n),B=(b0、b1、b2、…、b n),则多项式的加法就相当于A+B=C,其中,C=(c0、c1、c2、…、c n),其中c i=a i+b i。

◆概要设计从设计思想我们可以得知我们这个程序的主要功能是模拟计算器的加法和减法功能。

那么问题就归结于创建两个线性表,通过线性表相对应元素的相加减来模拟计算器的功能。

现在的问题是:我们应该选择什么类型的线性表、我们应该选择线性表的哪一种存储结构。

通过我们所学习的知识可以知道,我们有线性表、堆栈和队列等来可供选择,而经过考虑后,多项式的建立应该使用一种线性结构,故我们选择线性表。

另一方面,我们知道一个多项式并不是每一项的系数是存在的,比如一个只含有两个项的多项式,其中,一个项的指数是1,一个项的指数是1000,如果此时我们采用线性表的顺序存储结构,那么会极大的浪费内存空间。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实验报告——2一元稀疏多项式计算器

实验报告——2一元稀疏多项式计算器
2345、z34、
(3)(1+x+x +x +x +x ) +( -x-x )
(4)(x+x2+x3)+0
(5)(x+x3)-(-x-x-3)
⑹(x+x2+x3)+0
三、实验内容
主要算法设计
typedef struct Node
{
float coef;
int in dex;
struct Node *n ext;
{
LinkList *pc;
int flag=0;
while(flag==0)
{
if(pb->next==NULL)
flag=1;
else
{
pb=pb->next;
pc=(LinkList *)malloc(sizeof(LinkList));
pc->coef=-pb->coef; pc->index=pb->index; pc->next=NULL;
主冃主冃斗冃主
2,1
5,B -3.1,11
项式b的项数;3 7,0-5.8ffl-ltb疏多项式计算器
3
»■快I列歹序序1数2数弓整t(展lt4L2^^bm、」丄-TrJ二上M?E--uMr.选项选项选现岀岀岀4-.冷丄#-W
3
nV为===*
,2,1
,7,
请输更入塾项更蠢製扌吐 亟人第2项更薑癒吋 备入第咗项的系数却1逼△鄴项翌謎I诰倉△第2项更舍魅吐亟人>项 聶入第4项的系数稲
Insert(pc,head);
}
}
return head;
void main()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

c一元稀疏多项式计算器-课程设计实验报告

c一元稀疏多项式计算器-课程设计实验报告

2016-2017学年第二学期学号1608220203 《网络工程》课程设计报告题目:一元稀疏多项式计算器专业:网络工程班级:网络工程(3)班姓名:代应豪指导教师:代美丽成绩:[键入文字] [键入文字] [键入文字]一、问题描述 (3)二、需求分析 (3)三、概要设计 (4)四、详细设计 (5)五、源代码 (6)六、程序测试 (19)七、使用说明 (25)八、课设总结 (26)一、问题描述1.1基本要求(1)输入并建立多项式;(2)输出多项式,输出形式为整数序列:n,c1,e1, c2,e2,,,,,,, cn,en,其中n 是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序;(3)多项式a和b相加,建立多项式a+b;(4)多项式a和b相减,建立多项式a-b;(5)计算多项式在x处的值。

(6)计算器的仿真界面。

1.2设计目的数据结构是实践性很强的课程。

课程设计是加强学生实践能力的一个强有力手段。

课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。

严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用二、需求分析2.1设计开发环境:软件方面:系统windows 7编程软件:VC++ 6.02.2思路分析:①一般情况下的一元n次多项式可写成pn(x)=p1xe1+p2xe2+……+pmxem其中,p1是指数为ei的项的非零系数,且满足0≦e1<e2<……<em=n ,若用一个长度为m且每个元素有两个数据项(系数项和指数项)的线性表((p1,e1),(p2,e2),……,(pm,em))便可惟一确定多项式pn(x)。

②用两个带表头结点的单链表分别存储两个多项式③根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项;④只需要将第二个多项式的系数改为其相反数,然后根据一元多项式相加的运算规则便可以得到其相应的“差多项式”三、概要设计图3-1功能模块图为实现上述程序功能,用带表头结点的单链表存储多项式。

元稀疏多项式计算器实验报告c编写,附源代码(1)

元稀疏多项式计算器实验报告c编写,附源代码(1)

元稀疏多项式计算器实验报告c编写,附源代码(1)实验报告:元稀疏多项式计算器引言:本次实验是运用C语言编写一个元稀疏多项式计算器,该计算器可以实现多项式的加法、减法、乘法、求导、积分、求值等操作。

本次实验旨在通过编写实践,加深对多项式计算的理解和程序设计能力。

一、设计思路及实现方法1.1 多项式的表示方式多项式可以用数组来表示,数组的下标表示多项式的幂次,数组的内容表示该幂次项的系数。

例如多项式:2x^4 + 3x^2 + 5可以表示为数组:{0,0,3,0,2,5}。

1.2 多项式的操作函数及实现方法本次实验实现了以下多项式操作函数:1)add(多项式加法):将两个多项式相加并返回结果多项式。

2)subtract(多项式减法):将两个多项式相减并返回结果多项式。

3)multiply(多项式乘法):将两个多项式相乘并返回结果多项式。

4)differential(求导):求一个多项式的导数并返回结果多项式。

5)integral(积分):对一个多项式进行积分并返回结果多项式。

6)evaluate(求值):给定一个值,计算多项式在该值处的值并返回结果。

以上操作函数的实现方法都是通过循环遍历数组,并运用相应的多项式计算公式来计算。

二、程序设计及实验结果2.1 程序设计本次实验采用C语言编写完成,主函数的框架如下:int main(int argc, char const *argv[]) {// 输入多项式各项系数和幂次// 调用各个多项式计算函数// 输出计算结果return 0;}2.2 实验结果本次实验的实验结果如下:1)将多项式2x^3 + 3x^2 + 5x + 2与多项式3x^3 - 2x^2 + 4相加:输入:2 3 5 2 3 -2 0 4输出:5x^3 + x^2 + 5x + 62)将多项式2x^3 + 3x^2 + 5x + 2与多项式3x^3 - 2x^2 + 4相减:输入:2 3 5 2 3 -2 0 4输出:-1x^3 + 5x^2 + 5x - 23)将多项式2x^3 + 3x^2 + 5x + 2与多项式3x^3 - 2x^2 + 4相乘:输入:2 3 5 2 3 -2 0 4输出:6x^6 + 5x^5 + 4x^4 + 4x^3 + 26x^2 + 14x + 84)求多项式2x^3 + 3x^2 + 5x + 2的导数:输入:2 3 5 2输出:6x^2 + 6x + 55)对多项式2x^3 + 3x^2 + 5x + 2进行积分:输入:2 3 5 2输出:0.5x^4 + 1x^3 + 2.5x^2 + 2x + 06)计算多项式2x^3 + 3x^2 + 5x + 2在x=3处的值:输入:2 3 5 2 3输出:59以上实验结果均能正确输出。

(2023)一元稀疏多项式计算器实验报告c编写,附源代码(一)

(2023)一元稀疏多项式计算器实验报告c编写,附源代码(一)

(2023)一元稀疏多项式计算器实验报告c编写,附源代码(一)实验报告:(2023)一元稀疏多项式计算器实验目的本实验旨在编写一款一元稀疏多项式计算器,实现对两个多项式的加、减、乘、求导、求值等操作。

实验环境•操作系统:Windows 10•开发工具:Visual Studio Code•编程语言:C实验过程1. 首先定义多项式的结构体typedef struct PolyTerm {int coef;// 系数unsigned int power;// 指数struct PolyTerm* next;// 下一项}PolyTerm;typedef struct Poly {int degree;// 多项式最高次项PolyTerm* head;// 首项指针}Poly;2. 实现多项式的输入与输出void inputPoly(Poly* poly);// 输入多项式void outputPoly(Poly* poly);// 输出多项式3. 实现多项式的加、减、乘操作Poly* addPoly(Poly* p1, Poly* p2);// 多项式加法Poly* subPoly(Poly* p1, Poly* p2);// 多项式减法Poly* multPoly(Poly* p1, Poly* p2);// 多项式乘法4. 实现多项式求导void derivative(Poly* poly);// 多项式求导5. 实现多项式求值int evaluate(Poly* poly,int x);// 多项式求值6. 主函数的实现主函数通过简单的菜单方式,实现用户输入选项,选择需要进行的操作。

实验结果通过对多项式加、减、乘、求导、求值等操作的实现,成功完成了一元稀疏多项式计算器的编写,实现了对多项式运算的基本掌握。

实验总结在本次实验中,我们通过C语言实现了一元稀疏多项式计算器,并体验了多项式运算的具体操作。

一元稀疏多项式计算器实现(完整实现版-详细源码)

一元稀疏多项式计算器实现(完整实现版-详细源码)

1.5一元稀疏多项式计算器实习报告一、需求分析1.输入并建立多项式;2.输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,……,c n,e n,其中n是多项式的项数,c i和e i分别是第i项的系数和指数,序列按指数降序排列;3.多项式a和b相加,建立多项式a+b;4.多项式a和b相减,建立多项式a—b;5.多项式a和b相乘,建立多项式a×b;6.计算多项式在x处的值;7.求多项式P的导函数P';8.多项式的输出形式为类数学表达式;9.做出计算器的仿真界面;10.测试数据:(1) (2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7)(2) (6x^-3-x+4.4x^2-1.2x^9+1.2x^9)-(-6x^-3+5.4x^2-x^2+7.8x^15 ) =(-7.8x^15-1.2x^9+12x^-3-x);(3)(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5);(4)(x+x^3)+(-x-x^3)=0(5)(x+x^100)+(x^100+x^200)=(x+2x^100+x^200)(6)(x+x^2+x^3)+0=x+x^2+x^3(7)互换上述测试数据中的前后两个多项式二、概要设计1.链表的抽象数据类型定义为:ADT LinkList{数据对象:D={ ai | ai∈ElemSet, i=1,2,...,n, n≥0 }数据关系:R1={ <ai-1, ai>|ai-1, ai∈D, i=2,...,n }基本操作:InitList(&L)操作结果:构造一个空的线性表L。

DestroyList(&L)初始条件:线性表L已存在。

操作结果:销毁线性表L。

ClearList(*L)初始条件:线性表L已存在。

操作结果:将线性表L重置为空表。

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

云南大学软件学院数据结构实验报告(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □学期:2012秋季学期任课教师:实验题目: 一元稀疏多项式计算器小组长:联系电话:电子邮件:完成提交时间:2012 年 11 月 10 日云南大学软件学院2012学年秋季学期《数据结构实验》成绩考核表学号: 20111120 姓名:本人承担角色:算法设计整体流程控制综合得分:(满分100分)指导教师:年月日云南大学软件学院2010学年秋季学期《数据结构实验》成绩考核表学号: 20111120 姓名:本人承担角色:函数实现整体流程控制综合得分:(满分100分)指导教师:年月日(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。

难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%)多项式计算器的呈现方式是用控制台程序呈现,;多项式的加减乘以及求导的函数中利用链表保存头结点以及循环结构保存和输出数据;还有利用一个简单的降序排列的函数,在输出时更加明了。

二、【实验设计(Design)】(20%)在头文件中申明变量,源文件中创建指数和系数的指针的头结点,并为此申请空间。

首先考虑指数为0,1和系数为0,1时的特殊情况的表示;然后利用SORT函数对输出时进行降序排列;其次就是加减乘以及求导函数的实现;最后是一个输出界面的设计。

三、【实现描述(Implement)】(30%)//--------函数原型说明--------typedef struct Node{double xishu;int zhishu;//数据域//int data;struct Node* pnext;//指针域}Node,*pNode;pNode phead=(pNode)malloc(sizeof(Node));//创建头节点pNode creat_list(void);创建链表void traverse_list(pNode phead);//遍历链表pNode sort(pNode phead);//对链表进行降序排列pNode add(pNode phead1,pNode phead2);//两个多项式相加pNode hebing(pNode phead)//合并同类项pNode multi(pNode phead1,pNode phead2);//多项式相乘pNode sub(pNode phead1,pNode phead2);//多项式相减//多项式求导没有声明和定义函数,而是直接卸载程序里了//------关键操作的实现-------1.对链表的声明和定义和对创建函数的定义。

#include"stdafx.h"#include"cpxNum.h"typedef struct Node{double xishu;int zhishu;//数据域//int data;struct Node* pnext;//指针域}Node,*pNode;pNode creat_list(void){int len;int i;//int val;int zhishu;double xishu;pNode phead=(pNode)malloc(sizeof(Node));//分配了一个不存在有效数据的头结点pNode ptail=phead;ptail->pnext=NULL;if(phead==NULL){cout<<"分配失败<<endl;exit(-1);}cout<<"请输入想输入多项式的项数"<<endl;cin>>len;for(i=0;i<len;i++){cout<<"请?输º?入¨?第̨²"<<i+1<<"个?项?的Ì?系¦Ì数ºy的Ì?值¦Ì"<<endl;cin>>xishu;cout<<"请?输º?入¨?第̨²"<<i+1<<"个?项?的Ì?指?数ºy的Ì?值¦Ì"<<endl;cin>>zhishu;pNode pnew=(pNode)malloc(sizeof(Node));if(pnew==NULL){cout<<"分¤?配?失º¡ì败㨹"<<endl;exit(-1);}pnew->xishu=xishu;pnew->zhishu=zhishu;ptail->pnext=pnew;pnew->pnext=NULL;ptail=pnew;}phead->zhishu=len;return phead;}2.对多项式遍历,排序,同类项合并的定义1.多项式的遍历//将多项式分为第一项和其余项两部分考虑,另外考虑指数=0,指数=1,系数=1,系数=0等情况。

void traverse_list(pNode phead){pNode p=phead->pnext;if(p->zhishu==0)cout<<p->xishu;else{if(p->zhishu==1)cout<<"("<<p->xishu<<")"<<"x";else{if(p->xishu==1)cout<<"x"<<"^"<<p->zhishu;else{if(p->xishu==0)cout<<"0";elsecout<<"("<<p->xishu<<")"<<"x"<<"^"<<p->zhishu;}}}p=p->pnext;while(p){ if(p->zhishu==0)cout<<"+"<<p->xishu;else{if(p->zhishu==1)cout<<"x+"<<"("<<p->xishu<<")";else{if(p->xishu==1)cout<<"+"<<"x"<<"^"<<p->zhishu;else{if(p->xishu==0)cout<<"+0";elsecout<<"+"<<"("<<p->xishu<<")"<<"x"<<"^"<<p->zhishu;}}}p=p->pnext;}cout<<endl;return;}2.排序操作。

//通过冒泡排序对多项式进行降序排列。

pNode sort(pNode phead){int i,j;float xishu;int zhishu;pNode p,q,f;f=phead;int len=phead->zhishu;for(i=0,p=phead->pnext;i<len-1;i++,p=p->pnext){for(j=i+1,q=p->pnext;j<len;j++,q=q->pnext){if(p->zhishu<q->zhishu){xishu=p->xishu;zhishu=p->zhishu ;p->xishu=q->xishu;p->zhishu=q->zhishu;q->xishu=xishu;q->zhishu=zhishu;}}}return f;}3.合并排序//通过检查将同类型合并,在加法,减法和乘法函数中会用到pNode hebing(pNode phead){pNode r,q,p,Q;for(q=phead->pnext;q!=NULL;q=q->pnext)//合?并¡é同ª?类¤¨¤项?for(p=q->pnext,r=q;p!=NULL;)if(q->zhishu==p->zhishu)//指?数ºy相¨¤等̨¨ 系¦Ì数ºy相¨¤加¨®{q->xishu=q->xishu+p->xishu;r->pnext=p->pnext;Q=p;p=p->pnext;delete Q;//释º¨ª放¤?p}else{r=r->pnext;p=p->pnext;}return phead;}3.多项式的加,减,乘,求导,x代入值的实现1.多项式的加法//创建一个新链表存储新的多项式,开始对phead1和phead2进行扫描,指数相同就相加。

pNode add(pNode phead1,pNode phead2){pNode p1,p2,pTail,pnew;pNode phead3=(pNode)malloc(sizeof(Node));pTail=phead3;pTail->pnext=NULL;sort(phead1);sort(phead2);p1=phead1->pnext;p2=phead2->pnext;int i=0;while(p1&&p2){if(p1->zhishu>=p2->zhishu){if(p1->zhishu==p2->zhishu){pnew=new Node;pnew->xishu=p1->xishu+p2->xishu;pnew ->zhishu=p1->zhishu;pTail->pnext=pnew;pnew->pnext=NULL;pTail=pnew;p1=p1->pnext;p2=p2->pnext;}else{pnew=new Node;pnew->xishu=p1->xishu;pnew ->zhishu=p1->zhishu;pTail->pnext=pnew;pnew->pnext=NULL;pTail=pnew;p1=p1->pnext;}}else{pnew=new Node;pnew->xishu=p2->xishu;pnew ->zhishu=p2->zhishu;pTail->pnext=pnew;pnew->pnext=NULL;pTail=pnew;p2=p2->pnext;}}if(p1==NULL){pTail->pnext=p2;}if(p2==NULL)pTail->pnext=p1;return phead3;}2.多项式的减法//道理与多项式加法相同,但是指数相同时,系数相减。

相关文档
最新文档