優先佇列是一種特殊的佇列,基於二叉堆實現,在插入、刪除元素上具有較好的演算法效能。由於二叉堆的高度為logn,故在插入、刪除元素時最多調整logn次,時間複雜度為o(logn)。
給出優先佇列adt的**,其中priority_judge
為優先順序判斷。一般來說,在插入、刪除操作時,優先順序較高的應往堆頂調整,優先順序低的應該往堆底調整。在調整元素時,為了排除常數的影響,首先將要調整的目標元素備份,然後依次將要調整的元素與該元素比較,具體來說,在插入元素時,我們採用的是上濾的思想,因此在調整過程中,從堆底比較子節點與父節點的優先順序,如果子節點的優先順序高,則需要將父節點下移,相當於要調整的目標元素上濾;同理,在刪除元素時,我們採用的是下沉的思想,從堆頂比較父節點與兩個子節點的優先順序,如果其中子節點的優先順序高於父節點,則需要將子節點上移,相當於要調整的目標元素下沉。最後將元素儲存在對應的位置,就完成了一次調整。
template
<
class
t>
class
priority_queue
//優先佇列adt
;template
<
class
t>
void priority_queue::
init()
template
<
class
t>
t priority_queue::
top(
)template
<
class
t>
int priority_queue::
size()
template
<
class
t>
void priority_queue::
pop(
)//利用下沉的思想
t[i]
=t1;
}template
<
class
t>
void priority_queue::
push
(t x)
//利用上濾的思想
t[i]
=x;}
template
<
class
t>
bool priority_queue::
empty()
佇列ADT實現
佇列也比較的簡單,先進先出。流行的做法也是用陣列實現。結構體如下 struct queue include include struct queue typedef struct queue queue 建立乙個空的佇列 形參代表這個佇列的長度最大是多少 queue createqueue int ...
資料結構 佇列ADT的實現
佇列是一種特殊的線性表,資料元素之間是線性關係,其插入和刪除操作分別在兩邊進行,一端只能插入,另一端只能刪除。隊首 front 進行刪除操作的一端 隊尾 rear 進行插入操作的一端 入隊 在隊尾插入乙個元素 出隊 在隊首插入乙個元素 特性 元素的操作順序符合 先進先出 fifo 或 後進後出 li...
迴圈佇列ADT實現(C )2018 3 15
include using namespace std 迴圈佇列adt 定義結點 struct qnode 迴圈佇列結構體 struct queue 初始化迴圈佇列 void init queue struct queue q 銷毀佇列 void destroy queue struct queue...