如何在我的程序中突破无限循环

How to break out of an infinite loop in my program

本文关键字:突破 无限循环 程序 我的      更新时间:2023-10-16

我的程序有问题。我试着把一堆数字放在一个循环链接的队列中,然后再放回堆栈中。程序编译并运行,但在完成所有内容后,我的程序将进入一个空白的无限循环。我假设我是这样的,这是因为函数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 Emtptyn";
    }
    else
    {
        front = front->next;
    }
    return tem->item;
}
void queue::dequeue(int remove)
{
    if (front == NULL)
    {
        cout << "nQueue is Emtptyn";
    }
    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";
    }
}

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

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