符號多項式處理,是表處理的典型範例。而這章就是主要就本經典案例進行討論。
數學上,乙個一元多項式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若是用乙個長度為m且每個元素有兩個資料項(係數項和指數項)的線性表 ((是指數為ei
的項的非零係數,且滿足 0≤
e1<..>.=n
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,...