0
我的程序有問題。我正在嘗試將一堆數字放入循環鏈接隊列中,然後重新放入堆棧。該程序編譯並運行,但在程序完成後,我的程序將進入空白的無限循環。我假設我是因爲功能isQueue.enqueue(temp)
部分代碼,因爲當我刪除它時,我的程序不再進入無限循環。問題是我沒有看到我在做什麼錯誤,將保持在一個無限循環。如何在我的程序中跳出無限循環
功能
#include <fstream>
#include <iostream>
#include <cassert>
#include "stack.h"
#include "queuei.h"
void stackToqueue(stack &isStack, queue &isQueue)
{
int temp;
stack newStack;
while (!isStack.isEmpty())
{
temp = isStack.pop();
newStack.push(temp);
}
newStack.displayStack();
isStack = newStack;
isStack.displayStack();
while (!newStack.isEmpty())
{
temp = newStack.pop();
isQueue.enqueue(temp);//stuck in loop
}
isQueue.displayQueue();
while (!isQueue.isEmpty())
{
temp = isQueue.dequeue();
newStack.push(temp);
}
temp = isQueue.dequeue();
newStack.push(temp);
isStack = newStack;
}
queue.cpp
#include "queuei.h"
queue::queue()
{
rear = NULL;
front = NULL;
}
bool queue::isEmpty()
{
if (front == rear)
{
return true;
}
return false;
}
void queue::enqueue(int element)
{
nodes *temp = new nodes;
temp->item = element;
temp->next = NULL;
if (front == NULL)
{
front = temp;
}
else
{
rear->next = temp;
}
rear = temp;
rear->next = front;
}
int queue::dequeue()
{
nodes *tem = new nodes;
tem = front;
if (front == NULL)
{
cout << "\nQueue is Emtpty\n";
}
else
{
front = front->next;
}
return tem->item;
}
void queue::dequeue(int remove)
{
if (front == NULL)
{
cout << "\nQueue is Emtpty\n";
}
else
{
front = front->next;
}
}
void queue::displayQueue()
{
nodes *p = new nodes;
p = front;
if (front == NULL)
{
//queue is empty
}
else
{
cout << "F ";
while (p != rear)
{
cout << p->item << " ";
p = p->next;
}
cout << p->item;
cout << " L";
}
}
你說'而(!isQueue.isEmpty())'導致一個無限循環,但在你的代碼'//卡在loop'點到另一條線路 – phts 2015-03-31 16:05:54
@WhozCraig抱歉,但錯誤的事情現在修復它 – DarkT 2015-03-31 16:48:09
'enqueue'沒有循環。但是,你應該知道你的'isEmpty'是錯誤的。當隊列中有一個**節點(並且「front」和「rear」都指向它,因爲它們應該,但是你返回「true」時)'if(front == rear)'將產生* true *在那個*特定的情況下(這意味着當它不是的時候,你錯誤地聲稱隊列是空的,更糟糕的是,當它*爲*時,錯誤地聲明隊列是* not * empty)。'isEmpty'所需的唯一代碼應該是'return rear == nullptr;'。 – WhozCraig 2015-03-31 18:06:33