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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

•重点:线性表的顺序存储; 线性表的链式存储; 顺序表的插入、删除 单链表的插入、删除
•难点:双向链表的系列操作 线性表的应用。
• 2.4 线性表的应用举例
一元多项式的表示及相加 – 一元多项式的表示:
Pn (x) P0 P1 x P2 x 2 Pn x n
可用线性表P表示 P (P0 , P1 , P2 ,, Pn ) 但对S(x)这样的多项式浪费空间
S (x) 1 3x1000 2x 20000
一般Pn (x) P1 x e1 P2 x e2 Pm x em 其中0 e1 e2 em(Pi为非零系数)
int x; p=pa->next; q=pb->next; pre=pa; while((p!=NULL) && ((q!=NULL)) { if(p->exp<q->exp)
{ pre=p; p=p->next;} else if(p->exp==q->exp) { x=p->coef+q->coef;
B(x) 8x 22x7 9x8
C(x) A(x) B(x) 7 11x 22x7 5x17
A
-1
70
31
98
5 17 ^
B
-1
81
22 7 -9 8 ^
C
-1
70
11 1 22 7
5 17 ^
运算规则
设p,q分别指向A,B中某一结点,p,q初值是第一结点
p->exp < q->exp: p结点是结果多项式
用数据域含两个数据项的线性表表示
P1,e1,P2,e2,Pm,em
其存储结构可以用顺序存储结构,也可以用单链表
–单链表的结点定义
typedef struct node { int coef,exp;
coef exp next
struct node *next;
}JD; 一元多项式相加
A(x) 7 3x 9x8 5x17
中的一 项,p后移,q不动
比较 p->exp与
q->exp
p->exp > q->exp: q结点是结果多项式中
的一 项,将q插在p之前,q后移,p不动
p->exp = q->exp:
系数相加
0:从A表中删去p所指 结点 释放p,q,p,q后移
0:修改p系数域, 释放q,p,q后移
若q==NULL,结束 直到p或q为NULL 若p==NULL,将B中剩余部分连到A上即可
if(x!=0){ p->coef=x; pre=p;} else { pre->next=p->next; free(p);}
p=pre->next; u=q; q=q->next; free(u); } else { u=q->next;q->next=p;pre->next=q;
pre=q; q=u; } } if(q!=NULL) pre->next=q; free(pb); }
算法描述
pre
p pre
p pre
pp
p
ppaa
--11
77 00
31111 111
99 88
55 1177 ^^
ppbb
--11
88 11
2222 77
--99 88 ^^ q=NULL
q
prqe
q
pa
-1
70
11 1
22 7
5 17 ^
Ch2_7.c
Βιβλιοθήκη Baidu
void add_poly(JD *pa,JD *pb) { JD *p,*q,*u,*pre;
相关文档
最新文档