线性表实现一元多项式的表示及相加(C语言实现)【线性表】
- 一元多項式的表示及相加
- 一元多項式抽象數據類型的動態鏈式表示
- 操作舉例:構造多項式
一元多項式的表示及相加
符號多項式的表示及其操作是線性表處理的典型用例。
一個一元多項式 Pn(x) 可以表示為 :
Pn(x)=p0+p1x+p2x2+…+pnxn
(最多有 n+1 項)它由 n+1 個系數唯一確定。
因此可用一個線性表 P 來表示:P = ( p0, p1, p2, …, pn )
每一項的指數 i 隱含在其系數 pi 的序號里。
假設 Qm(x) 是一元 m 次多項式,同樣可用線性表 Q 表示:
Q = (q0, q1, q2, …, qm)
若 m < n,則兩個多項式相加的結果 Rn(x)= Pn(x)+ Qm(x)
可用線性表 R 來表示:
R = (p0+ q0, p1+ q1, p2+q2, …, pm+ qm, pm+1, …, pn)
但是只存儲系數的方案對存在大量零系數的多項式并不適用。
例如:
S(x) = 1 + 3x10000 + 2x20000
要用一個長度為 20001 的線性表來表示,表中僅有 3 個非零系數,會浪費大量存儲空間。
若只存儲非零系數項,則必須同時存儲相應的指數。
一般一元 n 次多項式 (只表示非零系數項) 可寫成:
其中 pi≠0 (i =1, 2, …, m),n = em > em-1 > … > e1 >= 0
用一個長度為 m 且每個數據元素有兩個數據項(系數項和指數項)的線性表 (( p1, e1), ( p2, e2), …, ( pm, em)) 便可唯一確定多項式 Pn(x)。 對于 S(x) 類的多項式將大大節省空間。
所以這里我們選擇鏈式存儲結構。
例:假設多項式
A17(x)=7+3x+9x8+5x17
與 B8(x)=8x+22x7-9x8
已經用單鏈表表示,其頭指針分別為 A 與 B, 如下圖所示。
將兩個多項式相加為 C17(x)=7+11x+22x7+5x17
一元多項式抽象數據類型的動態鏈式表示
typedef struct{float coef; //系數int exp; //指數 }term, ElemType;typedef LinkList Polynomal; Polynomal pl;操作舉例:構造多項式
void CreatePolyn(Polynomal &p,int m) {//構建一個有序鏈表p,其中元素為結構體,有m個元素InitList(p); h=p;e.coef=0.0;e.expn=-1;SetCurElem(h,e);//設置頭節點的數據元素for(i=1;i<m+1;i++){//向結構體變量e中輸入系數和指數if(!LocateElem(p,e,q,(*cmp)())){if(MakeNode(s,e)) //生成節點s;s是指針變量InsFirst(q,s); //將s節點插在q節點之前 }} }總結
以上是生活随笔為你收集整理的线性表实现一元多项式的表示及相加(C语言实现)【线性表】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 派生类的继承方式【C++继承】
- 下一篇: 线性表的动态顺序存储和实现(C语言实现)