二元多项式相加
二元运算

矩阵代数,特别是矩阵的乘法规则,归功于著名的英国代数学家凯利。他创立了特殊型式的超复数。矩阵的 乘法可推广到更高阶矩阵。但要注意,要使乘法能进行,第一个矩阵的列数应与第二个矩阵的行数相同。凯利的 规则(通常称为行乘列法则)给出了mXn矩阵与nXk矩阵的乘积 。
因为有些2×2矩阵或n×行矩阵没有逆阵,所以这种矩阵的有些集合关于乘法不是群。还有,虽然矩阵乘法 总满足结合律,但在矩阵集上并不一定满足交换律。这就使得矩阵的乘法系统可以作为乘法不满足交换律的一些 现代抽象代数结构的模型。由于方阵并非都是可逆的,故在矩阵的乘法系统中,不能将除法作为二元运算来看待。 凯利的矩阵代数还包括对“数乘"和加法的定义。数乘是一个一元运算,加法是矩阵的二元运算。数与矩阵相乘, 就是将矩阵的每个元素都乘上该数。行数和列数分别相同的两个矩阵可以相加,只要把相应元素相加,其和是有 同样的行数和列数的矩阵 。
感谢观看Biblioteka 常见集合的数的
矩阵的
a+b a加b a-b a减b a x b a与b相乘 ab a与b相乘 a/b a除以b
a除以b a除以b
定义1设是一个集合,且是一个从到的映射。于是称为集合 X中的n元运算。称整数 n为运算的阶。对 于n=2来说,称为二元运算。 定义2设A为集合,如果f是A×A到A的代数运算,则称f是A上的一个二元运算,也称作集合A对于代数运算f来 说是封闭的 。
二元运算
数理科学术语
01 常见
目录
02 性质
二元运算是指由两个元素形成第三个元素的一种规则,例如数的加法及乘法;更一般地,由两个集合形成第三 个集合的产生方法或构成规则称为二次运算。
二元运算(Binary operation)作用于两个对象的运算。如任意二数相加或相乘而得另一数;任意二集合相 交或相并而得另一集合;任意一个多行矩阵与一个多列矩阵相乘而得另一矩阵;任意二函数合成而为另一函数, 以上加、乘、交、并,积及合成均属二元运算。
二元多项式环

