資料結構 實驗一 一元多項式的乘法與加法運算

2021-10-10 21:46:32 字數 3179 閱讀 4254

1.實驗目的

熟練掌握鏈式線性表的基本操作,以及在多項式運算上的應用。

2.實驗內容

設計函式分別求兩個一元多項式的乘積與和。

3.實驗要求

(1)輸人說明:輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入乙個多項式非零項係數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。

(2)輸出說明:輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。

(3)測試用例:

序號 輸入 輸出 說明

1 請輸入多項式非零項的個數:4

請以指數遞降方式輸入多項式非零項的係數和指數:3 4 -5 2 6 1 -2 0

請輸入多項式非零項的個數:3

請以指數遞降方式輸入多項式非零項的係數和指數:5 20 -7 4 3 1 進行加法運算後的多項式的係數和指數(以指數遞降順序輸出):5 20 -4 4 -5 2 9 1 -2 0

進行乘法運算後的多項式的係數和指數(以指數遞降順序輸出):15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1 一般情況

2 請輸入多項式非零項的個數:2

請以指數遞降方式輸入多項式非零項的係數和指數:1 2 1 0

請輸入多項式非零項的個數:2

請以指數遞降方式輸入多項式非零項的係數和指數:1 2 -1 0 進行加法運算後的多項式的係數和指數(以指數遞降順序輸出):2 2

進行乘法運算後的多項式的係數和指數(以指數遞降順序輸出):1 4 -1 0 同類項合併時有抵消

3 請輸入多項式非零項的個數:2

請以指數遞降方式輸入多項式非零項的係數和指數:-1000 1000 1000 0

請輸入多項式非零項的個數:2

請以指數遞降方式輸入多項式非零項的係數和指數:1000 1000 -1000 0 進行加法運算後的多項式的係數和指數(以指數遞降順序輸出):0 0

進行乘法運算後的多項式的係數和指數(以指數遞降順序輸出):-1000000 2000 2000000 1000 -1000000 0 結果有零多項式

4 請輸入多項式非零項的個數:0

請以指數遞降方式輸入多項式非零項的係數和指數:

請輸入多項式非零項的個數:1

請以指數遞降方式輸入多項式非零項的係數和指數:999 1000 進行加法運算後的多項式的係數和指數(以指數遞降順序輸出):999 1000

進行乘法運算後的多項式的係數和指數(以指數遞降順序輸出):0 0 輸入有零多項式和常數多項式

4.解決思路

(1)問題分析

由於多項式可能非常稀疏,所以宜採用鏈式線性表表示,僅儲存非零項。又由於題目不僅要求計算乘積,還要求計算和式,所以在計算中不能破壞原始輸入的兩個多項式,需要建立新的鍊錶儲存結果多項式。

多項式的加法運算很簡單,只要逐項比較兩多項式的非零項,將指數較大的項加到結果多項式的末尾即可。這裡要注意指數相同的項相加後係數為零的情況,以及零多項式的特殊處理。

對於兩個多項式p1和p2相乘,可有兩種求解思路:

①利用多項式的加法運算,即將多項式p2的每一項分別與p1多項式相乘,其結果也是乙個多項式。應用多項式的加法運算,逐步將這些多項式累加,就可獲得結果。

②直接運算,逐項插入。將多項式p2的每一項分別與p1各項相乘,將所乘形成的新項插人到中間結果多項式中。該中間結果多項式一開始為空,並以指數遞減的順序維持當前的運算中間狀態。當有新項需要插人時,相當於在乙個遞減鍊錶中插入乙個新結點,並維持遞減順序。如果插入的新結點的指數與鍊錶中某結點的指數一樣,則將其係數相加;如果係數相加後的結果為零,則從中間結果鍊錶中刪除相應結點,否則就更改鍊錶中系數值;如果不存在指數相同結點,則將新結點插入到相應位置。

(2)實現要點

不管是採用上述哪種方法,都需要使用乙個鍊錶p表示當前運算的中間狀態(也是乙個多項式),p一開始是空的。 如果直接使用多項式加法運算,則每次將p2的某項與pl相乘的結果生成乙個新多項式tmpp,然後將tmpp加到p中,使p保持目前的運算結果。如果採用直接插入各項的方法,則是將p2的某項與p1的某項相乘的結果(係數相乘,指數相加),按順序插入到p中。

注意:採用模組化程式設計,將求和函式與求乘積函式分別實現,會帶來很大方便。

5.實驗思考題

本題以鍊錶的方式表示多項式,讀者可以改用陣列的方式實現相應的多項式乘法與加法運算。

6.資料結構及相關函式說明

#include

#include

typedef

struct node polynode;

typedef polynode *ptrtonode;

//指向結點的指標

typedef polynode *polynomial;

//指向多項式的指標

polynomial readpoly()

//讀入多項式

return head;

}void

printpoly

(polynomial p)

while

(p)printf

("\n");

}polynomial addpoly

(polynomial p1,polynomial p2)

else

if(p1->expon>p2->expon)

else

p1=p1->next;

p2=p2->next;}}

if(p1!=

null

)else

return head;

}polynomial multipoly

(polynomial p1,polynomial p2)

else

return

null

;//其中一表為空,便返回null

while

(t2!=

null

) t1=t1->next;

while

(t1)

t1 =

addpoly

( t1, t2 )

;//每次都將得到的兩個鍊錶先加起來

t1=t1->next;

}return t1;

}int

main()

資料結構實驗 實驗二 一元多項式相加

一 實驗目的 1 了解鏈式儲存結構的基本知識 2 掌握演算法思想和資料結構的描述 3 結合一元多項式相加的運算規則。二 實驗內容 結合書上第41頁的例子,採用鏈式儲存結構,將兩個線性鍊錶表示的一元多項式相加,並輸出。此一元多項式遵循多項式相加運算規則 對於兩個一元多項式中存在指數相同的項時,其對應係...

資料結構 實驗二(一元多項式相加)

結合書上實驗指導書上的例子,採用鏈式儲存結構,將兩個線性鍊錶表示的一元多項式相加,並輸出。此一元多項式遵循多項式相加運算規則 對於兩個一元多項式中存在指數相同的項時,其對應係數相加。合併後係數和為零時,刪除 和多項式 中此項 合併後係數和不為零時,則構成 和多項式 中的一項。對於兩個一元多項式中存在...

資料結構 一元多項式

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