2011 08 27 優先佇列

2021-05-27 18:09:46 字數 1324 閱讀 5581

/**

* 優先佇列

* 個人感覺,要掌握優先佇列並不難,主要掌握以下要點就可以了。

* 1. 左右兒子跟父親的關係。

*  設陣列中位置i,左兒子位置[i*2],右兒子位置[i*2+1]。

* 2. 掌握上濾(percolate up)和下濾(percolate down)的原理。

*  下濾(percolate down)

*   把較小的兒子置入空穴,將空穴下滑一層,至到最後一層建立空穴。

*  上濾(percolate up)

*   為將乙個元素x插入到堆中,在下乙個空閒位置建立乙個空穴,如果

* x放在空穴中而並不破壞堆序,那麼插入完成。否則,把空穴的父結點

* 上的元素移到空穴中,這樣,空穴就朝著根的方向上行一步。繼續該過程

* 直到x能被放入到空穴為止。 

*/// 優先佇列的類介面

template class binaryheap

;// insert item x, allowing duplicates.

void insert(const comparable & x)

/** * remove the minimum item.

* throws underflowexception if empty.

*/void deletemin()

/** * remove the minimum item and place it in minitem.

* throws underflowexception if empty.

*/void deletemin(comparable & minitem)

/** * internal method to percolate down in the heap.

* hole is the index at which the percolate begins.

*/void percolatedown(int hole)

array[hole] = tmp;

}// buildheap和建構函式

explicit binaryheap(const vector& item)

: array(items.size() + 10), currentsize(items.size())

/** * establish heap order property from an arbitrary

* arrangement of items. runs in linear time.

*/void buildheap()

優先佇列(3道優先佇列問題)

優先佇列是一種十分強大的資料結構,它保持了一種動態的有序性,對於不斷改變有入隊的操作,而又需要某種最大或最小的操作的問題是再合適不過了,通常優先佇列的實現是由最小堆或者最大堆完成的,並通過堆排序保持佇列的有序性,模擬佇列的結構,在實際比賽中要寫乙個堆排序還是要一定的時間的,但是stl中queue容器...

佇列以及優先佇列

1.佇列 佇列的定義 標頭檔案 include 佇列是一種先進先出的資料結構 佇列的宣告 queueq 宣告字元型別 queueq 宣告結構體型別 以及可以宣告一些自定義的型別 佇列的操作 入佇列 s.push x 出佇列 s.pop 返回佇列的資料數量 s.size 判斷佇列是否為空 s.empt...

堆疊,佇列,優先佇列

包含標頭檔案 include定義 stacks 特點 先進後出。即 像瓶子一樣。先進來的資料在底部。例 輸入 1 2 3 4 5 輸出 5 4 3 2 1 棧的基本操作 s.push a 把元素a入棧。s.pop 刪除棧頂元素。s.top 返回棧頂元素,但不會刪除。s.size 返回棧中元素個數。s...