Проблема в методе удаления элемента из стека. Вы пытаетесь удалить элемент по индексу lastItem - 1, но lastItem содержит значение последнего элемента стека, а не его индекса. Это может привести к непредсказуемому поведению, когда вы пытаетесь удалить элемент, не находящийся в списке.
Для удаления последнего элемента из списка используйте метод RemoveAt с параметром, равным stack.Count - 1, который удалит элемент с индексом, равным количеству элементов в списке минус один:
stack.RemoveAt(stack.Count - 1);
Исправьте метод button3_Click соответственно и попробуйте еще раз:
private void button3_Click(object sender, EventArgs e)
{
if (stack.Count == 0)
{
MessageBox.Show("Stack is empty.");
}
else
{
stack.RemoveAt(stack.Count - 1);
UpdateStack();
}
}