Usando uma lista em Python, a implementação pode ser feita pelo seguinte código:
# Criando as exceções
class Empty(Exception):
"""Erro ao tentar acessar uma lista vazia."""
pass
class Full(Exception):
'''Erro ao tentar adicionar um item a uma pilha cheia'''
pass
# Implementando pilha
class ArrayStack:
'''
Implementação de uma pilha usando listas.
'''
def __init__(self, maxlen = None):
'''Criando uma pilha vazia.'''
self.__data = []
self.__maxlen = maxlen
def __len__(self):
'''Retorna número de elementos da pilha.'''
return len(self.__data)
def is_empty(self):
'''Checa se a pilha está vazia.'''
return len(self.__data) == 0
def push(self, e):
'''Adiciona um elemento ao topo da lista.'''
if self.__maxlen is None:
self.__data.append(e)
else:
if len(self.__data) == self.__maxlen:
raise Full('A pilha está cheia')
else:
self.__data.append(e)
def top(self):
'''Retorna (mas, não remove) elemento no top da pilha'''
if self.is_empty(): # Caso a pilha esteja vazia
raise Empty('Pilha está vazia')
return self.__data[-1]
def pop(self):
'''Remove e retorna elemento do topo da pilha'''
if self.is_empty():
raise Empty('Pilha vazia')
return self.__data.pop()
def get_data(self):
return self.__data
if __name__ == '__main__':
s = ArrayStack(3)
s.push(1)
s.push(2)
s.push(3)
s.get_data()
s.push(4) # Exceção Full é chamada
Na primeira parte do código são criadas as exceções que serão usadas nos métodos push
e top
quando a pilha estiver vazia ou cheia. As principais diferenças em relação a uma pilha sem limitação de capacidade estão nas definições dos métodos __init__
e push
.