前面學習了線性表的概念、順序儲存方式和鏈式儲存方式,本節課我們來 學習線性表應用。本節通過一元多項式的表示及相加的問題,作為線性表應用 的典型,總結了本章學習的線性表的兩種儲存方式、運算實現技術等主要內 容。
一元多項式可按公升冪的形式寫成:
pn(x) = p0+p1xe1+p2xe2+…+pnxen,
其中,ei為第 i項的指數,pi是指數 ei的項的係數,(且 1≤e1≤e2≤…≤en)
在計算機內,pn(x)可以用乙個線性表 p來表示:
p= (p0,p1,p2, …,pn )
設有兩個一元多項式 pn(x) 和 qm(x),假設 m一元多項式的操作可以利用線性表來處理。因此,一元多項式也有順序儲存和鏈式儲存兩種方法。『
對於一元多項式:
pn(x) = p0+p1xe1+p2xe2+…+pnxen
有兩種順序儲存方式:
適用於儲存非零項少且指數高的一元多項式,此時只儲存非零項的係數 和指數即可。
例如:r(x)=1+5x10000+7x20000 (10000和20000為指數)
結點結構體定義如下:
struct polynode
polynode ,
* polylist;
例:建立一元多項式鏈式儲存演算法【演算法思想】通過鍵盤輸入一組多項式的係數和指數,用尾插法建立一元 多項式的鍊錶。以輸入係數 0 為結束標誌,並約定建立多項式鍊錶時,總 是按指數從小到大的順序排列。
【演算法描述】
polylist polycreate()
rear->next=
null
;/*將表的最後乙個結點的 next 置 null,以示表結束*/
為了保證「和多項式」中各項仍按公升冪排列,在兩個多項式中:
①指數相同項的對應係數相加,若和不為零,則構成「和多項式」中的一項; ②指數不相同的項仍按公升冪順序復抄到「和多項式」中。
【演算法思想】
以單鏈表 polya 和 polyb 分別表示兩個一元多項式 a 和 b, a+b 的求和運算,就等同於單鏈表的插入問題(將單鏈表 polyb 中的結點插入到單鏈表 polya中),因此 「和多項式「中的結點無需另生成。
為實現處理,設 p、q 分別指向單鏈表 polya 和 polyb 的當前項,比較 p、q 結點的指數項,由此得到下列運算規則:
① 若p->exp< q->exp,則結點 p所指的結點應是「和多項式」中的 一項,令指標 p後移;
② 若p->exp=q->exp,則將兩個結點中的係數相加,當和不為零時 修改結點 p的係數域,釋放 q結點;若和為零,則和多項式中無此項,從 a中 刪去 p結點,同時釋放 p和 q結點。
③ 若p->exp>q->exp,則結點 q所指的結點應是「和多項式」中的 一項,將結點 q插入在結點 p之前,且令指標 q在原來的鍊錶上後移;
【演算法描述】
void
polyadd
(polylist polya, polylist polyb)
/*將兩個多項式相加,然後將和多項式存放在多項式 polya 中,並將多項式 ployb刪除*/
else
if(p->exp=
=q->exp)
/*規則⑵:若指數相等,則相應的係數相加*/
else
}else}if
(p!=
null
)/*多項式 a 中還有剩餘,則將剩餘的結點加入到和多項式 中*/
tail ->next=p;
else
/*否則,將 b 中的結點加入到和多項式中*/
tail ->next=q;
}
假設 a 多項式有 m 項,b 多項式有 n 項,則上述演算法的時間複雜度為 o(m+n)
推廣: 通過對多項式加法的介紹,可以將其推廣到實現兩個多項式的相乘,因為 乘法可以分解為一系列的加法運算。
線性表(順序表示,鏈式表示,一元多項式相加)
1.線性表的定義和特點 元素之間的關係是線性,同一張線性表中的元素必定具有相同的特徵。線性表是乙個相當靈活的資料,長度可以根據需要增長或縮短,對元素進行訪問,插入和刪除。抽象資料型別線性表的定義如下 adt list 資料關係 r 基本操作 1.初始化 initlist l 2.取值 getelem...
線性表 一元多項式的運算
polylist polycreate polylist head rear next null return head 思路 將兩個多項式從頭掃瞄,指數相同項相加,如果為0則釋放該空間,如果非0則構成一項,最終指數不同的項按指數公升序排列。用變數p q分別指向鏈a b中的第一結點,把結果存放在a中...
3 線性表的應用 一元多項式的計算
一元多項式可以很容易的表示為線性表如 2 x 8 9 x 5 5 x 2 8,構成的線性表為,線性表的每個資料元素為的形式。考慮到多項式的次數可能很高且變化很大,我們採用雙向鍊錶的形式來作為多項式的邏輯結構。我們假設輸入的多項式按照次數的高低從前往後排列,不滿足這一條件的使用排序來達到這樣的效果。這...