队列数据结构应用程序崩溃与front()方法

时间:2012-11-19 10:55:22

标签: c++ data-structures queue crash

我正在实现一个队列数据结构,但我的应用程序崩溃了。我知道我在使用Node指针前端或队列类的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");
}

1 个答案:

答案 0 :(得分:0)

你在几次使用未初始化的指针。

  • 入队指的是后面的&gt; setNext()。如果队列为空,则后方未初始化,导致崩溃。
  • Front通过某个Node成员函数返回节点,而不检查非空指针。为什么不简单地返回*前指针?
  • 您的班级都没有构造函数。你的指针甚至都不是NULL指针,它们只是未初始化。那是在寻找麻烦。

我的建议:

  • 为两个类提供构造函数。
  • 调用ANY Node成员函数时,请检查有效指针。
  • 使用较少的Node成员函数;尽可能返回原始指针。