实施优先级队列

时间:2018-10-14 01:59:04

标签: c++ queue priority-queue traversal

我正在尝试为主队列实现插入,查找最小值和删除最小值功能。我还进行了测试,以通过与另一个队列一起检查来确保我的代码正常工作。由于某些原因,在使用查找最小值和删除最小值功能时,它与另一个队列的值不同。我该如何解决?

#include "pQueue.h"
#include <iostream>
using namespace tom;

status pQueue::insert(int insertInt)
{

    if (q[0] == NULL)
    {
        q[0] = insertInt;
        minimum = insertInt;
    }
    else if (q[0] != NULL)
    {
        q[count] = insertInt;
    }
    else
    {
        return FAILURE;
    }

    if (insertInt < minimum)
    {
        minimum = insertInt;
    }
    return SUCCESS;
    count++;

}

status pQueue::findMin(int &minElement)
{

    minElement = minimum;

    if (minElement == NULL)
    {
        return FAILURE;
    }
    return SUCCESS;
}

status pQueue::deleteMin()
{

    for (int i = 0; i <= count; i++)
    {
        if (q[i] = minimum)
        {
            q[i] = 0;
        }
        if (q[i] != 0)
        {
            return FAILURE;
        }

    }
}

2 个答案:

答案 0 :(得分:0)

您认为这段代码在做什么? if (q[0] == NULL)等同于if (q[0] == 0)。您要插入的值永远不会为0吗?同样,无论如何,您的第一个函数将永远不会返回FAILURE。您编写的代码根本没有实现优先级队列功能。阅读CLRS(https://www.amazon.ca/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844)并首先以更轻松的语言(例如Python)实现它。

答案 1 :(得分:0)

对于未排序的优先级队列,一般的假设是:假设将其存储在数组中,

插入:

  1. 将项目添加为数组中的最后一项。
  2. 增加count

删除:

  1. 扫描数组以查找最小项目的索引。
  2. 将值从该索引复制到名为result的变量
  3. 将数组中的最后一个值复制到该位置
  4. 减量count
  5. 返回result

所以insert变成(用伪代码)

insert(value)
    a[count] = value
    count = count + 1

deleteMin是:

deleteMin()
    minIndex = findMinIndex()
    result = a[minIndex]
    a[minIndex] = a[count-1]
    count = count - 1
    return result

findMinIndex是:

findMinIndex()
    if (count < 1) then error
    minIndex = 0
    for (i = 1; i < count; ++i)
        if (a[i] < a[minIndex])
            minIndex = i
    return minIndex

findMin是:

findMinIndex()
    return a[findMinIndex()]

我将把C ++实现留给您。

相关问题