二元多项式环李蕊彤(数学与统计学院 2012级函授数学与应用数学)摘要 本文讨论了二元多项式的概念、运算及其矩阵表示方式,并由其矩阵表示方式证明了交换环上的二元多项式关于定义的加法、乘法构成了一个含幺交换环,并利用以上结论讨论了二元多项式的一些性质.关键词 二元多项式, 矩阵, 交换环一、引言多项式是代数学中所研究的基本对象之一,它不但与高次方程的讨论有关,而且在进一步学习代数以及其他数学分支时也都会碰到.但我们以前在初高中阶段对多项式的讨论,主要局限在一元多项式.随着数学的发展,多元多项式的研究也在不断深入.同时随着代数学的发展,群环域的概念应运而生将多项式的研究推向更高的方向.矩阵是高等代数中的一个非常重要的工具,它在数学的各个方面都有很重要的用处.由此,我们利用矩阵这一工具,通过适当的定义,讨论了二元多项式,及二元多项式环,并讨论了二元多项式的一些性质.在本文中,二元多项式环集中的讨论了二元多项式的加法与乘法,通过矩阵这一工具给二元多项式以新的表达形式,并根据多项式的加法乘法发展出二元多项式矩阵间的针对于多项式的加法与乘法,根据给出的加法和乘法验证了二元多项式可以构成一个环.二、二元多项式环1.二元多项式的定义及矩阵表示定义2.1 设P 是一个交换环,,x y 是两个文字.形式,,,Z m n mn mn a x y a P m n +∈∈称为环P 上的一个单项式,mn a 称为这个单项式的系数.当0mn a ≠时,称此单项式中各文字的指数之和m n +为这个单项式的次数. 若两个单项式中相同文字的指数对应相等,则称它们为同类项.即单项式m nmn a x y 和s t st b x y 为同类项当且仅当,m s n t ==.如果,m n 中一项为0 ,那么m x 或n y 可以不写,约定0n n ax y ay =.因此,1个文字的单项式总可以看成2个文字的单项式.特别,当0,0m n ==时,我们有00ax y a R =∈.我们还约定,00m n x y R =∈.一些(有限个)单项式用加号联结起来而得到的一个形式表达式121112212212,s s k k k k k k s i a x y a x y a x y a R +++∈(1)ij k 是非负整数()1,2,,;1,2i s j ==,叫做P 上文字,x y 对应的的一个多项式,或简称P 上一个二元多项式.用符号(,),g(,)f x y x y 等来表示P 上,x y 的多项式.在一个二元多项式(1)里,组成这个多项式的单项式叫做这个多项式的项.各项的系数也叫做这个多项式的系数.二元多项式中系数不为零的单项式的最高次数称为这个多项式的次数.设(,)m n mn mnf x y a x y =∑为一个二元多项式,012(,,,,)m X x x x x =,012(,,,,)n Y y y y y =,则(,)()m n Tm n i j m n mnf x y a x y X a Y⨯==∑,其中()ij m n a ⨯为一个m 行n 列的矩阵,其中的元素为二元多项式的每一项的系数,其对应关系为:i j ij a x y 的系数ij a 处于矩阵的第i 行第j 列.由上述对应关系可见一个二元多项式总可以和一个矩阵一一对应,因此即可将一个二元多项式对应的矩阵称为这个多项式的矩阵.由二元多项式的定义可见,对于一个二元多项式(,)m n mn mnf x y a x y =∑总可以在其后添加若干个零,使得(,),max{,n}r r rr rf x y a x y r m ==∑,其中若m i r ≤≤或n j r ≤≤,0ij a =.即对于一个二元多项式的矩阵而言,若其行数与列数不相等(非方阵),总可以给其添上若干行或若干列零,使其变为方阵,所得的方阵仍是原二元多项式所对应的矩阵.以后为了叙述简单起见,我们对所有二元多项式对应的非方阵的矩阵做如上处理,使之成为方阵,以简化推理和叙述.2. 二元多项式的运算、及其矩阵表达 二元多项式的运算定义如下:加法:P 上两个二元多项式(,)f x y ,(,)g x y 的和指的是把分别出现在这两个多项式中对应的同类项的系数相加所得到的二元多项式,记作 f + g.即设(,)m n mn mnf x y a x y =∑,(,)s t st stg x y b x y =∑,则(,)g (,)i j ij ijf x y x y c x y +=∑,其中i j m n c a b=+,若,i m s j n t ====. 数乘: P 上一个二元多项式(,)f x y 和P 上一个数的乘积指的是把这个数乘在多项式的每个项的系数上,即设(,)m n mn mnf x y a x y =∑,b P ∈,则(,)m n mn mnbf x y ba x y =∑.乘法:为了定义两个多项式的乘积,先定义两个单项式的乘积.P 上两个二元单项式m n mn a x y 与s t st b x y 的积指的是单项式m s n t mn st a b x y ++.设f 与g 都是P 上,x y 的多项式把f 的每一项与g 的每一项相乘,然后把这些乘积相加(合并同类项)而得到的一个二元多项式叫做f 与g 的积,记作 fg .即设(,)m n mn mnf x y a x y =∑,(,)s t st stg x y b x y =∑,则(,)g(,)i j ij ijf x y x y c x y ⨯=∑,其中i j m n s t ijc a b =⋅∑,,i m s j n t =+=+.3.二元多项式环由于二元多项式可以由矩阵表示,则其运算亦可由矩阵表示,现定义其运算的矩阵表示如下:定义2.2 设(a ),(b )ij n n ij m m A B ⨯⨯==为两个二元多项式的矩阵,不妨设m n >,则此两个矩阵对应二元多项式的和所对应的矩阵为()ij r rC c A B ⨯==+,其中,0,ij ijij ija b i j n c b n i j m+≤⎧=⎨+<≤⎩.定义2.3设(),()ij n n st m m A a B b ⨯⨯==为两个二元多项式的矩阵,则此两个矩阵对应二元多项式的积所对应的矩阵为()uv r r C c A B ⨯==*,其中11uv ij st i s u j t v c a b +=++=+=∑且1m n r +=-.定义2.4设()ij n n A a ⨯=为一个二元多项式的矩阵,b P ∈,则此矩阵对应的二元多项式与数的数乘所对应的矩阵为()uv r r C c ⨯=,其中uv ij c b a =⋅.以上定义了二元多项式的运算的矩阵表示形式,下面我们利用这些表示方式探讨这些运算的性质.定理2.1 二元多项式的加法满足交换律.证明 由定义2.2可见两者的和中的元素均为P 中数的加法,由P 为一交换环,其上的加法满足交换律,故二元多项式定义的加法满足交换律.定理2.2 二元多项式的加法满足结合律.证明 由定义2.2可见两者的和中的元素均为P 中数的加法,由P 为一交换环,其上的加法满足结合律,故定义的加法满足结合律.定理2.3 二元多项式的乘法满足交换律.证明 由定义2.3可见两者的积中的元素均为P 中数的乘法,由P 为一交换环,其上的乘法满足结合律,故定义的乘法满足交换律.定理2.4 二元多项式的乘法满足结合律.证明 设(),(),()ij n n st m m uv w w A a B b C c ⨯⨯⨯===为三个二元多项式的矩阵,则*()pq r r A B d ⨯=,其中11pq ij st i s p j t q d a b +=++=+=∑,(*)*()xy z z A B C e ⨯=,其中11121112xy uv pquv ij st ij st uv u p x u p x i s p i s u x v q y v q y j t q j t v y e c d c a b a b c +=++=++=+++=++=++=++=+++=+⎛⎫ ⎪=== ⎪ ⎪⎝⎭∑∑∑∑; *()pq r r B C f ⨯=,其中11pq st uv s u p t v q f b c +=++=+=∑,*(*)()xy z z A B C g ⨯=,其中11121112xy ij pqij st uv ij st uv i p x i p x s u p i s u x j q y j q y t v q j t v y g a f a b c a b c +=++=++=+++=++=++=++=+++=+⎛⎫ ⎪=== ⎪ ⎪⎝⎭∑∑∑∑; 由此可见在此乘法下,二元多项式满足结合律.定理2.5 二元多项式的乘法满足左分配律.证明 设(),(),()ij n n ij n n uv w w A a B b C c ⨯⨯⨯===为三个二元多项式的矩阵,则*()()xy z z C A B d ⨯+=,其中11111111()()xy uv ij ij uv ij uv ij uv ij uv ij u i x u i x u i x u i x v j y v i y v i y v i y d c a b c a c b c a c b +=++=++=++=++=++=++=++=+=+=+=+∑∑∑∑,而11*()uv ij z z u i x v i y C A c a ⨯+=++=+=∑,11*()uv ij z z u i x v i y C B c b ⨯+=++=+=∑,1111**()uv ij uv ij z z u i x u i x v i y v i y C A C B c a c b ⨯+=++=++=++=++=+∑∑,故左分配律成立由于乘法满足交换律,故右分配律也成立.可见在二元多项式中有如下两个特殊二元多项式:0多项式,即其每项的系数均为零,记为(,)O x y ;幺多项式,即数1,记为(,)I x y .将P 上文字,x y 二元多项式的全体记作[x,y]P ,可见其关于上述定义的加法、乘法封闭,而且关于加法满足交换律、结合律,关于乘法满足结合律、交换律,乘法对加法有分配律,以0多项式为零元,以幺多项式为幺元,综合以上,我们可以得到:定理 2.6 P 上文字,x y 二元多项式的全体[x,y]P 关于多项式的加法和多项式的乘法构成一个含幺交换环.三、二元多项式的性质1.二元多项式的字典排列法及相关性质任取二元多项式(x,y)i j ij ijf a x y =∑中的两个单项式,i j ax y 与m n bx y ,若i m >或i m =且j n >时,称()ij 先于()mn ,记作()()ij mn >,则在多项式中把i j ax y 写在m nbx y 前面,此排法为字典排列法.按字典排列法写出来的第一个系数不为零的单项式称为多项式的首项.定理3.1 当(,)0f x y ≠,(,)0g x y ≠时,(,)f x y 、(,)g x y 的积的首项等于(,)f x y 的首项与(,)g x y 的首项的积.证明 设(),()ij n n ij m m A a B b ⨯⨯==为(,)f x y 、(,)g x y 这两个二元多项式的矩阵,两个矩阵对应二元多项式的积所对应的矩阵为()uv r r C c ⨯=,由二元多项式的字典排列法可知(,)f x y 的首项对应的系数为nn a ,(,)g x y 的首项对应的系数为mm b ,(,)f x y 、(x,y)g 的积的首项对应的系数为rr c ,由多项式的乘法可知11rr ij st i s r j t r c a b +=++=+=∑,由1m n r +=-,可知rr nn mm c a b =⋅,故结论成立定理 3.2 数环P 上两个不等于零的二元多项式的乘积的次数等于这两个多项式的次数的和.证明 由多项式乘积的矩阵做法可知.2.二元多项式与二元多项式函数的关系定义 3.1 给定数环P 上的一个二元多项式(,)f x y 和P 里的任意两个数,a b ,在(,)f x y 中,把,x y 用,a b 来代替,就得到数环P 的一个确定的数,称为,x a y b ==时,二元多项式(,)f x y 的值;可用符号(,)f a b 来表示。
二元二次方程基本公式

