簡體   English   中英

如何在我的程序中擺脫無限循環

[英]How to break out of an infinite loop in my program

我的程序有問題。 我試圖將一堆數字放入循環鏈接的隊列中,然后又放回堆棧中。 該程序可以編譯並運行,但是在完成所有操作后,我的程序將進入一個空白的無限循環。 我假設我是因為代碼中的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";

    }

}

問題在queue :: isEmpty()中,因為當只有一個節點並且前后都指向同一個節點時,它將返回true。 檢查它們是否為Null將解決問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM