主要思想是堆排序裡面的維護大/小堆。
top一直指向堆頂,而push/pop要維護堆,pop出的值是top。(注意:大根堆和小根堆只需要堆頂最大/小就行!)
偽**方法:
push(引數)
pop()
下面引用自:24隻羊
堆和優先佇列
2.1 堆中新增元素和shift up現在我們要新增元素52,先新增到索引為10的位置,然而現在不滿足二叉堆的性質,所以要調整52的位置,所以讓52和自己的父親節點依次與父親節點相比較,如52大於父親節點,就交換52與父親節點的位置-------shift
我們先取出最大值62,因為將兩顆子樹融合成一棵樹比較複雜,所以我們可以把最小值16換到根節點,然後在採用shift-down操作,
shift-down:把16與左右兩個孩子節點相比較,選擇兩個孩子中最大的那個元素,如果最大的那個元素比16大,則將16與它交換,很顯然52與16做交換
探後繼續與41做交換
因為16比15大,所以就完成啦
資料結構 維護佇列
alice 給 bob 布置了很多任務作,他忙的不可開交,決定按照 先進先出 fifo 的順序依次處理這些工作。但是處理過程中,bob 意識到這種順序可能不是最優的,因此他會選擇性的把某些工作延後。抽象來說,你需要維護乙個佇列,支援三種操作 操作一 1v,在隊尾加入乙個價值為 v 的任務。操作二 2...
資料結構 優先佇列
優先佇列是允許至少下列兩種操作的資料結構 insert 插入 deletermin 刪除最小者 它的工作室找出 返回 刪除優先佇列最小的元素。插入操作等於enqueue 入隊 而detemin則是佇列中dequeue 出隊 在優先佇列中的等價操作。determin函式也變更它的輸入。二叉堆 結構性 ...
資料結構 優先佇列
形象化描述 可以插隊的佇列。標頭檔案 定義方法 較為簡單的常見優先佇列可直接定義 如 priority queue,greater pq 即定義乙個越小的整數優先順序越大的優先佇列。若想實現自定義排序,需過載運算子 如 struct cmp 定義方法 priority queue,cmp pq 注意...