Стек на основе списка - EcsFlash/DataTypes GitHub Wiki

Исходный код -тут

Стек - это сути стакан(операции удаления и добавления происходят только с КОНЦА)

так сказать стопарик наливается сверху, и выпивается сверху

Структура узла

struct Node
{
	T data;
	Node* next;

	Node(T data)
	{
		this->data = data;
		next = nullptr;
	}
};

Создание пустого стека

StackList()
{
	top = nullptr;
}

Уничтожение стека

~StackList()
{
	clear();
}

void clear()
{
	while (!isEmpty())
		removeElem();
}

Проверка стека на пустоту

bool isEmpty()
{
	return top == nullptr;
}

Добавление элемента в стек

void addElem(T element)
{
	Node* newElement = new Node(element);
	if (isEmpty())
	{
		top = newElement;
	}
	else
	{
		newElement->next = top;
		top = newElement;
	}
	
}

Удаление элемента из стека

void removeElem()
{
	if (!isEmpty())
	{
		Node* removeElem = top;
		top = top->next;
		delete removeElem;
		removeElem = nullptr;
	}
}

Извлечение элемента из стека(тут по хорошему надо кидаться ошибками в случае когда стек пустой,но время 3 часа ночи и мне лень этим заниматься)

T peek()
{
	if(!isEmpty())
		return top->data;
}

Почему нужно кидаться ошибками? Да потому что если стек пустой, то мы ничего вернуть не можем, однако функция обязана что-то вернуть и в данном случае вернет какое-нибудь дефолтное значение для T. Например если есть пустой стек StackArr st то при вызове функции peek она вернет 1, что может нарушить логику выполнения вашего алгоритма.

⚠️ **GitHub.com Fallback** ⚠️