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

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

Стек на основе массива - это все тот же стакан, но теперь мы будем использовать массив, вместо привычных нам узлов.

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

StackArr(int len = 1)
{
	size = len;
	mass = new T[size];
	top = -1;
}

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

~StackArr()
{
	delete[]mass;
}

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

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

bool isEmpty()
{
	if (top < 0)
		return true;
	return false;
}

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

void addElem(T element)
{
	top++;
	top = top % size;
	mass[top] = element;
}

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

void removeElem()
{
	if (!isEmpty())
	{
		top--;
	}
}

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

T peek()
{
	if(!isEmpty())
		return mass[top];
}

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

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