Сбой приложения структуры данных очереди с методом front ()

Я реализую структуру данных очереди, но мое приложение падает. Я знаю, что я делаю что-то не так с указателем 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");
}

-1

Решение

Вы используете неинициализированные указатели в нескольких случаях.

  • Enqueue ссылается на tail-> setNext (). Если очередь пуста, задняя часть не инициализируется, что приводит к сбоям.
  • Фронт возвращает узел по некоторой функции-члену Node без проверки ненулевого указателя. Почему бы просто не вернуть * передний указатель?
  • Ни у одного из ваших классов нет конструктора. Ваши указатели даже не NULL-указатели, они просто неинициализированы. Это напрашивается на неприятности.

Мой совет:

  • Дайте обоим классам конструктор.
  • При вызове ЛЮБОЙ функции-члена Node проверьте правильность указателей.
  • Используйте меньше функций-членов Node; возвращает сырые указатели, когда вы можете.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]