下面的例子來自weiss的《資料結構與演算法分析:c語言描述》,自己親自敲了一遍,跑了個demo,並將結果記錄下來。
binheap.h的標頭檔案宣告
//description: 使最小堆實現優先順序佇列
//date: 2019-03-15
#ifndef __binheap_h__
#define __binheap_h__
typedef int elementtype;
struct heapstruct ;
typedef struct heapstruct *priorityqueue;
priorityqueue initialize(int maxelements);
void destroy(priorityqueue h);
void makeempty(priorityqueue h);
int isempty(priorityqueue h);
int isfull(priorityqueue h);
void insert(elementtype x, priorityqueue h);
elementtype deletemin(priorityqueue h);
elementtype findmin(priorityqueue h);
#endif
binheap.c原始碼檔案
#include "binheap.h"
#include #include #define mindata (-32767)
#define minpqsize (10)
priorityqueue
initialize(int maxelements)
h = malloc(sizeof(struct heapstruct));
if(h == null)
/* allocate the array plus one extra for sentinel */
h->elements = malloc( (maxelements+1) * sizeof(elementtype));
if(h->elements == null)
h->capacity = maxelements;
h->size = 0;
h->elements[0] = mindata; //此處設定哨兵
return h;
}void
destroy(priorityqueue h)
void
makeempty(priorityqueue h)
void
insert(elementtype x, priorityqueue h)
//從尾部向頭部檢查
for(i=++h->size; h->elements[i/2]>x; i/=2)
h->elements[i] = x;
}elementtype
deletemin(priorityqueue h)
minelement = h->elements[1];
lastelement = h->elements[h->size--];
for(i=1; i * 2 <= h->size; i=child)
h->elements[i] = lastelement;
return minelement;
}elementtype
findmin(priorityqueue h)
intisempty(priorityqueue h)
intisfull(priorityqueue h)
//******************************===
int main(){
int i, num=30;
priorityqueue pq = initialize(num);
for(i=0; i下面是執行圖示:
優先順序佇列的使用
public class priorityqueuedemo 獲取排在首位的元素 queue.peek 獲取並刪除排在首位的元素 queue.poll 新增元素 queue.add new int 遍歷所有元素 for int arr queue 轉換為陣列 這裡因為t是一維陣列,所有轉換的結果為陣...
優先順序佇列 c
優先順序佇列 typedef struct datatype typedef struct seqpqueue void initiate seqpqueue q int queuenotempty seqpqueue q else int queuedelete seqpqueue q,datat...
C 優先順序佇列
標頭檔案 include 定義 priority queue ype 就是資料型別,container 就是容器型別 container必須是用陣列實現的容器,比如vector,deque等等,預設用的是vector functional 就是比較的方式,可以自定義,預設是大頂堆 基本操作 empt...