堆的應用 優先順序佇列和堆排

2021-08-19 23:08:48 字數 1904 閱讀 5817

優先順序佇列:

就是佇列中的元素是有優先順序的,比如將優先順序最高的放在隊頭,最低的放在隊尾,那麼在對佇列進行操作時,如,出佇列,只能先出優先順序最高的,入佇列,也要根據元素的優先順序,將其放在對應的優先順序處。優先順序佇列的本質就是佇列裡面封裝了堆,具體**如下,下面**用到的堆可參考:

#pragma once

#include "heap.h"

//優先順序佇列就是封裝堆

typedef struct priorityqueue

priorityqueue, *pqueue;

//佇列初始化

void priorityqueueinit(pqueue q);

//入佇列

void priorityqueuepush(pqueue q, datatype data);

//出佇列

void priorityqueuepop(pqueue q);

//檢視隊頭元素

datatype priorityqueuefront(pqueue q);

//檢視隊尾元素

datatype priorityqueueback(pqueue q);

//檢視元素個數

int priorityqueuesize(pqueue q);

//佇列判空

int priorityqueuefront(pqueue q);

//銷毀佇列

void priorityqueuedestory(pqueue q);

#include "priorityqueue.h"

//佇列初始化

void priorityqueueinit(pqueue q)

//入佇列

void priorityqueuepush(pqueue q, datatype data)

//出佇列

void priorityqueuepop(pqueue q)

//檢視隊頭元素

datatype priorityqueuefront(pqueue q)

//檢視隊尾元素

datatype priorityqueueback(pqueue q)

//檢視元素個數

int priorityqueuesize(pqueue q)

//佇列判空

int priorityqueueempty(pqueue q)

//銷毀佇列

void priorityqueuedestory(pqueue q)

#include "priorityqueue.h"

void test2()

int main()

堆排:

現在學過的的排序方法有:氣泡排序和選擇排序,他們的時間複雜度都是o(n),都不是特別好,而堆排的時間複雜度是多少呢?堆排的具體**如下:

//堆排

//公升序--大堆

//降序--小堆

void adjustheap(int* arr, int

size, int

parent)

else

return;

}}void heapsort(int* arr, int

size)

}int main()

; int

size = sizeof(arr) / sizeof(arr[0]);

heapsort(arr, size);

for (; i < size; i++)

printf("%d ", arr[i]);

}

根據上面的**,很容易求出其時間複雜度為:nlog2^n,比冒泡和選擇排序都要好。

優先順序佇列和堆的應用

優先順序佇列可以通過陣列自己維護優先順序,也可以用stl自帶的優先順序佇列priority queue include 大根堆 priority queueque 或 priority queue,less que 小根堆 priority queue,greater que 關於優先順序佇列的應用...

堆的應用 優先順序佇列

標頭檔案 pragma once ifndef heap h define heap h typedef int datatype typedef int compare datatype left,datatype right typedef struct heap heap void creat...

堆(優先順序佇列)

c 的 stl 中提供了 優先佇列 這一容器,它和普通的 fifo 佇列都定義在 中,有 push 和 pop 過程,分別表示 往佇列裡加入新元素 和 從佇列裡刪除隊首元素 唯一的區別是,在優先佇列中,元素並不是按照進入佇列的先後順序排列,而是按照優先順序的高低順序排列 換句話說,pop 刪除的是優...