C++ 如何在我的程序中打破无限循环

C++ 如何在我的程序中打破无限循环,c++,stack,queue,infinite-loop,C++,Stack,Queue,Infinite Loop,我的程序有问题。我试着把一堆数字放在一个循环链接队列中,然后再回到堆栈中。程序编译并运行,但在完成所有操作后,我的程序进入一个空白无限循环。我假设我是因为函数isQueue.enqueue(temp)是代码的一部分,因为当我删除它时,我的程序不再进入无限循环。问题是我看不出我做错了什么,这会让它陷入无限循环 功能 #include <fstream> #include <iostream> #include <cassert> #include "stack.

我的程序有问题。我试着把一堆数字放在一个循环链接队列中,然后再回到堆栈中。程序编译并运行,但在完成所有操作后,我的程序进入一个空白无限循环。我假设我是因为函数
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;

}
#包括
#包括
#包括
#包括“stack.h”
#包括“queuei.h”
无效stackToqueue(堆栈和isStack、队列和isQueue)
{
内部温度;
堆叠新闻钉;
而(!isStack.isEmpty())
{
temp=isStack.pop();
新闻纸推送(温度);
}
displayStack();
isStack=新闻标题;
displayStack();
而(!newStack.isEmpty())
{
temp=newStack.pop();
isQueue.enqueue(temp);//卡在循环中
}
isQueue.displayQueue();
而(!isQueue.isEmpty())
{
temp=isQueue.dequeue();
新闻纸推送(温度);
}
temp=isQueue.dequeue();
新闻纸推送(温度);
isStack=新闻标题;
}

队列.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";

    }

}
#包括“queuei.h”
队列::队列()
{
后=空;
front=NULL;
}
bool队列::isEmpty()
{
如果(前==后)
{
返回true;
}
返回false;
}
void queue::enqueue(int元素)
{
节点*临时=新节点;
临时->项目=元素;
temp->next=NULL;
if(front==NULL)
{
前=温度;
}
其他的
{
后->下一步=温度;
}
后部=温度;
后->下一步=前;
}
int queue::dequeue()
{
节点*tem=新节点;
tem=正面;
if(front==NULL)
{
下一步;
}
返回tem->item;
}
无效队列::出列(int-remove)
{
if(front==NULL)
{
下一步;
}
}
无效队列::显示队列()
{
节点*p=新节点;
p=正面;
if(front==NULL)
{
//队列为空
}
其他的
{

cout问题在队列::isEmpty()中,因为当存在单个节点且前后都指向同一节点时,它将返回true。检查它们是否为Null将解决问题

bool queue::isEmpty()
{
    if (front == NULL && rear == NULL)
    {
        return true;
    }
    return false;
}

您的意思是,
而(!isQueue.isEmpty())
导致了一个无限循环,但在您的代码中,
//卡在循环中
指向另一个循环line@WhozCraig很抱歉,错误的东西现在修复了。
队列中没有循环。
但是,您应该知道您的
isEmpty
是错误的。
如果(前==后)当队列中有一个节点时,
将产生true(并且
front
reast
都指向它,这是它们应该指向的,但是您仅在特定情况下返回
true
(这意味着您错误地声明队列不为空,更糟糕的是,当队列为空时,您将错误地声明队列不为空).isEmpty所需的唯一代码应该是
return-rear==nullptr;