2007 08 25一元多項式的表示及相加

2021-04-13 07:44:49 字數 2696 閱讀 6346

一元多項式的表示及相加

對於符號多項式的各種操作,實際上都可以利用線性表來處理。比較典型的是關於一元多項式的處理。在數學上,乙個一元多項式p

n(x)可按公升冪的形式寫成:pn(x)=p

0+p1x+p

2x 2+p

3x 3+…+p

nx n。它實際上可以由n+1個係數唯一確定。因此,在計算機內,可以用乙個線性表p來表示:p=(p

0,p1,p

2,…,p

n)其中每一項的指數隱含在其係數的序號裡了。

假設q m(x)是乙個一元多項式,則它也可以用乙個線性表q來表示,即q=(q

0,q1,q

2,…,q

n)若假設mn(x)=p

n(x)+q

m(x),也可以用線性表r來表示:r(p

0+q0,p

1+q1,p

2+q2,,p

m+qm,p

m+1,…,p

n)。我們可以採用順序表儲存結構來實現順序表的方法,使得多項式的相加的演算法定義十分簡單,即p[0]存係數p

0,p[1]存係數p

1,…,p[n]存係數p

n,對應單元的內容相加即可。但是在通常的應用中,多項式的指數有時可能會很高並且變化很大。例如:r(x)=1+5x

10000+7x

20000

若採用順序儲存,則需要20001個空間,而儲存的有用資料只有三個,這無疑是一種浪費。若只儲存非零係數項,則必須儲存相應的指數資訊才行。

假設一元多項式p

n(x)=p

1x e1+p

2x e2+…+p

mx em,其中p

ie i的項的係數(且0≤e

1≤e2≤…≤e

m=n),若只存在非零係數,則多項式中每一項有兩項構成(指數項和係數項),用線性表來表示,即((p

1,e1),(p

2,e2),…,(p

m,em))。

採用這樣的方法儲存,在最壞情況下,即n+1個係數都不為零,則比只儲存係數的方法多儲存1倍的資料。但對於非零係數多的多項式則不宜採用這種表示。

對與線性表的兩種儲存結構,一元多項式也有儲存表示方法。在實際應用中,可以是具體情況而定。下面將學習到用單鏈表實現一元多項式相加運算的方法。

(1)用單鏈表儲存多項式的結點結構如下:

typedef struct polynode

polynoce,*polylist;

(2)通過鍵盤輸入一組多項式的係數和指標,以輸入係數0為結束標誌,並約定建立多項式鍊錶時,總是按指數從大到小的順序排列。

演算法描述:從鍵盤接受輸入的係數和指標;用尾插法建立一元多項式的鍊錶。

polylist polycreate()

rear-next=null;/*將表的最後乙個結點的nest置null,以示結束*/

return (head);

}

演算法        用尾插法建立一元多項式的鍊錶

圖2.19所示為兩個多項式的單鏈表,分別表示多項式a(x)=7+3x+9x

8+5x

17和多項式b(x)=8x+22x

7-9x

8。多項式相加的運算規則是:兩個多項式中所有指數相同的項的對應係數相加,若和不為零,則構成「和多項式」中的一項;所有指數不相同的項均復抄到「和多項式」中。以單鏈表作為儲存結構,並且「和多項式」中的結點無需 生成,則可看成是將多項式b加到多項式a中,由此的到下列運算規則(設p、q分別指向多項式a、b的一項,比較結點的指數項):

若p->expexp,則結點p所指的結點應是「和多項式」中的一項,令指標p後移;

若p->exp>q->exp,則結點q所指的結點應是「和多項式」中的一項,將結點q插入在結點p之前,且令指標q在原來的鍊錶上後移;

若p->exp=q->exp,則將兩個結點中的係數相加,當和不為零時修改結點p的係數域,釋放q結點;若和為零,則和多項式中無此項,從a中刪去p結點,同時釋放p和q結點。

void polyadd(polylist polya;polylist polyb)

/*此函式用於將兩個多項式相加,然後將和多項式存放在多項式polya中,並將多項式ployb刪除*/

else if(p->exp==q->exp)/*若指數相等,則相應的係數相加*/

else

}

else

}

if(p!=null)/*多項式a中還有剩餘,則將剩餘的結點加入到和多項式中*/

pre->next=p;

else/*否則,將b中的結點加入到和多項式中*/

pre->next=q;

}

演算法        多項式相加

假設a多項式有m項,b多項式有n項,則上述演算法的時間複雜度為o(m+n)。

圖2.20所示為圖2.19中兩個多項式的和,其中孤立的結點代表被釋放的結點。

通過對多項式加法的介紹,我們可以將其推廣到實現兩個多項式的相乘,因為乘法可以分解為一系列的加法運算。

一元多項式

一元多項式 功能 1 求解2個一元多項式的和 2 求解2個一元多項式的差 3 列印一元多項式 注 3 這個本來不算是乙個功能,但是發現列印一元多項式的時候問題很多。例如 1x應該列印成 x,x 0不應該應該列印出來 1.結點的定義 typedef struct polynomial polynomi...

一元多項式

include include using namespace std 定義結構體 typedef struct polynode polynode,polylist 建立關於多項式結構體的單鏈表,以係數0結束輸入 polylist polycreate 尾插法建立單鏈表 rear next nul...

一元多項式求導

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 設計函式求一元多項式的導數。輸入格式 以指數遞降方式輸入多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出格式 以與輸入相同的格式輸出導數多項式非零項的係數和指數。數...