ds筆記(2)順序表與鍊錶
一、
順序表---線性表的順序儲存
1
.內涵:
線性表的順序儲存指用一組位址連續的儲存
單元依次儲存線性表的資料元素。這稱為順序表。
2
.特點:
* 儲存單元位址連續(需要一段連續空間)
* 邏輯上相鄰的資料元素其物理位置也相鄰
* 隨機訪問
* 儲存密度為大(
100%
)3
.優點:
* 不需要額外空間來儲存元素之間的關係
* 可以隨機訪問任一元素
4
.缺點:
* 插入和刪除運算需要移動大量元素
* 需要一段連續空間
* 預先分配足夠大的空間
* 表的容量難以擴充
(可以通過使用動態陣列資料型別來描述順序表而改進最後兩個缺點
)5
.儲存位置的計算
對線性表
l,設每個元素佔
k個儲存單元,則有:
遞推關係:
loc(ai+1)=loc(ai )+k
任一元素
ai+1
的儲存位置:
loc(ai)=loc(a1 )+(i-1)*k (其中
1<= i <=listlength(l))
二、
鍊錶---線性表的鏈式儲存
1
.內涵:
線性表的鏈式儲存指用任意的儲存單元存放線性表中的元素,每個元素與其前驅和(或)後繼之間的關係用指標來儲存。這稱為鍊錶。
術語:
* 結點
* 資料域
* 指標域
* 頭指標
* 頭結點
分類:
* 單鏈表
* 迴圈鍊錶
* 雙向鍊錶
* 雙向迴圈鍊錶
* 靜態鍊錶
2
.資料型別描述
//----------
用結構指標描述
------------
typedefstructlnode lnode, *linklist
3
.單鏈表上插入運算的實現
t(n)=o(n)
4.鍊錶應用:一元多
項式的相加
一元多項式的鏈式儲存結構
//----------
用結構指標描述
------------
typedefstructterm term, *linklist
一元多項式相加的運算規則
「和多項式
」中結點無需另生成,可看成是將多項式b加到
多項式a
上。設p和q
分別指向多項式a和
b中某一結點,比較結點中的指數項:
若p^.exp則
p結點應是
「和多項式
」中的一項,令
p指標向後移;
若p^.exp>q^.exp,則q
結點應是
「和多項式
」中的一項,令
q結點插入在
p結點之前,且
q指標在原來的鍊錶上後移;
若p^.exp=q^.exp,
則將兩個結點中的係數相加,當和不為零時修改
p結點中的係數域,釋放
q結點;反之,
「和多項式
」中沒有此項,從
a表中刪去
p結點,同時釋放p和
q結點。
演算法如下:
procadd_poly(varpa:polyty; pb:polytp);
p:=pa^.next;q:=pb^.next;
pre:=pa;pc:=pa;
while(p!=nil)and(q!=nil)do
case
p^.exp
[pre:=p;p:=p^.next];
p^.exp=q^.exp:
[x:=p^.coef+q^.coef;
ifx!=0
then[ p^.coef:=x; pre:=p]
else[pre^.next:=p^.next;
dispose(p)];
p:=pre^.next;u:=q;
q:=q^.next;
dispose(u)]
p^.exp>q^.exp:
[u:=q^.next; q^.next:=p;pre^.next:=q; pre:=q;q:=u ]
ifq!= nilthenpre^.next:= q;
dispose(pb);
endp;
順序表與鍊錶
單向鍊錶 雙向鍊錶 迴圈鍊錶 插入刪除過程要注意,初始指標應指向鍊錶尾節點 若當插入到頭前時,找不到前驅節點 當在更新尾節點時需要更新頭指標 鍊錶排序使用氣泡排序最為適合 資料結構 結構定義 結構操作 include include include include define malloc2 my...
順序表與鍊錶
它是n個具有相同特性的資料元素的有限序列。線性表是一種在實際中廣泛使用的資料結構,常見的線性表 順序表 鍊錶 棧 佇列 字串 邏輯上連續,物理上不一定連續 儲存方式 通常是陣列或者鏈式結構 順序表是用一段實體地址連續的儲存單元依次儲存資料元素的線性結構,一般情況下採用陣列儲存。在陣列上完成資料的增刪...
順序表與鍊錶( )
鍊錶連續的儲存空間儲存任意元素。12 345結構定義 1 size 9 2 length 5 3 data type include include typedef struct vector vector void init vector vector,int size void clear ve...