一元稀疏多項式計算器

2021-10-13 19:58:36 字數 3048 閱讀 6137

實驗 一元稀疏多項式計算器

****

一、實驗目的

1.了解線性表的鏈式儲存結構,熟練掌握鍊錶。

2.了解作為鍊錶的多項式存貯方式。

3.熟悉掌握多項式加法的演算法。

二、 實驗原理

順序儲存的線性表有一些弱點,其一,插入與刪除元素需要大量移動元素;其二,預先分配儲存空間時必須按最大的空間來分配。其三,表長難以擴充。所以,必須引入鏈式儲存結構。鏈式儲存結構的特點是用一組任意的儲存單元儲存線性鍊錶的資料元素,與順序表的區別在於鏈式儲存的儲存單元可以是連續的,也可以是不連續的。為了實現這種結構,鍊錶採取由兩部分資訊組成資料元素ai的儲存映像,稱為結點。結點包括兩個域,其中儲存資料資訊的域稱為資料域,儲存直接後繼資訊的稱為指標域。指標域中儲存的資訊叫做指標或鏈。這樣,n個結點鏈結成乙個鍊錶,即為線性表(a1,a2,a3,···,an)。符號多項式的操作,已經成為表處理的典型用例,在數學上,乙個一元多項式pn(x)可以按公升冪寫成:pn(x)=p0+p1·x+p2·(x的2次冪)+···+pn·(x的n次冪)。它由n+1個係數唯一確定。因此,在計算機裡,它可用乙個線性表p來表示:p=(p0,p1,p2,···,pn), 顯然,此種表示僅適於順序儲存結構,在通常的應用中,多項式的次數變化很高且很大,將造成記憶體的很大浪費。

三、演算法分析

資料結構分析:

由於一元稀疏表示式的表長難以確定,如果用順序儲存結構的話,必須預先分配儲存空間按最大的空間分配,所以必須引入鏈式儲存結構。

typedef struct lnodelnode,*linklist;

演算法函式分析:

(1)鍊錶的生成

建立了兩個帶頭結點的鍊錶la,lb然後輸入la係數和指數和lb係數和指數

(2)鍊錶的合併

讓lc=la,設立三個指標pa,pb,pc,pa=la->next,pb=lb->next,pc=lc

然後執行迴圈當pa和pb都不為空的時候,先判斷係數相同就加,不同就判斷大小,先加係數小的,特別注意lc鍊錶用的空間是la的,這樣做可以節省空間並且利於操作。最後當有任意乙個鍊錶為空的時候 執行pc->next=pa?pa:pb,意思是 當pa不為空的時候pc->next=pa,當pa為空的時候,直接把pb指標後面的鍊錶加到pc->next即可。

演算法實現:

1.源程式(見附錄)

2.測試結構截圖

四、 思考問題

1、 鍊錶的特性和優點是什麼?

鍊錶的特點是用一組任意的儲存單元儲存線性表的資料元素,這組元素可以是連續的也可以是不連續的,它不要求邏輯上相鄰的元素在物理位置上也相鄰,因此它沒有順序結構儲存的弱點,插入刪除乙個元素時,時間主要耗費在移動元素上,但同時失去了順序錶可隨機訪問的優點,即查詢乙個元素的時候需要遍歷整個鍊錶。鍊錶的優點是插入刪除方便,並且長度可變,在空間上會相對於順序儲存節省空間。

2、 修改實驗程式將係數域改寫為實數域,並且修改相應的程式語句。

只需將第十二行typedef double elemtype;中的double改為int 即可。

3、 試將多項式輸出按公升冪排序。

思路是:先算鍊錶長度,後將多項式係數和指數存入結構體node陣列中,sort排序制定cmp規則即可。時間複雜度o(nlogn);

五、總結體會

1.對一些細節還是不夠熟悉掌握,半年之前寫的**不寫注釋的部分得理解好一會才行

2.學到了對單鏈表的應用,合併鍊錶的時候節省空間。

3.還是對基礎掌握的不夠紮實,需要進一步多加練習。

附錄:源**:

//n為鍊錶結點個數

p->next=

null;}

void

add(linklist &la,linklist &lb,linklist &lc)

else

if(x==0)

}else

if(pa-

>expn

>expn)

//係數不同先加係數小的

else

if(pb-

>expn

>expn)

pc->next=pa?pa:pb;

//pa為空時直接把pb接上去到pc }}

status initlist_l

(linklist &l)

//初始化鍊錶

l->next=

null

;return ok;

}void

output_l

(linklist &l)

sort

(node,node+len,cmp)

;for

(int i=

0;iintmain()

/*1 1 2 2 3 3 4 4

1 1 2 2 3 3 4 4 5 5

*/

一元稀疏多項式計算器(加減)

思路 1.首先是建立鍊錶,再儲存資料。2.進行多項式的運算。通過每一項的比較,判斷指數是否相等,相等就進行合併,不相等就不操作並找到下一項。這道題主要是考察了鍊錶的操作,估計很多人都會被繞暈了,不知道指標指向了 我已開始也敗在了指向問題上,在加法操作中,把pa,pb鍊錶記憶體的資料元素全都改變了,又...

完整版一元稀疏多項式計算器

一元稀疏多項式計算器 問題描述 設計乙個一元稀疏多項式簡單計算器。基本要求 一元稀疏多項式簡單計算器的基本功能是 1 輸出並建立多項式 2 輸出多項式,輸出形式為整數序列 n,c1,e1,c2,e2,cn,en,其中n是多項式的項數,ci和ei分別是第i項的係數和指數,序列按指數降序排列 3 多項式...

一元多項式加法計算器

include include typedef struct polynode polynode,polylist 輸入資料,邊輸入邊排序進鍊表 void inputdataandsortingdata polylist polynomial,int n 初始化多項式鍊錶 void init pol...