一元多項式的運算包括加法減法和乘法,而多項式的加法和乘法都可以依靠多項式的加法來實現,所以本文僅僅講解如何用鍊錶實現一元多項式的加法。
數學上的一元多項式的表示是p(x) = p0 + p1 * x + p2 * x^2 + p3 * x^3 + … + pn * x^n;
用鍊錶來表示就是p = (p0, p1, p2, … , pn);
所謂的多項式相加就是同類項的合併,也就是兩條鍊錶的合併。
採用單鏈表儲存多項式,鍊錶的每個結點表示多項式的每一非零項,鍊錶應該按有序排列。
結點如下:
struct polynode ;
類定義如下:
class
polylinklist ;
下面先就兩個一元多項式鍊錶lp和lq相加為例說明:
如圖所示,qa, qb分別指向兩條鍊錶的當前結點,pa, pb分別指向當前結點的前驅。
開始時四個指標分別指向兩個單鏈表的頭結點和開始結點:
兩個多項式求和實際上是對結點qa的指數和結點qb的指數進行比較,這會出現一下三種情況:
(1)qa指數<qb指數,則結點qa應為結果中的乙個結點,將指標qa和pa向後移動乙個結點,qb和pb不移動。如圖:
(2)qa的指數=qb的指數,則qa和qb所指向的是」同類項」。先將qb的係數加到qa上,再判斷是否為零。若相加的結果不為零,則將指標qa和pa向後移,再將qb向後移,再刪除原結點qb,如圖:
若相加的結果為零,則表明結果中無此項,同時刪除結點qa和結點qb,並個將4個指標分別後移,如圖所示:
(3)qa指數>qb指數,則結點qb應為結果中的乙個結點,將qb插入到第乙個單鏈表中結點qa之前,pa指向新插入的結點,再將指標pb和qb向後移。
上述情況是針對指標qa和qb均不為空的情況,在進行指數比較的過程中,如果qa已空而qb非空,此時直接將第二個鍊錶中剩餘的結點連線到第乙個鍊錶的後面。
下面是具體的**:
void polylinklist::polyadd(polylinklist & lb) else
if (qa->exp > qb->exp) else else }}
if (qb !=
null)
}
資料結構,多項式運算,C ,鍊錶
include include include 標準庫標頭檔案包含函式exit using namespace std struct node 建立結構體 typedef node polynomial 重新命名 struct lnode typedef lnode link void create...
資料結構 鍊錶 多項式加法
問題描述 用單鏈表儲存一元多項式,並實現兩個多項式的加法。可以看出,這種方案適合對某些多項式的處理。但是,在處理一些次數高但項數少的多項式時,存在浪費空間的現象,會有很多閒置的0。可以使用如下定義的單鏈表結構儲存多項式 鍊錶中的每乙個結點是多項式中的一項,結點的資料域包括指數和係數兩部分,由指標域連...
資料結構 鍊錶,多項式相加
指標真的是蠻重要的,基礎不牢怨不得別人,鍊錶差點給我學自閉,尤其是資料結構演算法這塊 下面分享乙個很簡單的鍊錶應用 多項式相加 ps 多項式錄入還不完善,故只能按指數從小往大挨個順序輸入 水平較差請多諒解,應用基礎 c 雖然可讀性不高但耐心點初學者應該都能讀懂 1.面向結構的程式語言 將程式按照功能...