優先佇列ADT的實現

2021-10-06 07:52:26 字數 1217 閱讀 8698

優先佇列是一種特殊的佇列,基於二叉堆實現,在插入、刪除元素上具有較好的演算法效能。由於二叉堆的高度為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...