我在C ++中实现了一个简单的优先级队列。
然而,当它运行时,它打印出乱码数字。 我在某种程度上试图在我的代码中访问数组中的无效条目吗?
以下是代码。
另外,是我的"删除"功能不知怎么做不起作用?从概念上讲,我应该将null置于第一个条目并返回刚刚删除的内容吗?
感谢。
[Priority.h]
#ifndef Priority_h
#define Priority_h
class Priority
{
public:
Priority(void);
Priority(int s);
~Priority(void);
void insert(long value);
long remove();
long peekMin();
bool isEmpty();
bool isFull();
int maxSize;
long queArray [5];
int nItems;
private:
};
#endif
[Priority.cpp]
#include <iostream>
#include <string>
#include <sstream>
#include <stack>
#include "Priority.h"
using namespace std;
Priority::Priority(void)
{
}
Priority::Priority(int s)
{
nItems = 0;
}
Priority::~Priority(void)
{
}
void Priority::insert(long item)
{
int j;
if(nItems==0) // if no items,
{
queArray[0] = item; nItems++;
}// insert at 0
else // if items,
{
for(j=nItems-1; j=0; j--) // start at end,
{
if( item > queArray[j] ) // if new item larger,
queArray[j+1] = queArray[j]; // shift upward
else // if smaller,
break; // done shifting
} // end for
queArray[j+1] = item; // insert it
nItems++;
} // end else (nItems > 0)
}
long Priority::remove()
{
return queArray[0];
}
long Priority::peekMin()
{
return queArray[nItems-1];
}
bool Priority::isEmpty()
{
return (nItems==0);
}
bool Priority::isFull()
{
return (nItems == maxSize);
}
int main ()
{
Priority thePQ;
thePQ.insert(30);
thePQ.insert(50);
thePQ.insert(10);
thePQ.insert(40);
thePQ.insert(20);
while( !thePQ.isEmpty() )
{
long item = thePQ.remove();
cout << item << " "; // 10, 20, 30, 40, 50
} // end while
cout << "" << endl;
system("pause");
}
答案 0 :(得分:5)
这是一个错误:
for(j=nItems-1; j=0; j--) // start at end,
^ this is assignment, not comparison.
我也不相信
中没有一个错误的错误 queArray[j+1] = item; // insert it
最后,您的默认构造函数无法初始化nItems
。
可能会有更多错误,但我会停下来。
答案 1 :(得分:0)
尝试在构造函数中初始化队列数组。
答案 2 :(得分:0)
我同意这里的其他答案,但我想补充一点:
你的“删除”方法实际上并没有删除任何东西 - 它只是返回第一个元素 - 但它对数组本身没有任何作用。
编辑说你的插入方法需要一些工作 - 它可能会或者可能不会写在数组的末尾,但它确实令人困惑的是它在做什么。