我将游戏板移动到这个队列中,用于停放的汽车"游戏,应该有75个动作来解决这个难题。但是,队列不断溢出,导致移动没有入队,这使得解决方案超过75次移动。注意:无法更改队列大小,它是常量。有什么想法吗?
int enqueue(position* p){
Q[qrear] = p;
qrear = qrear + 1;
if (qrear == QueueArraySize) {
qrear = 0;
}
qsize = qsize + 1;
return 0;
} /*End of insert()*/
position* dequeue(){
if (qsize == 0) {
printf("Queue Underflow \n");
return NULL;
}
else {
position* temp = Q[qfront];
qfront = qfront + 1;
if (qfront == QueueArraySize) {
qfront = 0;
}
qsize = qsize - 1;
return temp;
}
}
答案 0 :(得分:0)
我怀疑你的问题是qsize可能比QueueArraySize大,但队列中的项目数量仅限于QueueArraySize。
入队不能"失败",它总是在队列中放置一个位置,它总是递增队列大小,即使它循环回到Q的开头(它可能会在开头覆盖位置)队列)。
另一件需要考虑的事情是你不注意qrear和qfront之间的关系。想象一下QueueArraySize是10,你排队12个位置,qfront仍然指向Q [0](因为你还没有出现任何东西),但这不是正确的"前面"因为Q [0]和Q [1]被排队的第11和第12位覆盖了队列。在这种情况下,qfront应该是Q [2]。如果你要进入gfront,你应该移动qfront,如果你从qrear出发,你应该移动qrear。