資料結構(11)線性表之一元多項式表示及相加

2021-07-10 13:08:27 字數 2579 閱讀 6943

符號多項式處理,是表處理的典型範例。而這章就是主要就本經典案例進行討論。

數學上,乙個一元多項式pn

(x) 可以按照公升冪寫成pn

(x)=

p0+p

1x+p

2x2+

...+

pnxn

它由n+1個係數唯一確定。因此在計算機裡面,它可以由乙個線性表p來表示: p=

(p0,

p1,p

2,..

.,pn

) 每一項的指數i隱含在其係數pi

的序號裡。 假設q

m(x)

是一元m 次多項式,同樣可用線性表q來表示: q=

(q0,

q1,q

2,..

.,qm

)為了不失去一般性,我們假設

m<

n ,則兩個多項式相加的結果rn

x=pn

(x)+

qmx 可用線性表r來表示:r=

(p0+

q0,p

1+q1

,p2+

q2,.

..,p

m+qm

,pm+

1,..

.,pn

) 顯然,我們可以對p、

q和r 採用順序儲存機構,使得多項式相加的演算法定義十分簡潔。至此,一元多項式的表示及相加問題似乎已經解決了。然而,在通常的應用中,多項式的次數可能很高而且變化很大,使得順序儲存結構的最大長度難以確定。特別是在處理式子的次數很高變化很大,使得順序儲存結構的最大長度很難確定。特別是形如s(

x)=1

+3x1

0000+2

x20000

的多項式時,就要用一長度為20001的線性表來表示,表中卻只有3個非0元素,這種對記憶體空間的浪費是應當要避免的,但是如果只儲存非零係數則顯然必須同時儲存相應的指數。

一般情況下,一元n次多項式可以寫成:pn

(x)=

p1xe

1+p2

xe2+

p3xe

3+..

.+pm

xem

pi

是指數為ei

的項的非零係數,且滿足 0≤

e1<..>.=n

若是用乙個長度為m且每個元素有兩個資料項(係數項和指數項)的線性表 ((

p1,e

1),(

p2,e

2),.

..,,

(pm,

em))

便可唯一確定多項式pn

(x) 。

最壞情況下,n+1(=m)個係數都不為零,則比只儲存每項係數的方案要多一倍的資料。但是對於前面涉及到的s(

x)類的多項式(式子的次數很高變化很大),將大大節省空間。

若只對多項式進行「求值」等不改變多項式係數和指數的運算,採用類似順序表的順序儲存結構。否則,用鍊錶結構。

adt polynomial

資料關係:r1=

基本操作:

creatpolyn(&p,m)

操作結果:輸入m項的係數和指數,建立一元多項式p。

destroypolyn(&p)

初始條件:一元多項式p已存在。

操作結果:銷毀一元多項式p。

printpolyn(p)

初始條件:一元多項式p已存在。

操作結果:列印輸出一元多項式p。

polynlength(p)

初始條件:一元多項式p已存在。

操作結果:返回一元多項式p中的項數。

addpolyn(&pa,&pb)

初始條件:一元多項式pa和pb已存在。

操作結果:完成多項式相加運算,即:pa=pa+pb,並銷毀一元多項式pb。

subtractpolyn(&pa,&pb)

初始條件:一元多項式pa和pb已存在。

操作結果:完成多項式相減運算,即:pa=pa-pb,並銷毀一元多項式pb。

multiplypolyn(&pa,&pb)

初始條件:一元多項式pa和pb已存在。

操作結果:完成多項式相乘運算,即:pa=pa×pb,並銷毀一元多項式pb。

}adt polynomial

實現此定義,需要採用鏈式儲存結構

一元多項式相加原則:對於兩個一元多項式中所有指數相同的項,對應係數相加,若其和不為零,則構成「和多項式「中的一項,對於兩個一元多項式中所有指數不相同的項,則分別復抄寫到」和多項式「中去。

按照polynomial定義,」和多項式「鍊錶中的結點無需另外生成,而應從兩個多項式的鍊錶中摘取。

運算規則:

假設指標qa和qb分別指向多項式a和多項式b中當前進行比較的某個結點,則想比較兩個結點中的指數值。存在下列的三種情況:

資料結構實踐教程 線性表(一元多項式相加)

一 實驗要求 使用者根據自己的需求輸入兩個一元多項式,要求能夠顯示輸入的一元多項式,再將這兩個一元多項式相加,輸出結果。二 實現 include include include include include using namespace std typedef struct plnodeplno...

線性表 一元多項式的運算

polylist polycreate polylist head rear next null return head 思路 將兩個多項式從頭掃瞄,指數相同項相加,如果為0則釋放該空間,如果非0則構成一項,最終指數不同的項按指數公升序排列。用變數p q分別指向鏈a b中的第一結點,把結果存放在a中...

資料結構 一元多項式

void initlist polynode l 初始化多項式單鏈表 int getlength polynode l 求多項式單鏈表的長度 polynode getelem polynode l,int i 返回多項式單鏈表中第i個結點的指標 polynode locate polynode l,...