一元多項式的表示及相加

2021-06-28 09:53:05 字數 1850 閱讀 3389

符號多項式的操作,已經成為表處理的典型用例。

我們對多項式採用順序儲存結構,可以只儲存每項係數,指數隱含在係數的序號裡。在這種情況下,如果多項式的次數很高且變化很大,那麼便很難來確定順序儲存的最大長度,另外對記憶體空間也極為浪費。

一般情況下,對於那些多項式的次數很高,但項數不多的多項式我們可以將一元n次多項式可寫成

其中,pi是指數為ei的項的非零係數,且滿足

若用乙個長度為m且每個元素有兩個資料項(係數項和指數項)的線性表

便可惟一確定多項式。

在最壞的情況下,n+1(=m)個係數都不為零,則比只儲存每項係數的方案要多儲存一倍的資料。不過對於那種多項式次數很高且項數不是很多的多項式來說卻可以大大節省空間。

對應於線性表的兩種儲存結構,由係數項和指數項定義的一元多項式也可以有兩種儲存表示方法。在實際的應用程式中取用那一種,則要視多項式的作何種運算而定。

若只對多項式進行「求值」等不改變多項式的係數和指數的運算,則採用類似於順序表的順序儲存結構即可,否則應採用鏈式儲存表示。

下面主要說下如何利用線性鍊錶的基本操作來實現一元多項式的運算。

對一元多項式的抽象資料型別定義可以:

資料物件中每個定義的元素都包含乙個表示係數的實數和表示指數的整數。

資料關係中每個元素的指數值都小於後乙個元素的指數值。

基本操作有:

creatpolyn(&p,m)

輸入m項的係數和指數,建立一元多項式p。

destroypolyn(&p)

銷毀一元多項式p。

printpolyn(p)

列印輸出一元多項式p。

polynlength(p)

返回一元多項式p中的項數。

addpolyn(&pa,&pb)

一元多項式pa和pb相加賦給pa,並銷毀pb。

subtractpolyn(&pa,&pb)

一元多項式pa和pb相減賦給pa,並銷毀pb。

multiplypolyn(&pa,&pb)

一元多項式pa和pb相乘賦給pa,並銷毀pb。

實現上述定義的一元多項式,顯然應採用鏈式儲存結構。

例如下面兩個一元多項式a和b,裡面每個結點表示多項式中的一項。

如何實現這種線性表表示的多項式的加法運算呢?

根據一元多項式相加的運算規則:對於兩個一元多項式中所有指數相同的項,對應係數相加,若其和不為零,剛構成「和多項式」中的一項;對於兩個一元多項式中所有指數不相同的項,則分別復抄「和多項式」中去。

在此,按照上述抽象資料型別polynomial中基本操作的定義,「和多項式」鍊錶中的結點無需另生成,而應該從兩個多項式的鍊錶中摘取。其運算規則如下:

假設指標qa和qb分別指向多項式a和多項式b中當前進行比較的某個結點,則比較兩個結點中的指數項,有下列3種情況:1、指標qa所指結點的指數值 小於 指標qb所指結點的指數值,則應摘取qa指標所指結點插入到「和多項式」鍊錶中去;2、指標qa所指結點的指數值 大於 指標qb所指結點的指數值,則應摘取qb指標所指結點插入到「和多項式」鍊錶中去;指標qa所指結點的指數值 等於 指標qb所指結點的指數值,則將兩個結點中的係數相加,若和不為零,則修改qa所指結點的系數值,同時釋放qb所指結點;若和為零,則釋放指標qa和qb所指結點。

例如上圖中兩個鍊錶表示的多項式a和b相加得到的「和多項式」鍊錶如下圖所示,圖中的長方框表示已被釋放的結點。

一元多項式的表示及相加

題目 若a a0x0 a1x1 a2x2 a3x3 anxn b b0x0 b1x1 b2x2 b3x3 bnxn 求a b 順序儲存結構的實現 實現乙個陣列每兩個元素為乙個單位,左邊指數,右邊是係數。從係數為0,一直寫到最大的那個係數。利用鍊錶的思維 上大,上移 上小,下插入上。上移名 上下相等,...

一元多項式的表示及相加

對於一元多項式,可以用線性表來處理,可以採用順序儲存或者是鏈式儲存 一 一元多項式的順序儲存表示 1 一元多項式pn x 只儲存該一元多項式各項的係數,每個係數所對應的指數項則隱含在儲存係數的順序表的下標中。即p 0 存係數p0,對應為 2 只儲存非零項,此時只需要儲存非零項係數和非零項指數兩部分,...

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

一元多項式的表示及相加 對於符號多項式的各種操作,實際上都可以利用線性表來處理。比較典型的是關於一元多項式的處理。在數學上,乙個一元多項式p n x 可按公升冪的形式寫成 pn x p 0 p1x p 2x 2 p 3x 3 p nx n。它實際上可以由n 1個係數唯一確定。因此,在計算機內,可以用...