2.4一元多项式的相加

合集下载

2020年清华-伯克利深圳学院962数学-数据方向基础综合考试大纲——盛世清北

2020年清华-伯克利深圳学院962数学-数据方向基础综合考试大纲——盛世清北

2020年清华-伯克利深圳学院962数学-数据方向基础综合考试大纲——盛世清北本文由盛世清北查阅整理,专注清华大学考研信息,为备考清华大学考研学子服务。

以下为2020年清华大学深圳国际研究生院962 《数学-数据方向基础综合》考研考试大纲:962 《数学-数据方向基础综合》考试内容:1.1什么是数据结构1.2基本概念和术语1.3抽象数据类型的表示与实现1.4算法和算法分析1.4.1算法1.4.2算法设计的要求1.4.3算法效率的度量1.4.4算法的存储空间需求2 线性表2.1线性表的类型定义2.2线性表的顺序表示和实现2.3线性表的链式表示和实现2.3.1线性链表2.3.2循环链表2.3.3双向链表2.4一元多项式的表示及相加3栈和队列3.1栈3.1.1抽象数据类型栈的定义3.1.2栈的表示和实现3.2栈的应用举例3.2.1数制转换3.2.2括号匹配的检验3.2.3行编辑程序3.2.4迷宫求解3.2.5表达式求值3.3栈与递归的实现3.4队列3.4.1抽象数据类型队列的定义3.4.2链队列——队列的链式表示和实现3.4.3循环队列——队列的顺序表示和实现3.5离散事件模拟4 串4.1串类型的定义4.2串的表示和实现4.2.1定长顺序存储表示4.2.2堆分配存储表示4.2.3串的块链存储表示4.3串的模式匹配算法4.3.1求子串位置的定位函数Index(S,T,pos)4.3.2模式匹配的一种改进算法4.4串操作应用举例4.4.1文本编辑4.4.2建立词索引表5 数组和广义表5.1数组的定义5.2数组的顺序表示和实现5.3矩阵的压缩存储5.3.1特殊矩阵5.3.2稀疏矩阵5.4广义表的定义5.5广义表的存储结构5.6m元多项式的表示5.7广义表的递归算法5.7.1求广义表的深度5.7.2复制广义表5.7.3建立广义表的存储结构6 树和二叉树6.1树的定义和基本术语6.2二叉树6.2.1二叉树的定义6.2.2二叉树的性质6.2.3二叉树的存储结构6.3遍历二叉树和线索二叉树6.3.1遍历二叉树6.3.2线索二叉树6.4树和森林6.4.1树的存储结构6.4.2森林与二叉树的转换6.4.3树和森林的遍历6.5树与等价问题6.6赫夫曼树及其应用6.6.1最优二叉树(赫夫曼树)6.6.2赫夫曼编码6.7回溯法与树的遍历6.8树的计数7 图7.1图的定义和术语7.2图的存储结构7.2.1数组表示法7.2.2邻接表7.2.3十字链表7.2.4邻接多重表7.3图的遍历7.3.1深度优先搜索7.3.2广度优先搜索7.4图的连通性问题7.4.1无向图的连通分量和生成树7.4.2有向图的强连通分量7.4.3最小生成树7.4.4关节点和重连通分量7.5有向无环图及其应用7.5.1拓扑排序7.5.2关键路径7.6最短路径7.6.1从某个源点到其余各顶点的最短路径7.6.2每一对顶点之间的最短路径8 动态存储管理8.1概述8.2可利用空间表及分配方法8.3边界标识法8.3.1可利用空间表的结构8.3.2分配算法8.3.3回收算法8.4伙伴系统8.4.1可利用空间表的结构8.4.2分配算法8.4.3回收算法8.5无用单元收集8.6存储紧缩9 查找9.1静态查找表9.1.1顺序表的查找9.1.2有序表的查找9.1.3静态树表的查找9.1.4索引顺序表的查找9.2动态查找表9.2.1二叉排序树和平衡二叉树9.2.2B树和B+树9.2.3键树9.3哈希表9.3.1什么是哈希表9.3.2哈希函数的构造方法9.3.3处理冲突的方法9.3.4哈希表的查找及其分析10 内部排序10.1概述10.2插入排序10.2.1直接插入排序10.2.2其他插入排序10.2.3希尔排序10.3快速排序10.4选择排序10.4.1简单选择排序10.4.2树形选择排序10.4.3堆排序10.5归并排序10.6基数排序10.6.1多关键字的排序10.6.2链式基数排序10.7各种内部排序方法的比较讨论11 外部排序11.1外存信息的存取11.2外部排序的方法11.3多路平衡归并的实现11.4置换一选择排序11.5最佳归并树12 文件12.1有关文件的基本概念12.2顺序文件12.3索引文件12.4ISAM文件和VSAM文件12.4.1ISAM文件12.4.2VSAM文件12.5直接存取文件(散列文件)12.6多关键字文件12.6.1多重表文件12.6.2倒排文件备考清华,需要完整的资料,需要坚定的信念,更需要完善的复习策略,把书本从薄读到厚,再从厚读到薄,最后通过目录,就能就能把所有知识脉络延展,相互关联起来,检查是否有知识盲区,这中间是一个艰难的过程,需要有足够的耐力和毅力,一路有盛世清北陪伴你,你的备考不会孤单!。

一元多项式的定义和运算讲解

一元多项式的定义和运算讲解
定理 2.4.1
令f (x)是F [x]的一个次数大于零的多项式,并且
此处
定理 2.4.2
例 在有理数域上分解多项式 为不可约因式的乘积.容易看出
(2)
一次因式x + 1自然在有理数域上不可约.我们证明, 二次因式 也在有理数域上不可约.不然的话, 将能写成有理数域上两个次数小于2的因式 的乘积,因此将能写成
这个定义的条件也可以用另一种形式来叙述
若多项式 有一个非平凡因式 而 ,那么 与 的次数显然都小于 的次数.反之,若 能写成两个这样的多项式的乘积,那么 有非平凡因式.因此我们可以说:
这里
多项式的减法
2.1.5 多项式加法和乘法的运算规则
(1)加法交换律:
(2)加法结合律:
(3)乘法交换律:
(4)乘法结合律:
(5)乘法对加法的分配律:
注意:
要把一个多项式按“降幂”书写

