我正在实现队列数据结构,但是我的应用程序崩溃了。我知道队列类的Node指针front或Front()方法做错了

#include <iostream>
using namespace std;

class Node
{
    public:
        int get() { return object; };
        void set(int object) { this->object = object; };
        Node * getNext() { return nextNode; };
        void setNext(Node * nextNode) { this->nextNode = nextNode; };
    private:
        int object;
        Node * nextNode;
};

class queue{
    private:
        Node *rear;
        Node *front;
    public:
        int dequeue()
        {
            int x = front->get();
            Node* p = front;
            front = front->getNext();
            delete p;
            return x;
        }

        void enqueue(int x)
        {
            Node* newNode = new Node();
            newNode->set(x);
            newNode->setNext(NULL);
            rear->setNext(newNode);
            rear = newNode;
        }

        int Front()
        {
            return front->get();
        }

        int isEmpty()
        {
            return ( front == NULL );
        }
};
main()
{
    queue q;
    q.enqueue(2);
    cout<<q.Front();

    system("pause");
}

最佳答案

您多次使用未初始化的指针。

  • 入队是指Rear-> setNext()。如果队列为空,则后部未初始化,从而导致崩溃。
  • Front通过某些Node成员函数返回该节点,而不检查是否为非null指针。为什么不简单地返回* front指针呢?
  • 您的所有类都没有构造函数。您的指针甚至都不是NULL指针,它们只是未初始化的。那是麻烦。

  • 我的建议:
  • 给两个类一个构造函数。
  • 调用ANY Node成员函数时,请检查有效的指针。
  • 使用更少的Node成员函数;如果可以,则返回原始指针。
  • 关于c++ - 使用front()方法使队列数据结构应用崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13452320/

    10-11 00:25