二元二次方程基本公式
二元二次方程,也称二次多项式,是一种最基本的高等数学问题,最早可以追溯到古希腊时期。
它是一种用来描述两个变量之间关系的方程,常被用来求解一些实际问题,如定位,重力,流体,磁力等。
二元二次方程的模式是ax²+bx+c=0,其中a,b,c是实数,a不能为零。
这一方程可以用图形的方式来表示,即二次函数y=ax²+bx+c 的图形,图形的形状取决于a的正负值以及b的大小,如果a>0,那么图像的形状是一个开口向下的抛物线,如果a<0,则图像为开口向上的抛物线。
求解二元二次方程的方法有很多,最简单的方法是借助于判别式,即b²-4ac,如果判别式大于0,则方程有两个不等的实数根,如果判别式等于0,则方程有一个重根,如果判别式小于0,则方程无实数根。
另外,还有一种叫做“因式分解法”的求解方法,可以将原方程分解成一系列的乘积,然后再求解其中的各个变量,得出方程的根。
此外,还可以使用“求根公式”的方法,这是一种更快捷的求解方法,可以通过一系列的算术运算,得出方程的两个实数根。
总之,二元二次方程是一种常见的数学问题,它可以帮助我们求解
一些实际问题,也可以帮助我们更好地理解数学的概念。
所以,学习二元二次方程的知识是非常有必要的。
二元多项式求和

