优先队列(Priority Queue)是一种数据结构,它类似于常规的队列或栈,但每个
元素都有与其关联的“优先级”。在优先队列中,元素的出队顺序是基于它们的优先
级,而不是它们进入队列的顺序。通常,优先级最高的元素最先出队。如果两个元
素优先级相同,则它们按照它们在队列中的顺序出队。
在 C 语言中,没有内建的优先队列数据结构,但我们可以使用其他数据结构(如
数组或链表)和适当的排序算法来实现。下面是一个简单的基于数组和插入排序的
优先队列实现示例:
c 复制代码
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int size;
int (*compare)(const void*, const void*);
} PriorityQueue;
void initQueue(PriorityQueue* pq, int (*compare)(const void*, const
void*)) {
pq->size = 0;
pq->compare = compare;
}
int isFull(PriorityQueue* pq) {
return pq->size == MAX_SIZE;
}
int isEmpty(PriorityQueue* pq) {
return pq->size == 0;
}
void enqueue(PriorityQueue* pq, int value) {
if (isFull(pq)) {
printf("Priority queue is full.");
return;
}
int i;
for (i = pq->size - 1; i >= 0 && pq->compare(&value, &pq->data[i]) <
0; i--) {
pq->data[i + 1] = pq->data[i];