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