使用最小堆使用優先順序佇列 c語言版本

2021-09-12 16:23:47 字數 2085 閱讀 4731

下面的例子來自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...