📄 priority_queue.c
字号:
#include <stdio.h>#include <stdlib.h>#include "priority_queue.h"priorQueue* newHeap(unsigned int qsize) { priorQueue *p = (priorQueue*)malloc(sizeof(priorQueue)); p->heap = (heapInfo*)malloc(qsize*sizeof(heapInfo)); p->maxSize = qsize; p->size = 0; return p;}int Insert(heapInfo *newAction,priorQueue *p){ if(p->size >= p->maxSize) return -1; unsigned int m = p->size; heapInfo *h = p->heap; while(m >= 0 && newAction->timeStamp <= h[(m-1)/2].timeStamp) { memcpy(&h[m], &h[(m-1)/2], sizeof(heapInfo)); m = (m-1)/2; } memcpy(&h[m], newAction, sizeof(heapInfo)); p->size ++; int i=0; for(i=0;i<p->size;i++){ printf("%d ",h[i].timeStamp); } printf("\n"); return 1;}heapInfo* getMin(priorQueue *p) { if(p->size == 0) return NULL; return &(p->heap[0]);}heapInfo* DeleteMin(priorQueue *p){ if(p->size == 0) return NULL; heapInfo *h = (heapInfo*)malloc(sizeof(heapInfo)); memcpy(h, &p->heap[0], sizeof(heapInfo)); unsigned int m = 0,k = 0; while( (2*m+1 < p->size && p->heap[2*m+1].timeStamp < p->heap[p->size-1].timeStamp) || (2*m+2 < p->size && p->heap[2*m+2].timeStamp < p->heap[p->size-1].timeStamp)){ if(2*m+2 < p->size) { if(p->heap[2*m+1].timeStamp < p->heap[2*m+2].timeStamp) k = 2*m+1; else k = 2*m+2; } else k = p->size - 1; memcpy(&p->heap[m], &p->heap[k], sizeof(heapInfo)); m = k; } memcpy(&p->heap[m], &p->heap[p->size - 1], sizeof(heapInfo)); p->size --; return h;}void printall(priorQueue *p) { int i; heapInfo *h = p->heap; for(i = 0; i<p->size;i++) { printf("Timestamp %d\n",h[i].timeStamp); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -