Pn(x) =
p0+
p1x1+
p2x2+
p3x3+……+
pnxn,
序列
P:
P = (
p0,
p1,
p2,
p3,……,
pn);
同理
Q:
Q = (
q0,
q1,
q2,
q3,……,
qm);
令
Rn(x) =
Pn(x) +
Qn(x) ; 若m < n,则
R =(
p0+
q0,
p1+
q1,
p2+
q2,……,
pm+
qm,
p(m+1),……,
pn), 则多项式的的即可用顺序表存储,也可用单链表存储
1.顺序存储
1.1 不管系数是否为0,全部按幂次顺序存储,即
p[0]存储
p0,
p[1]存储
p1,……,
p[n]存储
pn,此时元素下标对应
x 的指数
S(x) =
5+
6x9+
7xn
实际清况下,非零项往往很少,
n 很大时,势必造成空间的极大浪费
1.2 只存储非零项,需要为系数项
pi,指数项
ei分别分配存储空间
((
p1,
e1), (
p2,
e2), ……,(
pn,
en))
2.链式存储
/* --------------------------一元多项式的相加运算-------------------------- */
/* 1.指数相同的项,系数相加,若系数和不为0,则构成新项
2.系数和不同的项,不变;连接到单链表上
本质:在运算规则上两单链表的合并
*/
void addPoly(PolyList polyA, PolyList polyB)
{
PolyNode *p, *q, *tail, *s;
int sum;
p = polyA->next;
q = polyB->next;
tail = polyA;
while (p && q)
{
if (p->exp < q->exp)
{
tail->next = p;
tail = p;
p = p->next;
}
else if (p->exp > q->exp)
{
tail->next = q;
tail = q;
q = q->next;
}
else
{
sum = p->coef + q->coef;
if (sum != 0)
{
p->coef = sum;
tail->next = p; tail = p; p = p->next;
s = q; q = q->next; free(s);
}
else
{
s = p; p = p->next; free(s);
s = q; q = q->next; free(s);
}
}
}
}