分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
本文針對資料結構基礎系列網路課程(2):線性表的實踐專案。
【專案 - 多項式求和】
用單鏈表儲存一元多項式,並實現兩個多項式的加法。
多項式的通式是pn(
x)=a
nxn+
an−1
xn−1
+...
+a1x
+a0p
n(x)
=anx
n+an
−1xn
−1+.
..+a
1x+a
0為例,儲存這個多項式的陣列如下圖:
可以看出,這種方案適合對某些多項式的處理。但是,在處理一些次數高但項數少的多項式時,存在浪費空間的現象,會有很多閒置的0。
可以使用如下定義的單鏈表結構儲存多項式:鍊錶中的每乙個結點是多項式中的一項,結點的資料域包括指數和係數兩部分,由指標域連線起多項式中的各項。
typedef struct pnode //定義單鏈表結點型別,儲存多項式中的一項,鍊錶構成多項式 polynode;
用於表示多項式的鍊錶將如下圖所示,在建立多項式的鍊錶時,已經令結點按指數由大到小的順序排列。
2、多項式加法在鍊錶儲存結構下的實現
鍊錶儲存結構下,多項式加法的實現 在如上定義的單鏈表儲存結構基礎上,討論實現多項式加法的演算法。
兩個多項式相加,其規則是對具有相同指數的項,令其係數相加。設兩個待相加的多項式的鍊錶的頭指標分別為head1(第乙個多項式)和head2(第二個多項式),兩者的和儲存到鍊錶head1中。只需要先將head1和head2鍊錶的首結點作為當前結點(分別用p1和p2指向)開始檢測,在遍歷鍊錶的過程中,分情況作如下處理:
(1)若兩個多項式中當前結點的指數值相同,則它們的係數相加,結果儲存到p1結點,並將p2結點刪除。如果相加後的係數不為0,p1指向第乙個多項式的下乙個結點,準備隨後的工作,否則,不儲存係數為0的項,將當前p1結點刪除。
(2)當兩個多項式中對應結點的指數值不相等時,若p1指向的結點的指數大,則p1簡單地指向下一結點即可;而p2指向的結點大時,需要將p2結點插入到p1前,然後p2再重新指回到第二個多項式中的下一結點,繼續進行處理。
(3)檢測過程直到其中的任乙個鍊錶結束。若p1不為空,第乙個多項式中的剩餘項已經在鍊錶中,不作處理,如果p2不為空,只需要將p2鏈結到相加後的第乙個多項式末尾。
上面的討論假設多項式鍊錶中,已經按指數由大到小排序,在加法之前,採取多種手段保證這一前提成立。
[[參考解答]]
#include
#include
#define max 20 //多項式最多項數
typedef
struct
//定義存放多項式的陣列型別 polyarray;typedef
struct pnode //定義單鏈表結點型別,儲存多項式中的一項,鍊錶構成多項式 polynode;void disppoly(polynode *l) //輸出多項式 printf("\n");}void destroylist(polynode *&l) //銷毀單鏈表 free(p);}void createlistr(polynode *&l, polyarray a, int n) //尾插法建表 r->next=null; //終端結點next域置為null}void sort(polynode *&head) //按exp域遞減排序 }}void add(polynode *ha,polynode *hb,polynode *&hc) //求兩有序集合的並,完成加法 else
if (pa->exp
exp) else
//pa->exp=pb->exp pa=pa->next; pb=pb->next; } } if (pb!=null) pa=pb; //複製餘下的結點
while (pa!=null) tc->next=null;}int main(),,,}; polyarray b= ,,,,}; createlistr(ha,a,4); createlistr(hb,b,5); printf("原多項式a: "); disppoly(ha); printf("原多項式b: "); disppoly(hb); sort(ha); sort(hb); printf("有序多項式a: "); disppoly(ha); printf("有序多項式b: "); disppoly(hb); add(ha,hb,hc); printf("多項式相加: "); disppoly(hc); destroylist(ha); destroylist(hb); destroylist(hc); return
0;}
給我老師的人工智慧教程打call!
資料結構實踐 多項式求和
檔名稱 main.cpp,完成日期 2015年10月5日 版本號 vc 6.0 問題描述 用單鏈表儲存一元多項式,並實現兩個多項式的加法。輸入描述 無 程式輸出 演算法結果 include include define max 20 多項式最多項數 typedef struct 定義存放多項式的陣列...
鍊錶多項式求和
雖然很簡單,但是還是花了我2個多小時才完成,哎.對於兩個一元多項式所有指數相同的項,對應係數相加 若其和不為零,則作為和多項式的一項插入到和多項式鍊錶中去 如指數不相同,則將指數數值較小的插入到和多項式鍊錶中去 注意 多項式鍊錶中的節點不需生成,而應該從兩個多項式鍊錶中摘取 include usin...
多項式求和 鍊錶
此題有乙個坑,就是因為數太大會超時,但試幾組資料就會發現,當它到一定的數時,結果就不變了,可以縮小計算範圍 多項式求和 time limit 1000ms memory limit 65536k 多項式描述如下 1 1 2 1 3 1 4 1 5 1 6 先請你求出多項式前n項的和。第一行輸入乙個數...