![数据结构(C语言实现)](https://wfqqreader-1252317822.image.myqcloud.com/cover/699/43806699/b_43806699.jpg)
上QQ阅读APP看书,第一时间看更新
2.5.1 一元多项式的表示
一元多项式An(x)可以写成降幂的形式:
An(x)=anxn+an-1xn-1+…+a1x+a0
如果an≠0,则An(x)被称为n阶多项式。一个n阶多项式由n+1个系数构成。一个n阶多项式的系数可以用线性表(an,an-1,…,a1,a0)表示。
线性表的存储可以采用顺序存储结构,这样使多项式的一些操作变得更加简单。可以定义一个维数为n+1的数组a[n+1],a[n]存放系数an,a[n-1]存放系数an-1,…,a[0]存放系数a0。但是,实际情况是多项式的阶数(最高的指数项)可能会很高,多项式的每个项的指数会差别很大,这可能会浪费很多的存储空间。例如,一个多项式
P(x)=10x2001+x+1
若采用顺序存储,则存放系数需要2002个存储空间,但是存储的有用数据只有3个。若只存储非零系数项,还必须存储相应的指数信息。
一元多项式An(x)=anxn+an-1xn-1+…+a1x+a0的系数和指数同时存放,可以表示成一个线性表,线性表的每一个数据元素由一个二元组构成。因此,多项式An(x)可以表示成线性表:
((an,n),(an-1,n-1),…,(a1,1),(a0,0))
多项式P(x)可以表示成((10,2001),(1,1),(1,0))的形式。
因此,多项式可以采用链式存储方式表示,每一项可以表示成一个结点,结点的结构由3个域组成:存放系数的coef域,存放指数的expn域和指向下一个结点的next指针域。如图2.37所示。
结点结构类型描述如下:
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/58_01.jpg?sign=1739115180-dlSTeIdWEZ4Llkp1rTaduvdCeid2L9Hq-0-7ebdaac2aac2e8a71acd722fd60a07c3)
图2.37 多项式的结点结构
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/58_02.jpg?sign=1739115180-ixvZ913LRqLf5JFx8EFmaJhOjlVyIzMB-0-841b86318f25dd402b2853409313b840)
例如,多项式S(x)=7x6+3x4-3x2+6可以表示成链表,如图2.38所示。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/58_03.jpg?sign=1739115180-NvmQB0JzJBN2B9RLhAuXT3yjyW5HDqbR-0-e919222ad124303092091191b1654b00)
图2.38 一元多项式的链表表示