Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # 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)
- 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 is_empty(self):
- if self.header.proximo is None and self.trailer.anterior is None:
- return True
- return False
- def __inserir(self, novo):
- self.header.proximo = novo # header -> novo
- novo.anterior = self.header # header <- novo
- novo.proximo = self.trailer # novo -> trailer
- self.trailer.anterior = novo # novo <- trailer
- def inserirInicio(self, novo):
- if self.is_empty():
- self.__inserir(novo)
- else:
- atual_primeiro = self.header.proximo #para saber quem eh o primeiro
- novo.proximo = atual_primeiro # atual <- novo
- atual_primeiro.anterior = novo # atual -> novo
- self.header.proximo = novo # header -> novo
- novo.anterior = self.header # header <- novo
- self.tam += 1
- def inserirFim(self, novo):
- if self.is_empty():
- self.__inserir(novo)
- else:
- atual_ultimo = self.trailer.anterior
- novo.anterior = atual_ultimo
- novo.proximo = self.trailer
- atual_ultimo.proximo = novo
- self.trailer.anterior = novo
- self.tam += 1
- def __remover(self): # chamado quando temos apenas 1 elemento na LDE
- removido = self.header.proximo
- removido.proximo = None
- removido.anterior = None
- self.header.proximo = None
- self.trailer.anterior = None
- return removido
- def removerInicio(self):
- if self.is_empty():
- print('Lista Vazia!')
- return
- if self.tam == 1:
- removido = self.__remover()
- else:
- # lista possui + de 1 item
- removido = self.header.proximo
- novo_head = removido.proximo
- self.header.proximo = novo_head
- removido.proximo = None
- removido.anterior = None
- self.tam -= 1
- return removido
- def removerFim(self):
- if self.is_empty():
- print('Lista Vazia!')
- return
- if self.tam == 1:
- removido = self.__remover()
- else:
- # descobrir quem eh o ultimo
- removido = self.trailer.anterior
- novo_ultimo = removido.anterior
- novo_ultimo.proximo = self.trailer
- self.trailer.anterior = novo_ultimo
- removido.proximo = None
- removido.anterior = None
- self.tam -= 1
- return removido
- def imprimir(self, reverso=False):
- if self.is_empty():
- 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 removerAntes(self, alvo):
- # header <-> [] <-> [] <-> trailer
- nodo_atual = self.buscar(alvo)
- nodo_anterior = nodo_atual.anterior
- if (nodo_anterior != self.header):
- aux = nodo_anterior.anterior
- aux.proximo = nodo_atual
- nodo_atual.anterior = aux
- nodo_anterior.anterior = None
- nodo_anterior.proximo = None
- self.tam -= 1
- def removerApos(self, alvo):
- pass
- def get(self, indice):
- pass
- def buscar(self, alvo): # retorna a 1a ocorrencia
- pass
- def substituir(self, alvo, valor):
- pass
- def buscarTodos(self, alvo): # retorna uma list com resultados
- pass
- def primeiro(self):
- if self.is_empty():
- print('Lista Vazia')
- return
- else:
- return self.header.proximo
- def ultimo(self):
- pass
- def __len__(self):
- return self.tam
- ## TESTES ##
- lista = LDE()
- lista.inserirInicio(Dnodo('abc'))
- lista.inserirInicio(Dnodo('001'))
- lista.inserirInicio(Dnodo('xyz'))
- lista.inserirFim(Dnodo('zzz'))
- lista.removerInicio()
- lista.removerFim()
- lista.imprimir()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement