堆和優先佇列是C 中常用的資料結構,它們都具有重要的應用價值。本文將分別對堆和優先隊列進行介紹和解析,以幫助讀者更好地理解和使用它們。
一、堆
堆是一種特殊的樹狀資料結構,它可以用來實作優先佇列。在堆中,每個節點都滿足如下性質:
我們將不小於其父節點的堆稱為“最小堆”,將不大於其父節點的堆稱為“最大堆”。此外,堆通常是一個完全二元樹,即除了最後一層外,其他層的節點都是滿的,最後一層的節點從左到右排列。
在C 中,STL函式庫提供了heap和priority_queue兩個類別來實作堆。其中,heap類別提供了堆疊操作函數,如make_heap、push_heap、pop_heap等,priority_queue類別則是基於堆實現的優先佇列。下面,我們來看看heap和priority_queue的用法。
(1) 建立堆疊
在建立堆前,需要先建立一個vector型別的陣列來儲存待排序的數字:
vector
#然後,我們可以使用make_heap函數將vector類型的陣列轉換為堆:
make_heap(v.begin(), v.end(), greater
其中,greater
(2) 插入元素
在堆中插入元素可以使用push_heap函數,它的用法如下:
v.push_back(7);
push_heap( v.begin(), v.end(), greater
(3) 刪除元素
在堆中刪除元素可以使用pop_heap函數,它會將堆頂元素移動到堆的最後一個位置,並從堆中刪除該元素。此函數的用法如下:
pop_heap(v.begin(), v.end(), greater
v.pop_back();
(1) 建立堆疊
與heap類別不同,priority_queue類別可以在宣告物件時指定堆疊的類型,如下所示:
priority_queue
這表示建立一個最小堆。
(2) 插入元素
在priority_queue中插入元素可以直接使用push函數,如下所示:
##q.push(2);q. push(4);
q.push(1);
q.push(9);
q.push(2);
q .push(4);
q.push(1);
q.push(9);
cout
以上是C++中的堆和優先隊列的詳細內容。更多資訊請關注PHP中文網其他相關文章!