我正在尝试实现一个简单的循环队列操作,如下所示。
考虑初始时queueFront = 0,queueBack = 0, 尽管实际上并非满队列,但上述代码结果是满的。我该如何更正?在第一个案例中,我的实现是否正确?
测试用例 起始时arrayLength = 3,queueFront = 0,queueBack = 0;
1. 在第一次调用push(1)结束时,queueFront = 0,queueBack = 1,1被添加到inputArray[1]而不是0; 2. 在第二次调用push(2)结束时,queueFront = 0,queueBack = 2,2被添加到inputArray[2]; 3. 现在, (queueBack + 1) % arrayLength == queueFront 成立,然而还有一个空余空间即inputArray[0]。
谢谢
void push(int theElement)
{
//Check if the push causes queue to overflow
if (((queueBack + 1 ) % arrayLength) == queueFront) {
std::cout<<"Queue is full."<<std::endl;
return ;
}
queueBack = (queueBack + 1) % arrayLength;
inputArray[queueBack] = theElement;
}
int pop()
{
//Check if queue is already empty
if ( queueFront == queueBack ) {
std::cout<<"Queue is empty."<<std::endl;
return;
}
queueFront = (queueFront + 1 ) % arrayLength;
return inputArray[queueFront];
}
考虑初始时queueFront = 0,queueBack = 0, 尽管实际上并非满队列,但上述代码结果是满的。我该如何更正?在第一个案例中,我的实现是否正确?
测试用例 起始时arrayLength = 3,queueFront = 0,queueBack = 0;
1. 在第一次调用push(1)结束时,queueFront = 0,queueBack = 1,1被添加到inputArray[1]而不是0; 2. 在第二次调用push(2)结束时,queueFront = 0,queueBack = 2,2被添加到inputArray[2]; 3. 现在, (queueBack + 1) % arrayLength == queueFront 成立,然而还有一个空余空间即inputArray[0]。
谢谢