时,
叫做多项式的首项.
2.1.6 多项式的运算性质
定理
是数环R上两个多项式,并且
定义 2
设 是多项式 与 的一个公因式.若是 能被 与 的每一个公因式整除,那么 叫做 与 的一个最大公因式.
定义 1
的任意两个多项式 与 一定有最大公因式.除一个零次因式外, 与 的最大公因式是唯一确定的,这就是说,若 是 与 的一个最大公因式,那么数域F的任何一个不为零的数 c与 的乘积 ,而且当 与 不全为零多项式时,只有这样的乘积是 与 的最大公因式.
由此得出,


的最大公因式,而
定理 2.3.3
的两个多项式 与 互素的充分且必要条 件是:在 中可以求得多项式 与 ,使

一元多项式的相加实验报告

一元多项式的相加实验报告

一元多项式的相加实验报告一元多项式的相加实验报告引言:一元多项式是数学中常见的概念,它由一个变量和一系列常数乘积的和组成。

在本实验中,我们将研究一元多项式的相加运算,并通过实验验证相加运算的性质和规律。

实验目的:1. 了解一元多项式的基本概念和相加运算规则;2. 掌握使用编程语言进行一元多项式相加的方法;3. 验证一元多项式相加的性质和规律。

实验过程:1. 准备工作:a. 确定一元多项式的表示方式:我们选择使用数组来表示一元多项式,数组的每个元素表示多项式中对应项的系数;b. 确定一元多项式的相加规则:将相同次数的项的系数相加得到新的多项式的对应项的系数;c. 编写程序:使用编程语言编写一段代码,实现一元多项式的相加运算。

2. 实验步骤:a. 输入两个一元多项式的系数:通过程序提示用户输入两个一元多项式的系数,以数组的形式保存;b. 进行相加运算:将两个一元多项式的对应项系数相加,得到新的一元多项式的系数;c. 输出相加结果:将相加得到的新的一元多项式的系数输出,以验证相加运算的正确性。

实验结果:我们进行了多次实验,以下是其中一次实验的结果:假设输入的两个一元多项式分别为:P(x) = 2x^3 + 4x^2 + 3x + 1Q(x) = 5x^2 + 2x + 6根据相加规则,我们将对应项系数相加,得到新的一元多项式的系数:R(x) = 2x^3 + (4+5)x^2 + (3+2)x + (1+6)= 2x^3 + 9x^2 + 5x + 7因此,相加运算的结果为:P(x) + Q(x) = 2x^3 + 9x^2 + 5x + 7实验结论:通过多次实验,我们验证了一元多项式的相加运算的正确性。

根据实验结果,我们可以得出以下结论:1. 一元多项式的相加运算是可行的,可以通过将相同次数的项的系数相加得到新的多项式的对应项的系数;2. 一元多项式的相加结果仍然是一元多项式,其次数和各项的系数均可能发生变化;3. 一元多项式的相加运算满足交换律和结合律。

一元多项式的求和

一元多项式的求和

一元多项式的求和一元多项式的求和是数学中常见的问题,它涉及到对一元多项式中的各项进行求和运算,是代数学中的重要概念之一。

本文将介绍一元多项式的求和的基本概念、方法和应用。

一元多项式是指仅含有一个未知数的多项式,它由若干个单项式相加或相减而成。

每个单项式由系数和次数两部分组成,其中系数可以是实数、复数或其他数域中的元素,次数为非负整数。

一元多项式的一般形式可以表示为:P(x) = a_nx^n + a_{n-1}x^{n-1} + ... + a_1x + a_0其中,P(x)表示一元多项式,a_n, a_{n-1}, ..., a_1, a_0为系数,x为未知数,n为最高次数。

一元多项式的求和即是对多项式中各项的系数进行求和运算。

具体来说,就是将各项的系数相加得到一个结果。

例如,对于一元多项式:P(x) = 2x^3 - 5x^2 + 3x - 1我们可以将其系数相加得到求和结果为:2 + (-5) +3 + (-1) = -1这就是该一元多项式的求和结果。

对于一元多项式的求和,可以应用代数学中的求和公式或方法进行计算。

常见的求和方法包括直接相加法、分组求和法和利用求和公式法。

直接相加法是最简单直观的求和方法,即将各项的系数直接相加。

这种方法适用于项数较少或系数较简单的一元多项式。

例如,对于一元多项式:P(x) = 2x^3 - 5x^2 + 3x - 1我们可以直接相加得到求和结果为:2 + (-5) +3 + (-1) = -1分组求和法是将一元多项式中的各项按照次数进行分组,然后对每组的系数进行求和。

这种方法适用于项数较多或系数较复杂的一元多项式。

例如,对于一元多项式:P(x) = 2x^3 - 5x^2 + 3x - 1我们可以按次数分组得到:2x^3 + (-5x^2) + 3x + (-1)然后对每组的系数进行求和,得到求和结果为:2 + (-5) +3 + (-1) = -1利用求和公式法是根据一元多项式的特点,利用求和公式进行计算。

一元多项式相加问题实验报告

一元多项式相加问题实验报告

一元多项式相加问题实验报告一元多项式相加问题一、问题描述通过键盘输入两个形如P 0 +P 1 X 1 +P 2 X 2 +…+P n X 的多项式,经过程序运后在屏幕上输出它们的相加和。

二、数据结构设计一个一元多项式的每一个子项都由“系数-指数”两部分组成,因此可将其抽象为包含系数coef、指数exp、指针域next 构成的链式线性表。

将两个多项式分别存放在两个线性表中,然后经过相加后将所得多项式存放在一个新的线性表中,但是不用再开辟新的存储空间,只依靠结点的移动来构成新的线性表,期间可以将某些不需要的空间回收。

基于这样的分析,可以采用不带头结点的单链表来表示一个一元多项式。

