我的队列删除功能遇到问题。请查看以下代码。
class queueType // public queueADT<Type>
{
public:
const queueType<Type>& operator=(const queueType<Type>&);
bool isEmptyQueue() const;
bool isFullQueue() const;
void initializeQueue(int);
void minusIo(int);
Type & front();
Type & back();
void addQueue(const Type& queueElement);
void addQueueFront(const Type& newElement);
void deleteQueue();
queueType(int queueSize = 100);
queueType(const queueType<Type>& otherQueue);
~queueType();
bool operator== (const queueType<Type>&);
bool operator!= (const queueType<Type>&);
void deleteBackOfQueue();
void printQueue();
void sort();
bool notin(Type f);
void shortest(int);
Type *list;
int count;
Type & any(int);
void deleteany();
private:
int maxQueueSize;
int queueFront;
int queueRear;
bool isEqual(const queueType<Type>&);
};
下面给出了我的删除队列和打印功能。
template<class Type>
void queueType<Type>::deleteQueue()
{
if (!isEmptyQueue())
{
queueFront = ++queueFront % maxQueueSize;
count--;
}
else
cout << "Cannot remove from an empty queue" << endl;
}
以下是打印功能。 模板
void queueType<Type>::printQueue()
{
for (int i = 0; i<count; i++)
{
cout << list[i];
}
}
我在我的主要功能中使用它如下。
void main() {
queueType<int> RQ;
RQ.addQueue(2);
RQ.addQueue(8);
RQ.addQueue(7);
RQ.addQueue(2);
RQ.addQueue(4);
RQ.printQueue();
cout << endl;
RQ.deleteQueue();
RQ.printQueue();
getchar();
}
显示以下结果。
28724
2872
我不明白为什么它从最后删除而不是从前面删除。对我来说代码似乎很好。请看一下,让我知道。
答案 0 :(得分:0)
由于您的删除功能不会修改&#34; list&#34;您的打印不应该从零开始,而是从queueFront开始。实现这一目标的简单方法是替换:
cout << list[i];
使用:
cout << list[i+queueFront];
在您的打印功能中。
但是你应该考虑以某种方式修改list
,同时仍然指向你需要free
的内存。