一元多项式的表示和相加
- time:2017-09-13 10:48
- what:针对数据结构的一元多项式的表示和相加,进行图解的详细分析和描述
- where:一元多项式的合并
- why:图解能对算法有更清晰的了解
- who:自己
- when:在学习数据结构的一元多项式的表示和相加时
$1.一元多项式的表示
一元多项式
p(x)=p0+p1x+p2x2+…+pnxn
由n+1个系数唯一确定。则在计算机中可用线性表(
p0,p1,p2,...,pn
)表示。既然是线性表,就可以用顺序表和链表来实现。两种不同实现方式的元素类型定义如下:
- (1)顺序存储表示的类型
typedef sturct
{
float coef; /*系数部分*/
int expn; /*指数部分*/
}ElemType;
- (2)链式存储表示的类型
typedef sturct ploy
{
float coef; /*系数部分*/
int expn; /*指数部分*/
sturct ploy *next;
}Ploy;
$2.一元多项式的相加
不失一般性,设有两个一元多项式:
P(x)=p0+p1x+p2x2+…+pnxn
Q(x)=q0+q1x+q2x2+…+qmxm(m<n)
R(x)=P(x)+Q(x)
R(x)由线性表
R((p0+q0),(p1+q1),(p2+q2),…,(pm+qm),…,pn)
唯一表示。
$3.链式存储表示的相加
当采用链式存储表示时,根据结点类型定义,凡是系数为0的项不在链表中出现,从而可以大大减少链表的长度。
一元多项式相加的实质是:
- 指数不同: 是链表的合并。
- 指数相同: 系数相加,和为0,去掉结点,和不为0,修改结点的系数域。
$3.1算法之一:
就在原来两个多项式链表的基础上进行相加,相加后原来两个多项式链表就不在存在。当然再要对原来两个多项式进行其它操作就不允许了。
$3.2算法之二:
对两个多项式链表进行相加,生成一个新的相加后的结果多项式链表,原来两个多项式链表依然存在,不发生任何改变,如果要再对原来两个多项式进行其它操作也不影响。