二元多项式求和
二元多项式求和是高中数学中的一个重要知识点,也是数学中的一种基本运算。
在学习二元多项式求和时,我们需要掌握二元多项式的定义、二元多项式的加减法、二元多项式的乘法等知识点。
我们来了解一下什么是二元多项式。
二元多项式是指含有两个变量的多项式,通常用x和y表示。
例如,3x^2y+2xy^2-5x^2y^2就是一个二元多项式。
接下来,我们来看一下二元多项式的加减法。
二元多项式的加减法与一元多项式的加减法类似,只需要将同类项合并即可。
例如,将3x^2y+2xy^2-5x^2y^2和4x^2y-3xy^2+2x^2y^2相加,我们可以先将同类项合并,得到7x^2y-xy^2-3x^2y^2。
我们来看一下二元多项式的乘法。
二元多项式的乘法需要用到分配律和结合律,具体步骤如下:
1. 将两个二元多项式中的每一项相乘,得到一系列的单项式。
2. 将这些单项式按照x和y的次数进行合并,得到一个新的二元多项式。
例如,将(3x+2y)(4x-5y)相乘,我们可以先将每一项相乘,得到12x^2-15xy+8xy-10y^2,然后将同类项合并,得到12x^2-7xy-10y^2。
二元多项式求和是高中数学中的一个重要知识点,需要我们掌握二元多项式的定义、二元多项式的加减法、二元多项式的乘法等知识点。
只有掌握了这些知识点,我们才能够在数学学习中更加得心应手。
二元对称多项式定理证明

