我正在尝试为主队列实现插入,查找最小值和删除最小值功能。我还进行了测试,以通过与另一个队列一起检查来确保我的代码正常工作。由于某些原因,在使用查找最小值和删除最小值功能时,它与另一个队列的值不同。我该如何解决?
#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;
}
}
}
答案 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)
对于未排序的优先级队列,一般的假设是:假设将其存储在数组中,
插入:
count
。删除:
result
的变量count
。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 ++实现留给您。