fahadkalil

lde_01102020

Oct 1st, 2020 (edited)
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Lista Duplamente Encadeada com uso de Sentinelas
  2.  
  3. class Dnodo:
  4.     def __init__(self, dado = None):
  5.         self.dado = dado
  6.         self.anterior = None
  7.         self.proximo = None
  8.  
  9.     def __str__(self):
  10.         return str(self.dado)
  11.  
  12. class LDE:
  13.     def __init__(self):
  14.         self.header = Dnodo()   # <<< Sentinela Cabeça
  15.         self.trailer = Dnodo()  # <<< Sentinela Cauda
  16.         self.tam = 0            # qtde de itens na lista
  17.  
  18.     def is_empty(self):
  19.         if self.header.proximo is None and self.trailer.anterior is None:
  20.             return True
  21.         return False
  22.  
  23.     def __inserir(self, novo):
  24.         self.header.proximo = novo    # header -> novo
  25.         novo.anterior = self.header   # header <- novo
  26.         novo.proximo = self.trailer   # novo -> trailer
  27.         self.trailer.anterior = novo  # novo <- trailer
  28.      
  29.     def inserir_inicio(self, novo):
  30.         self.tam += 1
  31.         if self.is_empty():
  32.             self.__inserir(novo)
  33.         else:
  34.            pass
  35.  
  36.     def inserir_fim(self, novo):
  37.         self.tam += 1
  38.         if self.is_empty():
  39.             self.__inserir(novo)
  40.         else:
  41.             pass
  42.    
  43.     def remover_inicio(self):
  44.         if self.is_empty():
  45.             print('Lista Vazia!')
  46.             return
  47.         else:
  48.             # lista possui + de 1 item            
  49.             removido = self.header.proximo
  50.             # restante do codigo aqui...
  51.            
  52.         self.tam -= 1            
  53.         return removido
  54.        
  55.     def remover_fim(self):
  56.         if self.is_empty():
  57.             print('Lista Vazia!')
  58.             return
  59.        
  60.         else:
  61.             # refazer os apontamentos
  62.             pass
  63.  
  64.         self.tam -= 1
  65.         return removido
  66.  
  67.     def imprimir(self, reverso=False):
  68.         if self.is_empty():
  69.             print('Lista Vazia')
  70.             return
  71.  
  72.         if not reverso:
  73.             item = self.header.proximo # devolve o 1o da lista
  74.             while (item.proximo is not None):
  75.                 print(item)
  76.                 item = item.proximo
  77.         else:
  78.             item = self.trailer.anterior # devolve o ultimo da lista
  79.             while (item.anterior is not None):
  80.                 print(item)
  81.                 item = item.anterior
  82.    
  83.     def buscar(self, alvo): # retorna a 1a ocorrencia
  84.         pass
  85.  
  86.     def get(self, indice):
  87.         pass
  88.  
  89.     def remover_antes(self, alvo):
  90.         # header <-> [] <-> [] <-> trailer
  91.        
  92.         nodo_atual = self.buscar(alvo)
  93.         nodo_anterior = nodo_atual.anterior
  94.        
  95.         if (nodo_anterior != self.header):            
  96.             aux = nodo_anterior.anterior
  97.             aux.proximo = nodo_atual
  98.             nodo_atual.anterior = aux
  99.            
  100.             nodo_anterior.anterior = None
  101.             nodo_anterior.proximo = None
  102.            
  103.         self.tam -= 1
  104.        
  105.     def remover_apos(self, alvo):
  106.         pass    
  107.  
  108.     def substituir(self, alvo, valor):
  109.         pass
  110.  
  111.     def buscar_todos(self, alvo): # retorna uma list com resultados
  112.         lista_todos = []
  113.         ##
  114.         ## sua logica aqui
  115.         ##
  116.         return lista_todos
  117.  
  118.     def primeiro(self):
  119.         if self.is_empty():
  120.             print('Lista Vazia')
  121.             return
  122.         else:
  123.             return self.header.proximo
  124.  
  125.     def ultimo(self):
  126.         pass
  127.  
  128.     def __len__(self):
  129.         return self.tam
  130.  
  131. ## TESTES ##
  132.  
  133. lista = LDE()
  134. lista.inserir_inicio(Dnodo('abc'))
  135. lista.inserir_inicio(Dnodo('001'))
  136. lista.inserir_inicio(Dnodo('xyz'))
  137. lista.remover_inicio()
  138. lista.remover_inicio()
  139. lista.remover_inicio()
  140. lista.remover_inicio()
  141. lista.imprimir()
Add Comment
Please, Sign In to add comment