二元对称多项式定理证明引言二元对称多项式是数学中的一个重要概念,它在代数、组合数学、几何等领域有广泛的应用。
本文将介绍二元对称多项式的定义和性质,并证明二元对称多项式定理。
一、二元对称多项式的定义首先,我们来了解一下什么是二元对称多项式。
给定两个变量x和y,我们考虑一个关于x和y的多项式P(x, y),如果对于任意的实数a和b,都有P(a, b) =P(b, a),那么这个多项式就被称为二元对称多项式。
二、二元对称多项式的例子为了更好地理解二元对称多项式,我们来看几个例子。
1. 示例一:x^2 + y^2考虑一个简单的例子:P(x, y) = x^2 + y^2。
我们可以发现,无论取什么实数a和b,都有P(a, b) = a^2 + b^2 = b^2 + a^2 = P(b, a)。
因此,这个多项式是一个二元对称多项式。
2. 示例二:xy + yx再来看另一个例子:P(x, y) = xy + yx。
同样地,我们可以验证对于任意的实数a和b,都有P(a, b) = ab + ba = ba + ab = P(b, a)。
因此,这个多项式也是一个二元对称多项式。
三、二元对称多项式的性质了解了二元对称多项式的定义和例子之后,我们来探讨一下它的性质。
1. 性质一:交换律根据定义,二元对称多项式满足P(x, y) = P(y, x),即满足交换律。
这是因为无论x和y取什么值,交换它们的位置并不会改变多项式的值。
2. 性质二:加法性如果P1(x, y)和P2(x, y)都是二元对称多项式,那么它们的和P3(x, y)也是一个二元对称多项式。
这是因为对于任意的实数a和b,有P3(a, b) = P1(a, b) +P2(a, b) = P1(b, a) + P2(b, a) = P3(b, a),满足二元对称多项式的定义。
3. 性质三:乘法性如果P1(x, y)和P2(x, y)都是二元对称多项式,那么它们的乘积P3(x, y)也是一个二元对称多项式。
两个多项式相加实验报告

两个多项式相加实验报告主要实验内容:根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题----------两个多项式相加一、运行环境:visual C++二、需求分析(1)掌握线性结构的逻辑特性和物理特性(2)掌握线性结构的各种相关算法(3)掌握将算法转换成程序的方法和步骤(4)掌握采用线性结构解决实际问题。
三、概要设计1、抽象数据类型一元多项式的定义如下:ADT Polynomial { 数据对象:D={ a i | a i∈TermSet, i=1,2,...,m, m≥0TermSet 中的每个元素包含一个表示系数的实数和表示指数的整数 }数据关系:R1={ <a i-1 ,a i >|a i-1 ,a i∈D, i=2,...,n,且a i-1中的指数值<a i中的指数值}基本操作: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。
SubtractPolyn ( &Pa, &Pb )… …} ADT Polynomial2、一元多项式的实现:typedef OrderedLinkList polynomial;// 用带表头结点的有序链表表示多项式结点的数据元素类型定义为:typedef struct { // 项的表示float coef; // 系数int expn; // 指数 term, ElemType;四、详细设计线性表的应用--多项式相加问题多项式的相加操作是线性表处理的典型例子。
数学多项式的基本运算

