資料結構與演算法 複習 堆 優先佇列

2021-10-09 03:11:55 字數 2065 閱讀 2853

插入演算法:

該演算法從優先佇列的序列去觀察,比較直觀。首先把要插入的元素放在隊尾temp裡。從佇列的最後乙個元素,逐次向前尋找父節點,空位隨之移動,當到達隊頭,或者當前元素小於temp元素時,即可插入。

刪除演算法:

刪除最小元素,也就是最頭的元素。當我們利用(當前元素數量)-1 這樣的操作刪除元素後,最後乙個元素便被排空了出來,所以主要任務便是安排最後乙個元素的落點。從隊頭開始,用兩個指標,分別指向父結點和子結點,當子結點未到達隊尾,迴圈條件成立。首先在子結點中挑選乙個較小的。然後再判斷,temp(放入隊尾元素的)是否大於這個最小的子結點,如果是,則 指標2 -> 指標2 的子結點,指標1 -> 指標2。再次迴圈。如果temp小於這個最小的子結點,則說明發現合適的位置,可以直接插入。當迴圈結束,也未發現temp < 子結點 的位置時,迴圈結束,此時的指標1位置,便是最佳位置。

堆序性:每個根結點《每個子結點 或 每個根結點》每個子結點

/**

* 程式說明:複習 堆 優先佇列

* 優先佇列---堆來儲存

* 1.插入

*/#include

#include

/** * 優先佇列定義

* 與順序儲存的二叉樹一致

*/struct priorityqueue

;typedef

struct priorityqueue* ppriorityqueue;

/** * 優先佇列 建立空的優先佇列

* @param m

* @return

*/ppriorityqueue createnullpriorityqueue

(int m)

printf

("建立失敗\n");

return

null;}

printf

("建立失敗\n");

return

null;}

/** * 給定資料,初始化優先佇列

* @param papq

*/void

init

(ppriorityqueue papq);if

(papq->n == papq->maxnum)

int size =

sizeof

(datas)

/sizeof

(int);

for(

int i =

0; i < size;

++i)

printf

("初始化完畢\n");

}/**

* 優先佇列列印方法

* @param papq

*/void

printpq

(ppriorityqueue papq)

for(

int i =

0; i < papq->n;

++i)

else}}

intisempty_heap

(ppriorityqueue papq)

/** * 優先佇列 插入資料

* @param papq

* @param data

*/void

add_heap

(ppriorityqueue papq,

int data)

int i =0;

for(i = papq->n; i >

0&& papq->val[

(i-1)/

2]> data; i =

(i-1)/

2)papq->val[i]

= data; papq->n++;}

void

removemin_heap

(ppriorityqueue papq)

if(temp > papq->val[child]

)else

break

;//找到了合適的位置

} papq->val[i]

= temp;

}int

main()

資料結構與演算法 堆 的優先佇列

作業系統核心作業排程是優先佇列的乙個應用例項,它根據優先順序的高低而不是先到先服務的方 式來進行排程 如果最小鍵值元素擁有最高的優先順序,那麼這種優先佇列叫作公升序優先佇列 即總是先刪除最小 的元素 類似的,如果最大鍵值元素擁有最高的優先順序,那麼這種優先佇列叫作降序優先佇列 即總是先刪除最大的元素...

資料結構 堆(優先佇列)

一種樹形資料結構,分大根堆,小根堆。大根堆 max heap 滿足所有父節點不小於其任意子節點。小根堆 min heap 滿足所有父節點不大於其任意子節點。在這裡,我們只考慮二叉堆。二叉堆是一棵完全二叉樹。solution 可見,每堆果子分別被合併了n 1次,n 2次,n 3次 1次 則數量越小的堆...

資料結構 優先佇列(堆)

什麼是堆 堆是一棵具有特定性質的二叉樹 堆的基本要求是堆中所有節點的值必須大於等於 或者小於等於 其孩子節點的值 堆應該是一棵完全二叉樹 堆的表示 由於堆在形式上是一棵完全二叉樹,所以用陣列不會浪費儲存空間 public class heap private int ary private int ...