Easyfun Easy fun Easy to play

資料結構II

今天繼續介紹資料結構的常用的種類

鏈結串列(Linked List)

鏈結串列是由許多相同資料型態的項目,依照特定順序排列而成的線性串列,在電腦中位置是不連續、隨機的方式儲存,好處是資料的插入或刪除都方便。當有新資料加入就像系統要一塊記憶體空間,資料刪除後就把空間還給系統,不需要大量移動資料。

在動態配置記憶體空間時,最常使用的就是「單向鏈結串列」(Single Linked List)。一個單向鏈結串列節點是由兩個欄位,即資料欄及指標欄(鏈結欄位)組成,而指標欄將會指向下一個元素的記憶體所在位置。

像是網頁中的超連結是鏈結串列的概念,每個超連結都指向另一個網頁,你可以點擊這些連結在不同的網頁之間做導航。

在單向鏈結串列中第一個節點是

alt text

單向鏈結具有’值’和’下一個’字段指向節點行中的下節點,可對單向連結執行的操作包括插入、刪除和遍歷

另一個是「雙向鏈結串列」(Doubly Linked List)。由一組稱為節點的順序記錄組成,每個節點包含三個字段:兩個鏈接字段和一個數據字段。開始和結束前一個和下一個鏈傑分別指向終止符,通常是空節點。

alt text

他的優點是不需先知道資料型別大小,充分利用動態記憶體管理。但也因為動態配置記憶體因素會也一些缺點,空間使用過大、較差的CPU快取、不允許隨機存取。

堆疊(Stack)

堆疊是一堆相同資料型態的組合,所有的動作都在最上面進行,遵循後進先出(Last In First Out, LIFO)的特性。最後進去堆疊的元素首先被取出,就像碟盤子一樣,最後放在頂部的盤子最先被拿走。

遵守著

  • 只能從堆疊的最上面存取資料

  • 資料的存取符合「後進先出」的原則

alt text

堆疊的基本運作:

堆疊  
create 建立一個空堆疊
push 存放頂端資料,並傳回新堆疊
pop 刪除頂端資料,並傳回新堆疊
isEmpty 判斷堆疊是否為空堆疊,是則回傳True,不是回傳False
full 判斷堆疊是否已滿,是則回傳True,不是回傳False

佇列(Queue)

佇列和堆疊都是一種有序串列,也屬於抽象資料型態,他所有加入與刪除的動作都發生在不同的兩端,遵循先進先出(First In First Out)的特性。

遵守著

  • 資料存取「先進先出」的原則

  • 擁有兩種基本動作:加入與刪除,且用front與back兩個指標來分別指向佇列的前端與尾端

alt text

create 建立一個空佇列
add 將新資料加入佇列的尾端,傳回新佇列
pop 刪除佇列前端的資料,傳回新佇列
front 傳回佇列前端的值
empty 若佇列為空集合,傳回真,否則傳回值