数学多项式的基本运算多项式是数学中常见的一种代数表达式,由一系列按照特定次数降序排列的各项相加或相减而得。
本文将介绍多项式的基本运算,包括加法、减法和乘法。
一、多项式的加法多项式的加法是指将两个或多个多项式按照相同的变量次数相加得到一个新的多项式。
具体步骤如下:1. 确定每个多项式中变量的最高次数,该次数决定了最终结果的位数。
2. 对于每个次数,将相同次数的项相加得到新的项。
3. 若某个次数在其中一个多项式中不存在,则将另一个多项式的对应次数的项直接加入到结果中。
例如,考虑如下的两个多项式:多项式 A:3x^3 + 2x^2 - 5x + 1多项式 B:2x^3 - 4x^2 + 3x - 1按照加法规则,我们可以将各项相加得到:(A + B) = (3x^3 + 2x^2 - 5x + 1) + (2x^3 - 4x^2 + 3x - 1)= (3x^3 + 2x^3) + (2x^2 - 4x^2) + (-5x + 3x) + (1 - 1)= 5x^3 - 2x^2 - 2x因此,多项式A与多项式B的和为5x^3 - 2x^2 - 2x。
二、多项式的减法多项式的减法是指将一个多项式与另一个多项式相减得到一个新的多项式。
具体步骤如下:1. 确定每个多项式中变量的最高次数,该次数决定了最终结果的位数。
2. 对于每个次数,将相同次数的项相减得到新的项。
3. 若某个次数在其中一个多项式中存在而在另一个多项式中不存在,则将该项的系数取相反数后加入到结果中。
例如,考虑如下的两个多项式:多项式 A:4x^3 - 2x^2 + 5x - 1多项式 B:2x^3 + 3x^2 - 3x + 1按照减法规则,我们可以将各项相减得到:(A - B) = (4x^3 - 2x^2 + 5x - 1) - (2x^3 + 3x^2 - 3x + 1)= (4x^3 - 2x^3) + (-2x^2 - 3x^2) + (5x + 3x) + (-1 - 1)= 2x^3 - 5x^2 + 8x - 2因此,多项式A与多项式B的差为2x^3 - 5x^2 + 8x - 2。
代数系统中的二元运算 -回复

