c++ 优先队列实现
时间: 2023-08-18 22:11:12 浏览: 97
C语言中可以使用标准库中的priority_queue来实现优先队列。在C语言中,可以使用以下代码来实现一个优先队列:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int priority;
// 其他需要存储的数据
} Element;
typedef struct {
Element *elements;
int size;
int capacity;
} PriorityQueue;
PriorityQueue* createPriorityQueue(int capacity) {
PriorityQueue *queue = (PriorityQueue*)malloc(sizeof(PriorityQueue));
queue->elements = (Element*)malloc(capacity * sizeof(Element));
queue->size = 0;
queue->capacity = capacity;
return queue;
}
void enqueue(PriorityQueue *queue, int priority) {
if (queue->size == queue->capacity) {
// 队列已满,需要扩容
queue->capacity *= 2;
queue->elements = (Element*)realloc(queue->elements, queue->capacity * sizeof(Element));
}
Element element;
element.priority = priority;
// 其他需要存储的数据
queue->elements[queue->size++] = element;
}
int dequeue(PriorityQueue *queue) {
if (queue->size == 0) {
// 队列为空
return -1;
}
int minIndex = 0;
for (int i = 1; i < queue->size; i++) {
if (queue->elements[i].priority < queue->elements[minIndex].priority) {
minIndex = i;
}
}
int minValue = queue->elements[minIndex].priority;
// 其他需要处理的数据
queue->elements[minIndex] = queue->elements[--queue->size];
return minValue;
}
void destroyPriorityQueue(PriorityQueue *queue) {
free(queue->elements);
free(queue);
}
int main() {
PriorityQueue *queue = createPriorityQueue(10);
for (int i = 0; i < 10; i++) {
int temp;
scanf("%d", &temp);
enqueue(queue, temp);
}
while (queue->size > 0) {
int value = dequeue(queue);
printf("%d\n", value);
}
destroyPriorityQueue(queue);
return 0;
}
```
这段代码使用了一个结构体PriorityQueue来表示优先队列,其中的Element结构体可以根据实际需要存储其他数据。enqueue函数用于将元素插入队列,dequeue函数用于从队列中取出优先级最高的元素。在main函数中,我们可以通过循环输入10个元素,并按照优先级从小到大输出。
阅读全文