3 線性表的應用 一元多項式的計算

2021-06-21 12:47:59 字數 2161 閱讀 6555

一元多項式可以很容易的表示為線性表如:2*x^8-9*x^5+5*x^2+8,構成的線性表為,  ,  ,  },線性表的每個資料元素為的形式。考慮到多項式的次數可能很高且變化很大,我們採用雙向鍊錶的形式來作為多項式的邏輯結構。

我們假設輸入的多項式按照次數的高低從前往後排列,不滿足這一條件的使用排序來達到這樣的效果。這樣進行多項式的加、減操作時,只需要分配乙個新的鍊錶,從前往後遍歷兩個相加、減的多項式,比較多項式項次數的高低來插入較高次數的多項式到新鍊錶,次數相等的多項式項加、減對應的基數後再插入。多項式的乘法就是展開各個項相乘後再累加起來,原理是一樣的。

下面是部分實現程式,其中注意完整程式加減法都提供了乙個slow版本和乙個fast版本:slow版本就是新分配乙個鍊錶,遍歷多項式的兩個煉表項複製它們的值來插入,需要動態開闢記憶體,相對較慢;fast版本利用了指標的特性,直接將各個項串接起來,相對較快,但是這樣導致原來相加、減的兩個多項式項的鍊錶發生了變化,這是我們不希望看到的,如果非要這個函式,必須先複製兩個多項式做備份,這裡放上這個fast函式只是為了補充說明鍊錶合併的方便性。

鍊錶儲存結構

typedef struct

jwlistelem;

typedef struct tagjwlistnode

jwlistnode, *pjwlistnode, jwlist, *pjwlist;

typedef pjwlist poly ;
多項式操作函式

/*

功能:將兩個從高次到低次排序好的多項式相加

輸入:多項式p1和p2

輸出:相加後的多項式

說明:由於結果的生成要不斷的重新申請空間執行速度相對較慢,但是p1和p2保持不變

*/poly polyaddslow(poly p1, poly p2)

else if(ptemp1->elem.superscript < ptemp2->elem.superscript)

else

ptemp1 = ptemp1->pnext;

ptemp2 = ptemp2->pnext;

} }//將剩餘的全部插在鍊錶結尾

while(ptemp1 != null)

while(ptemp2 != null)

return padd;}/*

功能:將兩個從高次到低次排序好的多項式相減

輸入:多項式p1和p2,p1-p2

輸出:相減後的多項式

說明:由於結果的生成要不斷的重新申請空間執行速度相對較慢,但是p1和p2保持不變

*/poly polysubtractslow(poly p1, poly p2)

else if(ptemp1->elem.superscript < ptemp2->elem.superscript)

else

ptemp1 = ptemp1->pnext;

ptemp2 = ptemp2->pnext;

} }//將剩餘的全部插在鍊錶結尾

while(ptemp1 != null)

while(ptemp2 != null)

return psub;}/*

功能:將兩個從高次到低次排序好的多項式相乘

輸入:兩個多項式p1和p2

輸出:相乘後的多項式

*/poly polymultiply(poly p1, poly p2)

//將已有結果累加

polysort(pline);//調整ptemp1的負上標和ptemp2相乘後上標排列順序還是從高到低!!!

pmulti = polyaddslow(pmultitemp, pline);

//刪除上一次展開計算的結果

jwlistdestroy(pmultitemp);

jwlistdestroy(pline);

pmultitemp = pmulti;

ptemp1 = ptemp1->pnext;

} return pmulti;

}

這裡放上示例計算結果供對比

完整程式

線性表 一元多項式的運算

polylist polycreate polylist head rear next null return head 思路 將兩個多項式從頭掃瞄,指數相同項相加,如果為0則釋放該空間,如果非0則構成一項,最終指數不同的項按指數公升序排列。用變數p q分別指向鏈a b中的第一結點,把結果存放在a中...

2 9線性表應用 一元多項式的表示及相加

前面學習了線性表的概念 順序儲存方式和鏈式儲存方式,本節課我們來 學習線性表應用。本節通過一元多項式的表示及相加的問題,作為線性表應用 的典型,總結了本章學習的線性表的兩種儲存方式 運算實現技術等主要內 容。一元多項式可按公升冪的形式寫成 pn x p0 p1xe1 p2xe2 pnxen,其中,e...

一元稀疏多項式的計算

能夠按照指數降序排列建立並輸出多項式 能夠完成兩個多項式的相加 相減,並將結果輸出 以鏈式儲存結構實現多項式。include include includeusing namespace std typedef struct pnode pnode,polynomial void createpol...