堆的應用 優先順序佇列

2021-08-15 21:02:01 字數 3066 閱讀 1713

標頭檔案

#pragma once

#ifndef _heap_h_

#define _heap_h_

typedef

int datatype;

typedef

int(*compare)(datatype left, datatype right);

typedef

struct heap

heap;

void createheap(heap* php, datatype array, int size, compare com);//堆的建立

void initheap(heap* php, compare com);//初始化堆

void insert(heap* php, datatype data);//堆的插入

void remove(heap* php);//堆得刪除

int emptyheap(heap* php);//堆的判空

int sizeheap(heap* php);//堆的大小

void adjustdown(heap* php, int parent);//向下排序

void adjustup(heap* php, int child);//向上排序

datatype top(heap* php);//取第乙個元素

void checkcapacity(heap* php);//檢查堆的空間

int less(datatype left, datatype right);

int greater(datatype left, datatype right);

#endif // !_heap_h_

#pragma once

//用堆封裝優先順序佇列

#ifndef _priorityqueue_h_

#define _priorityqueue_h_

#include"heap.h"

typedef struct priorityqueue

priorityqueue;

//////

//////

//////

//////

//////

//////

///////

void initpriorityqueue(priorityqueue* q, compare com);//初始化優先順序佇列

void queuepush(priorityqueue* q, datatype data);//入佇列

void queuepop(priorityqueue* q);//出佇列

int queuesize(priorityqueue* q);//獲得佇列大小

int queueempty(priorityqueue* q);//佇列是否為空

datatype queuetop(priorityqueue* q);//獲得對頭元素

#endif // !_priorityqueue_h_

原始檔

#include

.h>

#include"priorityqueue.h"

void initpriorityqueue(priorityqueue* q, compare com)

//初始化優先順序佇列

void queuepush(priorityqueue* q, datatype data)

//入佇列

void queuepop(priorityqueue* q)

//出佇列

int queuesize(priorityqueue* q)

//獲得佇列大小

int queueempty(priorityqueue* q)

//佇列是否為空

datatype queuetop(priorityqueue* q)

//獲得對頭元素

void main()

#include

#include

#include

#include"heap.h"

void createheap(heap* php, datatype array, int size, compare com)//堆的建立

php->_capacity = size + 3;

php->_size = size;

php->_com = com;

for (int i = (size - 2) / 2; i >= 0; i--)

}void initheap(heap* php, compare com)//初始化堆

void swap(datatype* data1,datatype* data2)//交換

void insert(heap* php, datatype data)//堆的插入

void remove(heap* php)//堆得刪除

int emptyheap(heap* php)//堆的判空

int sizeheap(heap* php)//堆的大小

void adjustdown(heap* php, int parent)//向下調整

if (php->_com(php->_hp[child], php->_hp[parent]))

else

}}void adjustup(heap* php, int child)//向上調整

else

return;

}}datatype top(heap* php)//取第乙個元素

void checkcapacity(heap* php)//檢查堆的空間

}int less(datatype left, datatype right)

int greater(datatype left, datatype right)

堆應用 優先順序佇列(Priority Queue)

優先順序佇列的實現方法有很多種,這裡我們通過堆來構建 以降序,大堆為例 1.入佇列 通過尾插的方式入佇列,因為會破壞原有的堆結構,所以通過向上調整恢復堆結構。2.出佇列 若直接取出隊首元素的話,會影響後面元素的位置,所以我們將隊首元素與隊末元素交換,尾刪 size 再將交換後的0號元素進行向下調整,...

堆(優先順序佇列)

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

堆 優先順序佇列

1一般二叉樹的順序儲存 層序遍歷方式 使用陣列儲存二叉樹結構,即將二叉樹 按照層序遍歷 的方式放入陣列.這種方式一般只適用於完全二叉樹,一般的二叉樹會造成空間浪費比較嚴重.2堆 heap 在邏輯上就是乙個 完全二叉樹,在物理上儲存在 陣列 中.1 滿足任意結點的值都大於其子樹的結點的值.叫做大堆,反...