小编Coo*_*ini的帖子

C - 如何使用二进制堆和决胜局来实现优先级队列?

我必须使用 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)

c heap queue

1
推荐指数
1
解决办法
1906
查看次数

标签 统计

c ×1

heap ×1

queue ×1