優先佇列 堆

2021-09-29 22:11:52 字數 1183 閱讀 1770

普通的佇列是一種先進先出的資料結構,元素在佇列尾追加,而從佇列頭刪除。在優先佇列中,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除。優先佇列具有最高端先出 (first in, largest out)的行為特徵。通常採用堆資料結構來實現。

入佇列:

1)首先按尾插方式將資料插入陣列;

2)比較其和其雙親的值的大小,如果雙親的值大,則滿足優先佇列的性質,插入結束;

3)否則,交換其和雙親的位置的值,重新進行2,3步;

4)直到根節點.

出佇列:

為了不破壞優先佇列的性質,不能直接刪除隊首元素,應該先用陣列的最後乙個元素替換隊首元素,再通過向下調整重新構成優先佇列.

返回隊首元素:

直接返回隊首元素.

package test1124.mypriorityqueue;

public class mypriorityqueue

swap(array,index,parent);

index = parent;}}

//交換佇列元素

public static void swap(int array, int x, int y)

//向下調整

public void shiftdown(int array, int size, int index)

if (array[parent] > array[child])

swap(array,child,parent);

parent = child;

child = 2 * parent + 1;}}

//入隊

public void offer(int x)

array[size] = x;

size++;

shiftup(array,size - 1);

}//出隊

public integer poll()

int ret = array[0];

array[0] = array[size - 1];

shiftdown(array,size,0);

return ret;

}//返回隊首元素

public integer peek()

//返回隊首元素

return array[0];

}}

優先佇列《堆》

1.模型 兩個基本操作 insert等價enqueue deletemin刪除最小者 dequeue 2.簡單的實現 1 簡單鍊錶 遍歷刪除min或者排序刪除min 2 使用二叉查詢樹。反覆除去min會使得樹不平衡,並且bst還支援許多不需要的操作。3.二叉堆 優先佇列的實現普遍使用二叉堆,堆有兩個...

優先佇列 堆

印表機列印作業一般是放在佇列中的。如果按照先來先列印的順序,有乙個100頁的列印任務,那麼會讓後面短小的任務等待很長時間。更合理的做法也許是最後處理最耗時的列印任務,不管它是不是最後提交上來的。在多使用者作業系統中,作業系統讓哪個程式使用cpu,是需要決定從佇列裡面選擇的。一般做法是從隊頭獲得程式,...

優先佇列 堆

優先佇列 佇列是乙個操作受限的線性表,資料只能在一端進入,另一端出來,具有先進先出的性質。有時在佇列中需要處理優先順序的情況,即後面進入的資料需要提前出來,這裡就需要優先佇列。優先佇列是至少能夠提供插入和刪除最小值這兩種操作的資料結構。對應於佇列的操作,插入相當於入隊,刪除最小相當於出隊。鍊錶,二叉...