Задать вопрос
@PyTiMa
Учусь, кручусь, верчусь.

Как проверить, пустой ли стек?

Доброго времени суток.
Делаю стек с Linked Lists и классами на C++, допустим есть класс элемента стека и класс самого стека. В самом начале создаем 1 элемент стека "top" (он же пока что и является верхним) при помощи конструктора с полями key = NULL, deeperElement = NULL;
И теперь я хочу в стеке сделать метод isEmpty, но сравнивать NULL и числовой тип глупо.
Наверное, лучше скинуть код:
class stackElement
	{
	private:
		int key;
		stackElement *deeper;
	public:
		stackElement()
		{
			key = NULL;
			deeper = NULL;
		}
		
		void setDeeper(stackElement *d)
		{
			deeper = d;
		}

		stackElement* getDeeper() const
		{
			return deeper;
		}

		void setValue(int value)
		{
			key = value;
		}
		int getValue() const
		{
			return key;
		}
	};


	class secondStack
	{
	private:
		stackElement *top;
	public:
		void Push(int n)
		{
			stackElement *temp = new stackElement;
			temp->setValue(n);
			temp->setDeeper(top);
			top = temp;
		}

		int Pop()
		{
			int deletedInteger = top->getValue();
			stackElement *temp = top;
			top = top->getDeeper();
			delete temp;
			return deletedInteger;
		}

		bool isEmpty()
		{
// дураку ясно, что если верхнему элементу стэка присвоить значение 0, то работать это не будет
			if (top->getValue() == NULL)
				return true;
			return false;
		}
	};

Собственно как сделать эту проверку? Может какую другую константу вместо NULL ?
  • Вопрос задан
  • 4283 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
class secondStack
{
  private:
    stackElement *top = nullptr;
  public:
   bool isEmpty() { return !top; }
Ответ написан
zagayevskiy
@zagayevskiy
Android developer at Yandex
Надеюсь, это чисто академическая задача:)
Вообще, классическое решение состоит в том, чтобы когда стек пуст, top == null. То есть, в самом начале вы НЕ запихиваете top(null, null).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@commander_spock
C++ Developer, Student
Нужно в классе хранить указатель на начало стека и на вершину
Ответ написан
Комментировать
@abcd0x00
В самом начале создаем 1 элемент стека "top" (он же пока что и является верхним) при помощи конструктора с полями key = NULL, deeperElement = NULL;

Зачем он там нужен, если в нём ничего нет? Бывает, учат так в вузах, добавляя лишние ненужные элементы.
Сделай стек и инициализируй его вершину нулевым указателем и по этому значению проверяй. Ни один указатель на объект не может быть равен нулевому указателю, поэтому это надёжное средство.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы