编辑代码

#include <stdio.h>  
#include <stdlib.h>  
  
typedef struct {  
    int time;  
    int score;  
} Place;  
  
typedef struct {  
    Place *places;  
    int size;  
    int capacity;  
} PriorityQueue;  
  
// 初始化优先队列  
PriorityQueue* createQueue(int capacity) {  
    PriorityQueue* queue = (PriorityQueue*)malloc(sizeof(PriorityQueue));  
    queue->places = (Place*)malloc(sizeof(Place) * capacity);  
    queue->capacity = capacity;  
    queue->size = 0;  
    return queue;  
}  
  
// 向优先队列中添加元素  
void enqueue(PriorityQueue* queue, int time, int score) {  
    if (queue->size == queue->capacity) {  
        printf("Priority Queue is full.\n");  
        return;  
    }  
    queue->places[queue->size].time = time;  
    queue->places[queue->size].score = score;  
    queue->size++;  
}  
  
// 从优先队列中删除元素并返回权重最大的元素  
Place dequeue(PriorityQueue* queue) {  
    if (queue->size == 0) {  
        printf("Priority Queue is empty.\n");  
        return (Place){0};  // 返回一个默认的空结构体作为占位符,以便在编译时不会出现错误。  
    }  
    Place maxPlace = queue->places[0];  // 权重最大的元素总是在队列的顶部。  
    queue->places[0] = queue->places[queue->size - 1];  // 将最后一个元素移到队列的顶部。  
    queue->size--;  // 队列大小减1。  
    return maxPlace;  // 返回权重最大的元素。  
}  
  
int main() {  
    PriorityQueue* queue = createQueue(4);  // 创建一个容量为4的优先队列。  
    enqueue(queue, 1, 7);  // 故宫,权重为7。  
    enqueue(queue, 2, 8);  // 颐和园,权重为16。  
    enqueue(queue, 3, 9);  // 长城,权重为27。  
    enqueue(queue, 1, 6);  // 天坛,权重为6。  
    Place place;  
    while (queue->size > 0) {  
        place = dequeue(queue);  // 弹出权重最大的元素。  
        printf("Place: %d days, %d score. Weight: %d\n", place.time, place.score, place.time * place.score);  // 打印相关信息。  
    }  
    return 0;  
}