【例】一元多項式及其運算
一元多項式:f(
x)=a
0+a1
x+..
.+an
−1xn
−1+a
nsx
主要運算:多項式相加、相減、相乘等
方法1:順序儲存結構直接表示
陣列各分量對應多項式各項: a[
i]:項
xi的系
數ai
例如:f(
x)=4
x5−3
x2+1
表示成:
問題:表示x+
x2000
浪費很多記憶體
方法2:順序結構表示非零項
每個非零項ai
xi涉及兩個資訊:係數ai
和指數i
,可以將乙個多項式看成乙個(a
i,i)
二元組的集合。
用結構陣列表示:陣列分量是由係數ai
、指數i 組成的結構,對應乙個非零項
例如:p(x
)=9x
12+15x
8+3x
2p(x
)=26x
19−4x
8−13x
6+82
下標i01
2……下標i012
3……係數a
i 9153
——係數ai
26-4-13
82——指數i
1282
——指數i19
860——
注意:按指數大小有序儲存
相加過程:從頭開始,比較兩個多項式當前對應項的指數。
方法3:鍊錶結構儲存非零項
鍊錶中每個結點儲存多項式中的乙個非零項,包括係數和指數兩個資料域以及乙個指標域。
coef
expon
link
typedef
struct polynode *polynomial;
struct polynode
例如: p(
x)=9
x12+
15x8+
3x2
p(x)=26x
19−4
x8−13
x6+82
鍊錶儲存形式為:
線性表:由同型別資料元素構成有序序列的線性結構
線性表的抽象資料型別描述
型別名稱:線性表(list)
資料物件集:線性表是n(
>=0)
個元素構
成的有序
序列(a
1,a2
,...
,an)
操作集:線性表l∈
list
,整數i
表示位置
,元素x
∈ele
ment
type
線性表的順序儲存實現
訪問下標為i的元素:l.data[i]或ptrl->data[i]線性表的長度:l.last+1或ptrl->last+1主要操作的實現
list makeempty()
malloc函式(memory allocation 動態記憶體分配)原型:extern void *malloc(unsigned int num_bytes);
標頭檔案:#include
int find(elementtype x,list ptrl)
查詢成功平均比較次數:(n+1)/2平均時間效能:o(n)先移動,後插入
ptrl->data[j+1]=ptrl->data[j]; //將$ai~an倒序向後移動
ptrl->data[i-1]=x; //新元素插入
ptrl->last++; //last仍指向最後元素
return;
}平均移動次數:n/2平均時間效能:o(n)後面的元素依次前移
}平均移動次數:(n-1)/2平均時間效能:o(n)
資料結構 2 1線性表及其實現
線性結構是資料結構裡面最基礎最簡單的一種資料結構型別,最典型的一種叫做線性表。舉個例子 如何用程式語言來表示這樣的乙個一元多項式及其相應的操作運算呢?順序儲存結構直接表示 用乙個陣列儲存第i項的係數ai,而指數對應這個分量的下標 這樣帶來的問題是什麼呢?假如我要表示x的兩千次方,陣列的大小就需要20...
資料結構2 1 線性表及其實現
操作集 線性表 list,元素x elementtype,線性表的基本操作有 線性表的順序儲存實現 typedef struct lnode list struct lnode struct lnode l list ptrl 訪問下標為i的變數 l.data i ptrl data i 返回線性表...
浙大資料結構 2 1線性表及其實現
eg1 一元多項式及其運算 方法一 順序儲存結構直接表示。使用陣列下標表示指數,對應值表示係數。弊端 不適合非零項多 指數大的多項式。方法二 順序儲存結構表示非零項。使用二維陣列儲存指數和係數。弊端 不適合多項式的運算。方法三 鍊錶儲存非零項。由同型別資料元素,構成有序序列的線性結構。型別名稱 線性...