Стек на основе списка - 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, что может нарушить логику выполнения вашего алгоритма.