具体数据类型定义为:struct node {float coef;//系数域int exp;//指数域struct node *next; }; 三、功能函数设计1、输入多项式的系数和指数初始化多项式的功能模块具体函数为node *in_fun() 此函数的处理较为全面,要求用户按照指数递增的顺序和一定的输入格式输入各个系数不为0 的子项,输入一个子项建立一个相关结点,当遇到输入结束标志时停止输入。

关键步骤具体如下:⑴控制用户按照指数递增的顺序输入r=a; while(r!=q-next){if(y=r-exp){cout“请按照指数递增顺序输入,请重新输入“;cinxy;break;}r=r-next;} 从头开始遍历,若遇到目前输入的指数不是最大时,就跳出循环,让用户重新输入。

⑵当输入的系数为零时,不为其分配存储空间存储while(x==0) { cinxy; continue;} 即若系数为0,不再进行动态分配并新建结点,而是重新提取用户输入的下一个子项的系数和指数,利用continue 进入下一次循环。

⑶初始化完成后将最后一个结点的指针域置为空,并返回该新建链表的首地址。

if(q!=NULL)q-next=NULL;return a; ⑷动态分配空间新建结点存储系数和指数的代码如下:p=new node;p-coef=x;p-exp=y;if(a==NULL) a=p;else q-next=p;q=p; 2、多项式显示功能函数由于系数有正有负,故采取如下处理:对于正数,输出时在前面加“+”,头指针除外;对于负数,直接将系数输出即可,即:p=a;while(p){if(p==a)coutp-coef"*x^"p-else if(p-coef0)coutp-coef"*x^"p-else if(p-coef0)cout"+"p-coef"*x^"p-p=p-next;} 输出的多项式的形式形如:P 1 X^1+P 2 X^2+…+P n X^n 3、多项式相加的功能函数函数为:node *plus_fun(node *a,node *b) 此函数根据在 1 中初始化的两个多项式进行相加运算,并存放在以c 为头指针的一个新链表中。

线性表

线性表

举例:
La=(34,89,765,12,90,-34,22) 数据元素类型为int。 Ls=(Hello,World, China, Welcome) 数据元素类型为 string。 Lb=(book1,book2,...,book100) 数据元素类型为下列所示的结 构类型: struct bookinfo { int No; //图书编号 char *name; //图书名称 char *auther; //作者名称 ...; };
素的方法被称为随机存取法,使用这种存取方法的存储结构被
称为随机存储结构。
在C语言中,实现线性表的顺序存储结构的类型定义
typedef int ElemType; //定义顺序表中元素的类型 #define INITSIZE 100 //顺序表存储空间初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 typedef struct { ElemType *data; int length; //存储空间的基地址 //线性表的当前长度
说明:
1. 某数据结构上的基本运算,不是它的全部运算,而是一些 常用的基本的运算,而每一个基本运算在实现时也可能根据不 同的存储结构派生出一系列相关的运算来, 没有必要全部定义 出它的运算集。掌握了某一数据结构上的基本运算后,其它的 运算可以通过基本运算来实现,也可以直接去实现。 2. 在上面各操作中定义的线性表L仅仅是一个抽象在逻辑结 构层次的线性表,尚未涉及到它的存储结构,因此每个操作在 逻辑结构层次上尚不能用具体的某种程序语言写出具体的算法, 而算法的实现只有在存储结构确立之后。
4. 求顺序表的长度 int getlen(sqlist L) { return (L.length); } 5. 判断顺序表是否为空 int listempty(sqlist L) { if (L.length==0) return 1; else return 0; }

线性表——一元多项式的求和

线性表——一元多项式的求和

线性表——⼀元多项式的求和♥注:未经博主同意,不得转载。

多项式的表⽰与求和是线性表应⽤的典型案列。

在数学上,⼀元多项式P(x)的表⽰为:P(x)=a0+a1x+a2x2+…+anxn其中,n为⼤于或等于0的整数,表⽰x的幂:a o,a1,…a n为系数,a n≠0,a0,a1,…,a n-1可以为0,也可以不为0。

⼀元多项式的表⽰ 为了表⽰⼀元多项式,可以将其所有项的系数⽤⼀个线性表来表⽰:(a0,a1,…,a n)。

这个线性表可以使⽤顺序存储结构或链式存储结构来存储,从⽽进⾏多项式的有关运算。

若采⽤顺序存储结构,可使⽤⼀个⼀维数组存储这个线性表,即多项式的系数,⽽相应的幂则使⽤数组下标来表⽰。

⼀元多项式的顺序存储结构如下:1 typedef int DataType;2const int MaxPolySize=100;34class Polyn5 {6private:7 DateType data[MaxPolySize];8int size; //元素的个数910public:11 Polyn(){size = 0;} //构造⼀个空多项式12 ~Polyn();1314void Clear(){size=0;} //清空15 Polyn sum(Polyn a); //多项式相加16 Polyn sub(Polyn a); //多项式相减17 }; 但多项式的顺序存储有⼀个缺点:当存储形如P(x)=1+10x99的多项式时,由于a1到a98均为0,所以⽤来存储⼀元多项式的⼀维数组中的绝⼤部分单元存储的值都是0,导致存储效率低下,造成存储空间的浪费。

因此,⼀般采⽤链式存储结构来描述⼀元多项式。

⼀元多项式的链式存储必须显式地表达系数值和幂值,这是由于链式存储打破了顺序存储中原有的幂与数组下标间的⼀⼀对应关系,⼀元多项式的项的结点结构表⽰如图所⽰。

⼀元多项式的链式存储结构表⽰如下:12struct term3 {4double coef; //系数5int expn; //指数6 };7struct PNode8 {9 term data;10 PNode *next;11 };12class Ployn13 {14 PNode *phead;15public:16 Polyn()17 { //构造函数18 phead =new PNoed;19if(phead= =NULL)20 exit(0);21 phead->next=NULL;22 }23 ~Polyn(); //析构函数2425void PolynAdd(Ployn Pa,Ployn Pb); //两个多项式相加26void Print(); //打印多项式27void Create(); //建⽴多项式28 };29⼀元多项式的求和 本节以多项式的加法为例,讲述⼀元多项式操作的实现。

高等代数课件 第二章

高等代数课件 第二章

三、 多项式的带余除法定理
定理 设f x, gx F[x] ,且 gx 0,则存在
qx, rxF[x], 使得
f x gxqx rx
这里 rx 0,或者 0 rx 0 gx. 并且满足上述条件的 qx和r(x) 只有一对。
注1: qx, rx分别称为 gx除f (x)所得的商式和
余式
注2: gx 0, gx| f x rx 0.
使以下等式成立:
f xux gxvx dx
三、多项式的互素
1. 互素的定义
定义 3 如果 Fx 的两个多项式除零次多项式外
不再有其它的公因式,我们就说,这两个多项式互素.
2. 互素的性质
(1)定理 2.3.3 Fx的两个多项式 f x与gx 互素
的充分且必要条件是:在 Fx中可以求得多项式 ux
二.教学目的 1.掌握最大公因式,互素概念. 2.熟练掌握辗转相除法 3.会应用互素的性质证明整除问题
三.重点,难点 辗转相除法求最大公因式. 证明整除问题
一、最大公因式的定义
定义 1 令 f x和 gx是F [x]的两个多项式,若 是F [x]的一个多项式hx 同时整除 f x和gx ,那么 hx 叫做 f x与gx的一个公因式.
f1x, f2 x,, fk x,及 q1x, q2 x,, qk x,
使得
fk1x fk x qk1xgx

0 f x 0 f1x 0 gx
由于多项式 f1x, f2x,的次数是递降的, 故存在k使
fk x 0或0 fk x 0gx ,于是
qx q1x qk x及rx fk x
系数所在范围对整除性的影响
二、教学目的
1.掌握一元多项式整除的概念及其性质。 2.熟练运用带余除法。

线性表的顺序存储结构

线性表的顺序存储结构
E is =

n +1 i =1
p i ( n i + 1)
1 不失一般性,若在线性表的任何位置插入元素都是等概率的,即 p i = 不失一般性,若在线性表的任何位置插入元素都是等概率的, , n + 1 上式可化简为: 上式可化简为: 1 n+1 n
Eis =
∑(n i +1) = 2 n +1
第二章 线性表
2.1 线性表的类型定义 2.2 线性表的顺序表示和实现
2.3 线性表的链式表示和实现
2.4 一元多项式的表示及相加
2.2 线性表的顺序表示和实现 线性表的顺序表示指的 是用一组地址连续的存储单 元依次存储线性表的数据元 素.
£2.2 线性表的顺序存储结构
(1)线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性 ) 表的数据元素.如下图2.1所示 所示: 表的数据元素.如下图 所示: 存储地址 b b+l … b+(i-1)l … b+(n-1)l b+nl … b+(maxlen-1)l 内存状态 a1 a2 … ai … an 空闲 数据元素在线性表中的位序 1 2 … i … n
// 为顺序表分配大小为 maxsize 的数组空间
if (!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = maxsize; return OK; 算法时间复杂度 O(1) 时间复杂度: 时间复杂度 } // InitList_Sq
(4)线性表的插入和删除运算 ) 序号 数据元素 1 2 3 4 5 6 7 8 12 13 21 24 28 30 42 77 (a) 序号 数据元素 1 2 3 4 5 6 7 8 9 12 13 21 24 25 28 30 42 77 (b) 序号 数据元素 1 2 3 4 5 6 7 8 12 13 21 24 28 30 42 77 (a) 序号 数据元素 1 2 3 4 5 6 7 12 13 21 28 30 42 77

数据结构_一元多项式的表示与相加

数据结构_一元多项式的表示与相加

实验一一元多项式的表示与相加实验目的:1.复习并熟练掌握数据结构所使用的程序设计语言——C语言;2.学会单步跟踪、调试自己的程序;3.加深对线性表特别是链表知识的理解和掌握,并能够运用相关知识来解决相关的具体问题,如一元多项式相加等;程序流程:1.定义一元多项式链表结构体类型;2.输入多项式项数以分配存储空间;3.输入多项式每项的系数和指数,将其插入当前多项式链表。

同时判断是否有与当前节点指数相同的项,若存在,则将两项系数相加合并。

此外,若存在系数为0的项,将其存储空间释放;4.进行多项数加法时,新建一个存储结果的链表,分别将两多项式各项依次插入结果多项式即完成多项式相加运算;5.进行多项数加法时,将减项多项式各项系数化为相反数后进行加法操作,即完成多项式相减运算;6.对x赋值后,将x值代入多项式进行运算得到多项式的值;7.输出多项式。

注意:进行完一次运算以后,应该及时销毁无用多项式以释放空间以便再次应用。

算法及注释:1)定义一元多项式链表结构体类型typedef struct Lnode{float cof; //定义系数int exp; //定义指数struct Lnode *next; //定义指针变量指向下一个节点}Lnode ,*Linklist; //定义新的变量类型2)建立多项式存储线性链表头结点void makehead(Linklist &head){head=(Linklist)malloc(sizeof(Lnode)); //建立新的节点head->exp=-1;head->next=NULL; //指针赋空head->cof=1;}3)将输入的多项式信息存储于节点中void makelnode(Lnode *&p){p=(Lnode*)malloc(sizeof(Lnode)); //建立新的节点printf("Input the cof and exp\n");scanf("%fx%d",&p->cof,&p->exp); //输入多项式底数指数信息p->next=NULL; //指针赋空}4)清除系数为零的多项式节点void clear(Linklist la){Lnode *p,*q; //定义两个指向结构体的指针p=la;q=p->next;while (q){if (fabs(q->cof)<=0.000001) { //判断系数为零p->next=q->next; //指针指向相隔的下一个节点free(q); //销毁系数为零的节点q=p->next; //指针后移一位}else {p=p->next; //p q分别后移一位q=q->next;}}}5)找到多项式中与当前节点同指数项位置int locate(Linklist l,Lnode *&p,Lnode*e){p=l;//标记表头if (!l->next)return(0);while(p&&e->exp!=p->exp){//当p存在且指数不相等时指针后移p=p->next;}if(p)return(p);//当p存在时,返回p地址else {//没找到时寻找出插入位置p=l;while (p->next&&e->exp<=p->next->exp)p=p->next;if (!p->next){p=p;return(0);}return(0);}}6)将多项式节点插入已有多项式链表中,同时完成系数运算void caseinsert(Linklist &l,Lnode *e){Lnode *p;if (locate(l,p,e)){//指数相同项系数相加p->cof += e->cof;free(e);}else{//插入新的项e->next=p->next;p->next=e;}}7)创建新的多项式链表void creat(Linklist &head,int m){Lnode *p;int i;makehead(head);//建立头结点for (i=1;i<=m;i++){p=(Linklist)malloc(sizeof(Linklist));//建立新的多项式单个节点空间makelnode(p);//建立赋值caseinsert(head,p);//将多项式节点插入已有多项式链表中,同时完成系数运算}clear(head);}8)输入多项式项数并创建节点进行存储void input(Linklist &l){int m;printf("Input the Poly numbers\n");scanf("%d",&m);creat(l,m);//建立一个l指向的头指针有m项的多项式链表}9)输出多项式void print(Linklist l){Lnode *p;p=l->next;printf("Poly:%6fx^%d",p->cof,p->exp);p=p->next;while (p){if(p->cof>0) printf("+");//系数正负号if (fabs(p->cof)<=0.000001); break;//不输出系数为零的项printf("%6fx^%d",p->cof,p->exp);p=p->next;//指针后移}printf("\n");}10)进行多项式加法运算void add(Linklist la,Linklist lb,Linklist &lc){ Lnode *p,*q,*q1,*p1;p=la->next;q=lb->next;makehead(lc);//建立一个新的表头while(p){p1=p->next;caseinsert(lc,p);//将多项式节点p插入已有多项式链表lc中,同时完成系数运算p=p1;//指针后移}while(q){q1=q->next;caseinsert(lc,q);//将多项式节点q插入已有多项式链表lc中,同时完成系数运算q=q1;}}11)将减项多项式转化为系数为相反数的多项式便于转化为加法运算void reverse(Linklist &l){Linklist p;p=l->next;while(p){p->cof*=-1;//系数自乘-1p=p->next;}}12)进行多项式减法运算void sub(Linklist la,Linklist lb,Linklist &lc){reverse(lb);add(la,lb,lc);clear(lc);//清除头结点}13)对x赋值进行多项式赋值运算float value(Linklist l,float x){float sum=0,t;int i;Linklist p=l->next;while(p){t=1;for (i=p->exp;i>0;i--)t*=x;sum=sum+t*p->cof;p=p->next;}return(sum);}14)销毁已有多项式,清除已有多项式占用的存储空间void destroy(Linklist la){Lnode *p,*q;p=la;while(p){q=p;p=p->next;free(q);}}15)创建主程序即菜单界面void main(){Linklist l[10];int c,n,m,i;float a;printf("Choose the number to operate:\n");printf(" 1:Creat a Poly\n");printf(" 2:Poly Addition\n");printf(" 3:Poly Substraction\n");printf(" 4:Evaluation\n");printf(" 5:Destroy a Poly\n");printf(" 6:Print a Poly\n");printf(" 0:Exit\n");printf("\nDestroy the Polys after used.\n");printf("\n*use ',' to separate\n");scanf("%d",&c);while (c){switch (c){case 1: printf("Input the Poly number 1~9\n");scanf("%d",&n);input(l[n]);break;case 2: printf(" Input the Poly number to add,and the Poly number stored in\n");scanf("%d,%d,%d",&n,&m,&i);add(l[n],l[m],l[i]);break;case 3: printf(" Input the Poly number to subtract,and the Poly number stored in\n");scanf("%d,%d,%d",&n,&m,&i);sub(l[n],l[m],l[i]);break;case 4: printf("Input the number to operate and the value of x:\n");scanf("%d,%f",&n,&a);printf("%f\n",value(l[n],a));break;case 5: printf("Input the Poly number:\n");scanf("%d",&n);destroy(l[n]);break;case 6: printf(" Input the Poly number:\n");scanf("%d",&n);print(l[n]);case 0: n=0;break;default:printf("ERROR!");}printf("Choose the number to operate:\n");scanf("%d",&c);}printf("OK!\n");程序运行截图:实验总结:这次实验室数据结构第一次上机实验,由于与C语言课程的学习相隔已经一个学期,对C语言有些生疏和遗忘,在编程过程中出现很多错误。

一元多项式表示与相加

一元多项式表示与相加

系数 coef 指数 exp 指针 next
结点结构体定义如下: struct Polynode { int coef; int exp; Polynode *next; } Polynode , * Polylist;
例:建立一元多项式链式存储算法 【算法思想】通过键盘输入一组多项式的系数和指数,用尾插法建立一元 多项式的链表。以输入系数 0 为结束标志,并约定建立多项式链表时,总 是按指数从小到大的顺序排列。 【算法描述】
scanf(“%d,%d”,&c,&e);/*键入多项式的系数和指数项*/
while(c!=0)
/*若 c=0,则代表多项式的输入结束*/
{
s=(Polynode*)malloc(sizeof(Polynode)); /* 申 请 新
的结点*/
s->coef=c ;
s->exp=e ;
rear->next=s ;
① 若 p->exp< q->exp,则结点 p 所指的结点应是“和多项式”中的 一项,令指针 p 后移;
② 若 p->exp=q->exp,则将两个结点中的系数相加,当和不为零时 修改结点 p 的系数域,释放 q 结点;若和为零,则和多项式中无此项,从 A 中 删去 p 结点,同时释放 p 和 q 结点。
B(x)=8x+22x7-9x8
polya
-1
polyb
-1
70 81
31
98
5 17 ∧
22 7
-9 8 ∧
(2)多项式相加的运算规则 为了保证“和多项式”中各项仍按升幂排列,在两个多项式中: ①指数相同项的对应系数相加,若和不为零,则构成“和多项式”中的一 项; ②指数不相同的项仍按升幂顺序复抄到“和多项式”中。 【算法思想】以单链表 polya 和 polyb 分别表示两个一元多项式 A 和 B, A+B 的求和运算,就等同于单链表的插入问题(将单链表 polyb 中的结点插入 到单链表 polya 中),因此 “和多项式“中的结点无需另生成。 为实现处理,设 p、q 分别指向单链表 polya 和 polyb 的当前项,比较 p、q 结点的指数项,由此得到下列运算规则:

962 《数学-数据方向基础综合》考试大纲

962 《数学-数据方向基础综合》考试大纲

962 《数学-数据方向基础综合》考试大纲为准。

一. 学科概述“数据科学和信息技术”是清华大学自主设置的交叉学科,面向未来的社会发展需求并已按国家有关文件要求完成备案的新型学科.欢迎但不限于以下专业背景的同学报考:电子科学与技术、信息与通信工程、计算机科学与技术、电气工程、动力工程及工程热物理、光学、应用经济学、数学、物理、化学、仪器科学与技术、机械工程、控制科学与工程、土木工程、管理科学与工程、航空宇航科学与技术、社会学等。

二.参考书目:《数据结构》(C语言版) (严蔚敏、吴伟民清华大学出版社)三.考试内容:1.1什么是数据结构1.2基本概念和术语1.3抽象数据类型的表示与实现1.4算法和算法分析1.4.1算法1.4.2算法设计的要求1.4.3算法效率的度量1.4.4算法的存储空间需求2 线性表2.1线性表的类型定义2.2线性表的顺序表示和实现2.3线性表的链式表示和实现2.3.1线性链表2.3.2循环链表2.3.3双向链表2.4一元多项式的表示及相加3栈和队列3.1栈3.1.1抽象数据类型栈的定义3.1.2栈的表示和实现3.2栈的应用举例3.2.1数制转换3.2.2括号匹配的检验3.2.3行编辑程序3.2.4迷宫求解3.2.5表达式求值3.3栈与递归的实现3.4队列3.4.1抽象数据类型队列的定义3.4.2链队列——队列的链式表示和实现3.4.3循环队列——队列的顺序表示和实现3.5离散事件模拟4 串4.1串类型的定义4.2串的表示和实现4.2.1定长顺序存储表示4.2.2堆分配存储表示4.2.3串的块链存储表示4.3串的模式匹配算法4.3.1求子串位置的定位函数Index(S,T,pos)4.3.2模式匹配的一种改进算法4.4串操作应用举例4.4.1文本编辑4.4.2建立词索引表5 数组和广义表5.1数组的定义5.2数组的顺序表示和实现5.3矩阵的压缩存储5.3.1特殊矩阵5.3.2稀疏矩阵5.4广义表的定义5.5广义表的存储结构5.6m元多项式的表示5.7广义表的递归算法5.7.1求广义表的深度5.7.2复制广义表5.7.3建立广义表的存储结构6 树和二叉树6.1树的定义和基本术语6.2二叉树6.2.1二叉树的定义6.2.2二叉树的性质6.2.3二叉树的存储结构6.3遍历二叉树和线索二叉树6.3.1遍历二叉树6.3.2线索二叉树6.4树和森林6.4.1树的存储结构6.4.2森林与二叉树的转换6.4.3树和森林的遍历6.5树与等价问题6.6赫夫曼树及其应用6.6.1最优二叉树(赫夫曼树)6.6.2赫夫曼编码6.7回溯法与树的遍历6.8树的计数7 图7.1图的定义和术语7.2图的存储结构7.2.1数组表示法7.2.2邻接表7.2.3十字链表7.2.4邻接多重表7.3图的遍历7.3.1深度优先搜索7.3.2广度优先搜索7.4图的连通性问题7.4.1无向图的连通分量和生成树7.4.2有向图的强连通分量7.4.3最小生成树7.4.4关节点和重连通分量7.5有向无环图及其应用7.5.1拓扑排序7.5.2关键路径7.6最短路径7.6.1从某个源点到其余各顶点的最短路径7.6.2每一对顶点之间的最短路径8 动态存储管理8.1概述8.2可利用空间表及分配方法8.3边界标识法8.3.1可利用空间表的结构8.3.2分配算法8.3.3回收算法8.4伙伴系统8.4.1可利用空间表的结构8.4.2分配算法8.4.3回收算法8.5无用单元收集8.6存储紧缩9 查找9.1静态查找表9.1.1顺序表的查找9.1.2有序表的查找9.1.3静态树表的查找9.1.4索引顺序表的查找9.2动态查找表9.2.1二叉排序树和平衡二叉树9.2.2B树和B+树9.2.3键树9.3哈希表9.3.1什么是哈希表9.3.2哈希函数的构造方法9.3.3处理冲突的方法9.3.4哈希表的查找及其分析10 内部排序10.1概述10.2插入排序10.2.1直接插入排序10.2.2其他插入排序10.2.3希尔排序10.3快速排序10.4选择排序10.4.1简单选择排序10.4.2树形选择排序10.4.3堆排序10.5归并排序10.6基数排序10.6.1多关键字的排序10.6.2链式基数排序10.7各种内部排序方法的比较讨论11 外部排序11.1外存信息的存取11.2外部排序的方法11.3多路平衡归并的实现11.4置换一选择排序11.5最佳归并树12 文件12.1有关文件的基本概念12.2顺序文件12.3索引文件12.4ISAM文件和VSAM文件12.4.1ISAM文件12.4.2VSAM文件12.5直接存取文件(散列文件)12.6多关键字文件12.6.1多重表文件12.6.2倒排文件。

多项式的加减乘除四则运算

多项式的加减乘除四则运算

多項式的加減乘除四則運算班級:座號:姓名:
五、多項式的除法運算
四、十字交乘法(三項式) 班級:座號:姓名:
2
2. x2項的係數「不是1」的十字交乘法
二、完全平方數:背1~20的平方
三、平方根的定義
四、利用方格紙畫圖,作出面積是2 平方單位、5 平方單位、18平方單位的正方形-----介紹無理數
五、非完全平方數的平方根:根號引入的必須
六、利用方格紙畫圖,作出1、2、3、4、5、……. 、n
七、正數、零、負數的平方根
(一)正數:
(二)零:
(三)負數:
八、利用標準分解式計算平方根
九、十分逼近法:求無理數的近似值
十、電算器求平方根
一元二次方程式班級:座號:姓名:
5. a x2+bx+c=0,a和b 和c是常數(、十字交乘法)
6. 綜合題
7. 應用問題。

一元多项式的相加(数据结构)

一元多项式的相加(数据结构)

实验报告课程名称:数据结构实验名称:一元多项式的相加班级: 1333 学生姓名:蔡景旺学号: 37一、需求分析1.用户可以根据自己的需求分别输入两个一元多项式(输入必须按指数递增顺序),并且能够实现输入的一元多项式的显示。

2.能够完成两个一元多项式的相加功能并显示结果。

3.程序执行的命令包括:(1)构造链表A (2)构造链表B (3)两个链表的相加(4)求链表的长度(5)打印(显示)已有的链表二、概要设计⒈为实现上述算法,需要线性表的抽象数据类型:ADT Polynomial {数据对象:D={a i:|a i∈TermSet,i=1…n,n≥0TermSet 中的每个元素包含一个表示系数的实数和表示指数的整数} 数据关系:R1={<a i-1,a i>|a i-1,a i∈D,且a i-1中的指数值< a i中的指数值i=2,…n≥0}基本操作:CreatPolyn(&p,m)操作结果:输入m项的系数和指数,建立一个一元多项式P。

DestroyPolyn(&p)初始条件:一元多项式P已存在。

操作结果:销毁一元多项式P。

PrintPolyn(P)初始条件:一元多项式P已存在。

操作结果:打印输出一元多项式P。

PolynLength(P)初始条件:一元多项式P已存在。

操作结果:返回一元多项式中P的项数。

AddPolyn(&Pa,&Pb)初始条件:一元多项式Pa和Pb已存在。

操作结果:完成一元多项式相加运算,即:Pa=Pa+Pb,销毁一元多项式Pb.}ADT Polynomailtypedef struct{ // 项的表示,多项式为linklist的数据元素float coef; //系数int evpn; //指数}term,ElemType; //两个类型名:term用于本ADT,ElemType为Linklist的数据对象名Typedef Linklist polynomial; //用带表头结点的有序链表表示多项式;Int cmp(term a,term b);void CreatPolyn (polynomial &P,int m){//输入m项的系数和指数,建立表示一元多项式的有序链表PInitList (P); h = GetHead (P);e.coef = 0.0;e.expn = -1;SetCurElem (h,e); //设置头结点的数据元素for (i = 1;i<=m;++i){//依次输入m项非零项scanf(e.coef,e.expn);if (! LocateElem(P,e,q,(*cmp)){ //当链表不存在指数项if(MakeNode (s,e)) InsFirst(q,s);//生成结点并插入链表}}}//CreatPolynvoid AddPolyn(polynomial &Pa, polynomial &Pb){//多项式加法:Pa=Pa+Pb,利用两个多项式的结点构成“和多项式”ha=Gethead(Pa); hb=Gethead(Pb);//ha和hb分别指向Pa和Pb的头结点qa=NextPos(Pa,ha); qb=NextPos(Pb,hb);// /ha和hb分别指向Pa和Pb的当前结点while(qa&&qb){//qa和qb均非空a=GetCurElem(qa); b=GetCurElem(qb);switch(*cmp(a,b)){case -1: //多项式PA中当前结点的指数值小ha=qa;qa= NextPos(Pa,ha);break;case 0://l两者的指数相等sum=a.cofe+b.cofe;if(sum!=0.0){//修改多项式PA中当前结点的系数值SetCurELem(qa,sum);ha=qa;}else {//删除当前结点Delfirst(ha,qa);FreeNode(qa);}Delfirst(ha,qa);FreeNode(qa); qb=NextPos(Pb,hb); qa=NextPos(Pa,ha);break;Case1://多项式PB中当前结点的指数值小DelFirst(hb,qb); InsFirst(ha,qb);qb=NextPos(Pb,hb); qa=NextPos(Pa,ha);break;}//swtich}//whileIf(!ListEmpty(Pb)) Append(Pa,qb);FreeNode(hb)://释放Pb头结点}//AddPolyn2. 数据结构分析:逻辑结构为线性表,采用链式存储结构。

数据结构课后练习 - 第2章

数据结构课后练习 - 第2章
2. 线性表的链式存储结构优于顺序存储。(× ) 3. 在单链表中,任何两个元素的存储位置之间都有固定
的联系,所以可以从头结点开始查找任何一个元素。 (×) 4. 顺序存储的线性表可以实现随机存取。(√ )
二、单项选择题
1. 用单链表方式存储的线性表,存储每个结点需要两个域, 一个数据域,另一个是______B。
A. 当前结点所在的地址域
B. 指针域
C. 空指针域
D. 空闲域
2. 在具有n个结点的单链表中,实现__A____的操作,其算法 的时间复杂度都是O(n)。
A. 遍历链表和求链表的第i个结点
B. 在地址为p的结点之后插入一个结点
C. 删除开始结点
D. 删除地址为p的结点的后继结点
二、单项选择题
3. 已知一个顺序存储的线性表,设每个结点需占m个存储单元,若第一
学习要点
3. 熟练掌握在顺序存储结构上线性表的基本操作,如查 找、插入和删除的算法。
4. 熟练掌握在各种链表结构中线性表的基本操作,能在 实际应用中选用适当的链表结构。
5. 能够从时间与空间复杂度方面综合比较线性表两种存 储结构的不同特点及其适用场合。
一、判断对错题
1. 线性表中的元素可以是各种各样的,但同一线性表中 的数据元素具有相同的特性,因此属于同一数据对象。 ( )√
• 插入结点:移动元素次数n-i+1; • 删除结点:移动元素次数n-i。 • 决定因素:顺序表的长度以及插入、删除元素在表中
的位序。
4. 分析下述三个算法的具体功能。
ListNode *Demo1(LinkList L, ListNode *p)
{ //L是有头结点的单链表
ListNode *q=L->next;

《数据结构》授课计划-数据结构简明教程(第2版)-微课版-李春葆-清华大学出版社

《数据结构》授课计划-数据结构简明教程(第2版)-微课版-李春葆-清华大学出版社

学期授课计划
至学年第二学期
课程名称数据结构
授课班级
任课教师
课程类别必修总时数48 已开时数0
现开时数48 其中:课堂教学40 现场教学
课堂实验8 习题大作业
复习测验其它
学期授课计划审查意见
说明:审批意见主要应包括:①是否符合课程教学大纲要求;②教学进度是否适当合理;③重点、难点的把握是否准确;
④授课计划的内容是否完整、规范;⑤执行中的注意事项;⑥整改意见。

1、按照教学大纲做好授课计划,并附有授课计划说明。

按教学的顺序周,以两个课时为一个单元编写授课计划,每次课的目的
要求、作业布置情况应在计划中体现,重点、难点有所标注。

2、授课计划一式三份,任课教师、所在系部及教学科各保留一份。

3、授课计划须在学期开始前由各系部相关负责人审查通过,并签字后方能实施。

数据结构实验 C语言版 线性表__C版

数据结构实验 C语言版 线性表__C版
17
2. 求表长
L.length
3. 取第i个元素
L.elem[i-1]
(0<i<L.length+1)
18
4. 元素定位操作
分析:依次取出每个元素和给定值进行比较 int LocateElem_Sq (SqList L, ElemType e, Status (*compare)(ElemType, ElemType))
6. 删除操作
线性表的删除运算是指将表的第i(1≦i≦n)个元 素删除,使长度为n的线性表: (a1,…a i-1,ai,a i+1…,an) 变成长度为n-1的线性表 (a1,…a i-1,a i+1,…,an)
操作步骤: ① 判断线性表是否为空 ② 判断i值是否合法:1≦i≦n ③ 元素前移 ④ 表长减1
2
线性结构:数据元素之间存在1对1的关系。 四个特征: ① 存在惟一的一个“第一元素” ② 存在惟一的一个“最后元素” ③ 除最后元素外,其它元素均有惟一的“后继” ④ 除第一元素外,其它元素均有惟一的“前驱”
3
2.1 线性表的类型定义
一.定义
线性表(Linear List) :由n(n≧0)个数据元素组成的 有限序列。记作: (a1,a2,…an) 其中数据元素的个数n定义为表的长度。当n=0时称 为空表 这里的数据元素ai(1≦i≦n)只是一个抽象的符号, 其具体含义在不同的情况下可以不同。 例1、26个英文字母组成的字母表 (A,B,C、…、Z) 例2、某校从1978年到1983年各种型号的计算机拥 有量的变化情况。 4 (6,17,28,50,92,188)
思考:若要直接查相等的呢?
19
5. 插入操作
线性表的插入运算是指在表的第i(1≦i≦n+1)个位置上,插 入一个新元素e,使长度为n的线性表(a1,…a i-1,ai,…,an) 变成长度为n+1的线性表 (a1,…a i-1,e,ai,…,an) 操作步骤: ① 判断i是否符合要求:1≦i≦n+1 ② 判断表长是否溢出 ③ 元素右移 ④ 插入 ⑤ 表长增1

数据结构-C语言描述(第二版)(耿国华)章 (2)

数据结构-C语言描述(第二版)(耿国华)章 (2)
第2章 线 性 表 第2章 线性表
2.1 线性表的概念及运算 2.2 线性表的顺序存储 2.3 线性表的链式存储 2.4 一元多项式的表示及相加
第2章 线 性 表 2.1 线性表的概念及运算
2.1.1 线性表的逻辑结构 线性表是n个类型相同的数据元素的有限序列,数据元素之
间是一对一的关系,即每个数据元素最多有一个直接前驱和一 个直接后继,如图2.1所示。例如:英文字母表(A,B,…, Z)就是一个简单的线性表,表中的每一个英文字母是一个数据 元素,每个元素之间存在唯一的顺序关系,如在英文字母表字 母B的前面是字母A,而字母B的后面是字母C。在较为复杂的线 性表中,数据元素(data elements)可由若干数据项组成,如 学生成绩表中,每个学生及其各科成绩是一个数据元素,它由 学号、姓名、各科成绩及平均成绩等数据项(item组成,常被称 为一个记录(record) ,含有大量记录的线性表称为文件(file)。 数据对象(dataobject)是性质相同的数据元素集合。
第2章 线 性 表
假设线性表中有n个元素,每个元素占k个单元,第 一个元素的地址为loc(a1),则可以通过如下公式计算出第i 个元素的地址loc(a -i):
loc(ai) =loc(a1)+(i-1)×k 其中loc(a -2.2 顺序表存储示意图
第2章 线 性 表
操作前提: 1≤i≤ListLength(L)。
表L已存在且非空,
操作结果: 删除L的第i个数据元素, 并用e返回其值, L的长度减1。
} ADT LinearList
第2章 线 性 表 2.2 线性表的顺序存储
2.2.1 线性表的顺序存储结构
线性表的顺序存储是指用一组地址连续的存储单元依 次存储线性表中的各个元素,使得线性表中在逻辑结构 上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元 素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。 采用顺序存储结构的线性表通常称为顺序表。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
若pa==NULL,将lb中剩余部分连到La上即可
一元多项式的相加算法分析
if(pa->exp < pb->exp) { qa=pa; pa=pa->next }
qa La pa
pa->exp < pb->exp: pa结点是 结果多项式中的一 项,pa后移, pb不动
7 0
qb
pb
3 1
9 8
5 17 ^
7 0 8 1
3 1 22 7
9 8 -9 8 ^
5 17 ^
Lb 相加后: La
7 0
11 1
22 7
5 17 ^
运算规则
设pa,pb分别指向La,Lb中某一结点,pa,pb初值是第一结点
pa->exp < pb->exp: pa结点是结果多项式中的一 项, pa后移,pb不动
比较 pa->exp与 pb->exp
pa->exp > pb->exp: pb结点是结果多项式中的一 项, 将pb插在pa之前,pb后移,pa不动 =0:从La中删去pa所指结点, pa->exp = pb->exp: 释放pa,pb,pa,pb后移 系数相加 0:修改pa系数域,释放pb, pa,pb后移
直到pa或pb为NULL
若pb==NULL,结束
La pa->exp = pb->exp: 系数相 加 0:修改pa系数域,释放pb, pa,pb后移
7 0
qb
pb
11 3
1
9 8
5 17 ^
Lb
8 1
22 7
-9 8 ^
一元多项式的相加算法分析
if(pa->exp > pb->exp) { qb=pb;pb=pb->next; qb->next=qa->next; qa->next=qb;qa=qb; }
7 0
11 1
qb qa
9 8
pb
5 17 ^
pb=NULL
Lb
22 7
-9 8 ^
11
Void AddPoly(PolyList La,PolyList Lb);
A( x) 7 3x 9 x8 5 x17 B( x) 8 x 22 x7 9 x8
La Lb
7 0 8 1
3 1 22 7
9 8 -9 8 ^
5 17 ^
一元多项式的相加算法分析
相加前: La
• 存储结构 顺序表? 线性链表?
2.4 线性表的应用举例— 一元多项式的表示及相加
•顺序表 y1=1+2x+5x2+10x4-3x5
但如果多项式是这样的呢?
S ( x) 1 3x1000 2 x 20000
y2=3x-5x2+10x6-3x7
/*将一元多项式La和Lb相加,结果存放在La中*/ Void AddPoly(SqList La,SqList Lb); La Lb
1 0
2 5 3
5 0 -5
0 0
10 0
-3 7 10
-3 -3
2.4 线性表的应用举例— 一元多项式的表示及相加
•线性链表
• 线性链表结点定义
coef exp *next
typedef struct PolyNode { int coef, exp ; //coef存放系数,exp存放指数 struct PolyNode *next; }PolyNode,*PolyList; /*将多项式La和Lb相加,结果用La返回*/
qa Lห้องสมุดไป่ตู้ pa
pa->exp > pb->exp: pb结 点是结果多项式中的一项, 将pb插在pa之前,pb后 移,pa不动
7 0
qb
11 1
pb
9 8
5 17 ^
Lb
22 7
-9 8 ^
11
if(pa->exp == pb->exp) if(pa->coef + pb->coef !=0) { { pa->coef+=pb->coef; qa=pa; } pa->exp = pb->exp: else 系数相加 { =0:从La中删去pa所指 qa->next=pa->next; 结点,释放pa,pb,pa,pb free(pa); 后移 } pa=qa->next; qb=pb; pb=pb->next; free(qb); pa } La
Lb
8 1
22 7
-9 8 ^
一元多项式的相加算法分析
if(pa->exp == pb->exp) { if(pa->coef + pb->coef !=0) { pa->coef+=pb->coef; qa=pa; } pa=qa->next; qb=pb; pb=pb->next; free(qb); qa pa }
2.4 线性表的应用举例— 一元多项式的表示及相加
•一元多项式的逻辑结构:
em e1 e2 Pn ( x) P x P x P x 1 2 m
其中 0 e1 e2 em(Pi为非零系数) 用数据域含两个数据项的线性表表示
P1,e1, P2,e2, Pm,em
2.4 线性表的应用举例— 一元多项式的表示及相加
•问题分析:
• 何为一元多项式
y1=1+2x+5x2+10x4-3x5
• 如何用计算机解决一元多项式相加问题
y1=1+2x+5x2+10x4-3x5
y2=3x-5x2+10x6-3x7
y1+y2结果为: 1+5x+10x4-3x5+10x6-3x7
解题思路: 1.分析一元多项式的逻辑结构 2.根据问题特点,确定其存储结 构 3.依据存储结构,写出基本运算
相关文档
最新文档