代数系统中的二元运算-回复什么是代数系统中的二元运算?在代数系统中,二元运算是指任意两个元素之间的运算,它接受两个输入并生成一个输出。
这个概念在各种数学领域中广泛应用,例如线性代数、群论、环论等,它们都使用不同的二元运算来定义其基本结构和性质。
在本文中,我们将详细讨论代数系统中的二元运算的定义、性质和应用。
1. 二元运算的定义:在代数系统中,二元运算通常被定义为从一个集合到集合本身的映射。
形式上,如果S是一个集合,那么二元运算可以表示为:∗: S ×S →S其中,∗表示二元运算的符号,S ×S表示两个集合S的笛卡尔积,即所有可能的有序对的集合。
2. 二元运算的性质:二元运算可能具有不同的性质,包括结合律、交换律、单位元和逆元等。
- 结合律:如果对于任意的a、b和c满足(a ∗b) ∗c = a ∗(b ∗c),那么二元运算具有结合律。
- 交换律:如果对于任意的a和b满足a ∗b = b ∗a,那么二元运算具有交换律。
- 单位元:对于任意的元素a,存在一个元素e,使得a ∗e = e ∗a = a。
这个元素e被称为二元运算的单位元。
- 逆元:对于任意的元素a,存在一个元素b,使得a ∗b = b ∗a =e。
这个元素b被称为元素a的逆元。
3. 二元运算的应用:二元运算在数学中有广泛的应用,让我们来看一些具体的例子:- 加法和乘法:在实数集合上,加法和乘法都是二元运算。
它们具有交换律、结合律、单位元和逆元等性质。
- 矩阵乘法:矩阵乘法也是一种二元运算。
对于两个矩阵A和B,它们的乘积C = A ×B是通过将A的行与B的列进行线性组合得到的新矩阵。
矩阵乘法不满足交换律,但满足结合律。
- 数组连接:在计算机编程中,我们经常要将两个数组连接成一个更大的数组。
这个操作也是一种二元运算,它接受两个数组并生成一个新的数组。
- 集合运算:在集合论中,交集、并集和差集都是二元运算。
它们分别接受两个集合并生成一个新的集合。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北水利水电大学数据结
构试验报告
------二元多项式相加
2013160班
/*二元多项式的相加*/
#include <stdio.h>
#include <stdlib.h>
struct node{
int coefficient;
int expoentx;
int exponety;
struct node *next;
};
typedef struct node *ptrtonode;
ptrtonode bulidnode( void )//建立多项式链表
{
int i, j;
ptrtonode head, pnew, p;
printf("请输入多项式含有的项数\n");
scanf("%d", &i);
getchar();
if( (head = (ptrtonode)malloc( sizeof( struct node ))) == NULL ) return NULL;
head->expoentx = 0;
head->exponety = 0;
head->next = NULL;
head->coefficient = i;//将多项式的项数存在首节点
p = head;
for( j = 0; j < i; j++ )
{
if( (pnew = (ptrtonode)malloc( sizeof( struct node ))) == NULL ) return NULL;
printf("请输入系数x和y的次幂中间用空格隔开\n");
scanf("%d%d%d", &pnew->coefficient, &pnew->expoentx, &pnew->exponety);
fflush(stdin);
p->next = pnew;
p = pnew;
p->next = NULL;
}
return head;
}
ptrtonode deletezero( ptrtonode c )//删除系数为0的项
{
ptrtonode p, tmpcell;
p = c;
while( p->next != NULL )
{
if( 0 == p->next->coefficient )
{
tmpcell = p->next;
p->next = tmpcell->next;
free(tmpcell);
c->coefficient--;
}
else
p = p->next;
}
return c;
}
ptrtonode add( ptrtonode poly1, ptrtonode poly2 )
{
ptrtonode p1, p2, head, pnew, p3;
int flag;
if( (head = (ptrtonode)malloc( sizeof( struct node ))) == NULL ) return NULL;
head->expoentx = 0;
head->exponety = 0;
head->coefficient = 0;
head->next = NULL;
p1 = poly1->next;
p2 = poly2->next;
p3 = head;
while( NULL != p1 )
{
flag = 1;
p2 = poly2->next;
while( NULL != p2 )
{
if( p2->expoentx == p1->expoentx && p2->exponety == p1->exponety )
{
if( (pnew = (ptrtonode)malloc( sizeof( struct node ))) == NULL )
return NULL;
pnew->coefficient = p1->coefficient + p2->coefficient;
pnew->expoentx = p1->expoentx;
pnew->exponety = p1->exponety;
p3->next = pnew;
pnew->next = NULL;
p3 = pnew;
head->coefficient++;//得到的多项式项数
flag = 0;
break;
}
p2 = p2->next;
}
if(flag)//p2中未找到和p1可以相加的
{
if( (pnew = (ptrtonode)malloc( sizeof( struct node ))) == NULL )
return NULL;
pnew->coefficient = p1->coefficient;
pnew->expoentx = p1->expoentx;
pnew->exponety = p1->exponety;
p3->next = pnew;
pnew->next = NULL;
p3 = pnew;
head->coefficient++;
}
p1 = p1->next;
}
p1 = poly1->next;
p2 = poly2->next;
while( NULL != p2 )
{
flag = 1;
p1 = poly1->next;
while( NULL != p1 )
{
if( p2->expoentx == p1->expoentx && p2->exponety == p1->exponety )
{
flag = 0;
break;
}
p1 = p1->next;
}
if(flag)//p2中未相加的项
{
if( (pnew = (ptrtonode)malloc( sizeof( struct node ))) == NULL )
return NULL;
pnew->coefficient = p2->coefficient;
pnew->expoentx = p2->expoentx;
pnew->exponety = p2->exponety;
p3->next = pnew;
pnew->next = NULL;
p3 = pnew;
head->coefficient++;
}
p2 = p2->next;
}
return deletezero( head );
}
void printandfree( ptrtonode c )//打印并且释放内存
{
ptrtonode p1, p2;
p1 = c->next;
free(c);
while( NULL != p1 )
{
p2 = p1;
printf("%dx^%dy^%d+", p1->coefficient, p1->expoentx, p1->exponety);
p1 = p1->next;
free(p2);
}
printf("\b \n");
}。