continuando......... LDE
Lista Duplamente Encadeada com uso de Sentinelas
class DNodo():
def __init__(self, dado = None):
self.dado = dado
self.anterior = None
self.proximo = None
def __str__(self):
return str(self.dado)
def __repr__(self):
return str(self.dado)
class LDE:
def __init__(self):
self.header = DNodo() # Sentinela Cabeça
self.trailer = DNodo() # Sentinela Cauda
self.tam = 0 # qtde de itens na lista
def isEmpty(self):
if (self.header.proximo is None or
self.trailer.anterior is None):
return True
else:
return False
def inserirInicio(self, novo):
if self.isEmpty():
self.header.proximo = novo # header -> novo
novo.anterior = self.header # header <- novo
novo.proximo = self.trailer # novo -> trailer
self.trailer.anterior = novo # novo <- trailer
else:
atual_primeiro = self.header.proximo # para saber quem eh o primeiro
novo.proximo = atual_primeiro # novo -> atual
atual_primeiro.anterior = novo # novo <- atual
self.header.proximo = novo # header -> novo
novo.anterior = self.header # header <- novo
self.tam += 1
def inserirFim(self, novo):
if self.isEmpty():
self.trailer.anterior = novo # novo <- trailer
novo.proximo = self.trailer # novo -> trailer
novo.anterior = self.header # header <- novo
self.header.proximo = novo # header -> novo
else:
atual_ultimo = self.trailer.anterior # p/ saber quem eh o ultimo
novo.anterior = atual_ultimo # atual <- novo
atual_ultimo.proximo = novo # atual -> novo
self.trailer.anterior = novo # novo <- trailer
novo.proximo = self.trailer # novo -> trailer
self.tam += 1
def removerInicio(self):
if self.isEmpty():
print('Lista Vazia!')
return
## quando temos apenas 1 item
if (self.tam == 1):
self.tam -= 1
removido = self.header.proximo
self.header.proximo = None
self.trailer.anterior = None
else:
# lista possui + de 1 item
self.tam -= 1
removido = self.header.proximo
novo_head = removido.proximo
self.header.proximo = novo_head
removido.proximo = None
return removido
def removerFim(self):
if self.isEmpty():
print('Lista Vazia!')
return
## quando temos apenas 1 item
if (self.tam == 1):
self.tam -= 1
removido = self.header.proximo
self.header.proximo = None
self.trailer.anterior = None
else:
# lista possui + de 1 item
self.tam -= 1
removido = self.trailer.anterior
novo_tail = removido.anterior
self.trailer.anterior = novo_tail
removido.proximo = None
return removido
def imprimir(self, reverso=False):
if self.isEmpty():
print('Lista Vazia')
return
if not reverso: # mesmo que if (reverso == True)
item = self.header.proximo # devolve o 1o da lista
while (item.proximo is not None):
print(item)
item = item.proximo
else:
item = self.trailer.anterior # devolve o ultimo da lista
while (item.anterior is not None):
print(item)
item = item.anterior
def buscar(self, alvo): # retorna a 1a ocorrencia
if self.isEmpty():
print('Lista Vazia')
return
item = self.header.proximo # devolve o 1o da lista
while (item.proximo is not None):
if (item.dado == alvo):
# retorna nodo
return item
item = item.proximo
def removerAntes(self, alvo):
# header <-> [] <-> [] <-> trailer
Gostaria de saber como posso implementar a atividade, ou fazer-la?Obrigado desde já...