(1)堆:什麼是堆?又該怎麼理解呢?
①堆通常是乙個可以被看做一棵樹的陣列物件。堆總是滿足下列性質:
·堆中某個節點的值總是不大於或不小於其父節點的值;
·堆總是一棵完全二叉樹。
將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。常見的堆有二叉堆、斐波那契堆等。
②堆是在程式執行時,而不是在程式編譯時,申請某個大小的記憶體空間。即動態分配記憶體,對其訪問和對一般記憶體的訪問沒有區別。
③堆是應用程式在執行的時候請求作業系統分配給自己記憶體,一般是申請/給予的過程。
④堆是指程式執行時申請的動態記憶體,而棧只是指一種使用堆的方法(即先進後出)。
(2)(堆)棧:
性質:lifo後進先出
標頭檔案:
#include
定義:stacks;
stacks1;
操作:
入棧,如例:
s.push(x);
出棧,如例:
s.pop();
注意,出棧操作只是刪除棧頂元素,並不返回該元素。
訪問棧頂,如例:
s.top()
判斷棧空,如例:
s.empty()
,當棧空時,返回
true
。訪問棧中的元素個數,如例:
s.size()。
(3)佇列:
性質:fifo先進先出
標頭檔案:#include
定義:queueq1;
queueq2;
優先佇列定義:
priority_queueq1;
priority_queue< pair> q2; //
注意在兩個尖括號之間一定要留空格。
priority_queue, greater> q3; //
定義小的先出隊
priority_queue< int,vector,greater>//
注意空格!!
操作:入隊,如例:
q.push(x); 將x
接到佇列的末端。
出隊,如例:
q.pop();
彈出佇列的第乙個元素,注意,並不會返回被彈出元素的值。
訪問隊首元素,如例:
q.front()
,即最早被壓入佇列的元素。
訪問隊尾元素,如例:
q.back()
,即最後被壓入佇列的元素。
判斷佇列空,如例:
q.empty()
,當佇列空時,返回
true
。訪問佇列中的元素個數,如例:
q.size()
特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。
建立順序佇列結構必須為其靜態分配或動態申請一片連續的儲存空間,並設定兩個指標進行管理。乙個是隊頭指標front,它指向隊頭元素;另乙個是隊尾指標rear,它指向下乙個入隊元素的儲存位置。
(4):區別和聯絡:
1:堆疊資料結構區別
堆(資料結構):堆可以被看成是一棵樹,如:堆排序。
棧(資料結構):一種先進後出的資料結構。
2:堆、棧、佇列之間的區別是?
堆是在程式執行時,而不是在程式編譯時,申請某個大小的記憶體空間。即動態分配記憶體,對其訪問和對一般記憶體的訪問沒有區別。
棧就是乙個桶,後放進去的先拿出來,它下面本來有的東西要等它出來之後才能出來。(後進先出)
列只能在隊頭做刪除操作,在隊尾做插入操作.而棧只能在棧頂做插入和刪除操作。(先進先出)
陣列 鍊錶 堆疊 佇列
1 陣列 陣列是使用一塊連續的記憶體空間儲存資料,儲存的資料的個數在分配記憶體的時候就是確定的 訪問陣列中第 n 個資料的時間花費是 o 1 但是要在陣列中查詢乙個指定的資料則是 o n 陣列應用場景 1 資料比較少 2 經常做的運算是按序號訪問資料元素 3 構建線性表較穩定 4 陣列更容易實現,任...
陣列 鍊錶 堆疊和佇列
資料結構 是指相互之間存在一種或多種特定關係的資料元素的集合。聽起來是不是很抽象,簡單理解 資料結構就是描述物件間邏輯關係的學科。比如 佇列就是一種先進先出的邏輯結構,棧是一種先進後出的邏輯結構,家譜是一種樹形的邏輯結構!初學資料結構的時候很不理解為什麼有 棧 這個東西 佇列很容易理解 無論購物就餐...
陣列鍊錶堆疊和佇列
陣列鍊錶堆疊和佇列 陣列鍊錶堆疊和佇列是最基本的資料結構,任何程式都會涉及到其中的一種或多種。陣列是最最基本的資料結構,很多語言都內建支援陣列。陣列是使用一塊連續的記憶體空間儲存資料,儲存的資料的個數在分配記憶體的時候就是確定的 圖1.1包含n 個資料的陣列 訪問陣列中第 n個資料的時間花費是 o ...