1、陣列:
陣列是使用一塊連續的記憶體空間儲存資料,
儲存的資料的個數在分配記憶體的時候就是確定的:
訪問陣列中第 n 個資料的時間花費是 o(1) ;
但是要在陣列中查詢乙個指定的資料則是 o(n);
陣列應用場景:
1、資料比較少;
2、經常做的運算是按序號訪問資料元素;
3、構建線性表較穩定;
4、陣列更容易實現,任何高階語言都支援;
2、鍊錶
鍊錶是在非連續的記憶體單元中儲存資料,
並且通過指標將各個記憶體單元鏈結在一起,最有乙個節點的指標指向 null ;
鍊錶不需要提前分配固定大小儲存空間,當需要儲存資料的時候分配一塊記憶體並將這塊記憶體插入鍊錶中;
在鍊錶中查詢第 n 個資料以及查詢指定的資料的時間複雜度是 o(n) ,
但是插入和刪除資料的時間複雜度是 o(1) ;
鍊錶應用場景:
1、對線性表的長度或者規模難以估計;
2、 頻繁做插入刪除操作;
3、構建動態性比較強的線性表;
3、棧
棧實現了一種後進先出的語義 (lifo) ,可以使用陣列或者是鍊錶來實現它:
對於棧中的資料的所有操作都是在棧的頂部完成的,
只可以檢視棧頂部的資料,只能夠向棧的頂部壓入資料,也只能從棧的頂部彈出資料。
棧應用場景:
1、括號問題的求解;
2、表示式的轉換和求值;
3、函式呼叫和遞迴實現;
4、深度優先搜尋遍歷等;
4、佇列
佇列實現了先入先出的語義 (fifo) 。佇列也可以使用陣列和鍊錶來實現:
佇列只允許在隊尾新增資料,在隊頭刪除資料,但是可以檢視隊頭和隊尾的資料;
佇列的儲存方式可以使用線性表進行儲存,也可以使用鍊錶進行儲存。
還有一種是雙端佇列,在兩端都可以插入和刪除:
佇列應用場景:
1、計算機系統中各種資源的管理;
2、訊息緩衝器的管理;
3、廣度優先搜尋遍歷等;
5、堆
堆像一棵倒過來的樹
堆是一種經過排序的樹形資料結構,每個結點都有乙個值。
通常我們所說的堆的資料結構,是指二叉堆。
堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是乙個堆。
堆可以分為最大堆和最小堆:
最大堆:每個父節點都大於孩子節點
最小堆:每個父節點都小於孩子節點
堆應用場景:
1、優先順序佇列的實現;
2、大資料的處理;
3、堆排的實現:
陣列 鍊錶 堆疊和佇列
資料結構 是指相互之間存在一種或多種特定關係的資料元素的集合。聽起來是不是很抽象,簡單理解 資料結構就是描述物件間邏輯關係的學科。比如 佇列就是一種先進先出的邏輯結構,棧是一種先進後出的邏輯結構,家譜是一種樹形的邏輯結構!初學資料結構的時候很不理解為什麼有 棧 這個東西 佇列很容易理解 無論購物就餐...
陣列鍊錶堆疊和佇列
陣列鍊錶堆疊和佇列 陣列鍊錶堆疊和佇列是最基本的資料結構,任何程式都會涉及到其中的一種或多種。陣列是最最基本的資料結構,很多語言都內建支援陣列。陣列是使用一塊連續的記憶體空間儲存資料,儲存的資料的個數在分配記憶體的時候就是確定的 圖1.1包含n 個資料的陣列 訪問陣列中第 n個資料的時間花費是 o ...
陣列 鍊錶 堆疊和佇列
資料結構 是指相互之間存在一種或多種特定關係的資料元素的集合。聽起來是不是很抽象,簡單理解 資料結構就是描述物件間邏輯關係的學科。比如 佇列就是一種先進先出的邏輯結構,棧是一種先進後出的邏輯結構,家譜是一種樹形的邏輯結構!初學資料結構的時候很不理解為什麼有 棧 這個東西 佇列很容易理解 無論購物就餐...