我必须使用 C 语言中的二进制堆为大学作业实现一个优先级队列。程序应该从输入中获取 n 个值,当值为 0 时,它应该打印 ID 号(因此,如果作为第 5 个元素添加的任务具有最高优先级 7,则打印“5”)并从中删除最高优先级的任务队列,当 value>0 时,它应该添加新节点。为了实现 ID 和优先级,我使用了结构数组。
任务将非常简单,如果元素的优先级相同,它也应该打印较低的 ID 的事实......我已经完成了我的研究,但我设法找到的唯一建议是修改典型的堆函数(insertkey、heapify)的片段也用于查找元素的 ID。我试过这样做,但我不知道出了什么问题 - 元素仍然没有按照我想要的方式排序。我将不胜感激任何建议和提示!
代码:
#include <stdio.h>
#define SIZE 99999
int heapsize = 0;
int count = 0;
struct pqueue
{
int priority;
int id;
};
struct pqueue A[SIZE];
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
void initializearray()
{
for(int i=0; i<SIZE; i++)
{
A[i].priority = 0;
A[i].id = 0;
}
} …Run Code Online (Sandbox Code Playgroud)