Advertisement
fahadkalil

lde_alunos_19092019

Sep 19th, 2019
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.03 KB | None | 0 0
  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 inserirInicio(self, novo):
  30.         if self.is_empty():
  31.             self.__inserir(novo)
  32.         else:
  33.             atual_primeiro = self.header.proximo #para saber quem eh o primeiro
  34.             novo.proximo = atual_primeiro   # atual <- novo
  35.             atual_primeiro.anterior = novo  # atual -> novo
  36.             self.header.proximo = novo      # header -> novo
  37.             novo.anterior = self.header     # header <- novo      
  38.  
  39.         self.tam += 1
  40.  
  41.     def inserirFim(self, novo):
  42.         if self.is_empty():
  43.             self.__inserir(novo)
  44.         else:
  45.             pass
  46.  
  47.         self.tam += 1
  48.    
  49.     def removerInicio(self):
  50.         if self.is_empty():
  51.             print('Lista Vazia!')
  52.             return
  53.         else:
  54.             # lista possui + de 1 item            
  55.             removido = self.header.proximo
  56.             novo_head = removido.proximo
  57.             self.header.proximo = novo_head
  58.             removido.proximo = None
  59.             removido.anterior = None
  60.            
  61.         self.tam -= 1            
  62.         return removido
  63.        
  64.     def removerFim(self):
  65.         if self.is_empty():
  66.             print('Lista Vazia!')
  67.             return
  68.        
  69.         else:
  70.             # refazer os apontamentos
  71.             pass
  72.  
  73.         self.tam -= 1
  74.         return removido
  75.  
  76.     def imprimir(self, reverso=False):
  77.         if self.is_empty():
  78.             print('Lista Vazia')
  79.             return
  80.  
  81.         if not reverso: # mesmo que if (reverso == True)
  82.             item = self.header.proximo # devolve o 1o da lista
  83.             while (item.proximo is not None):
  84.                 print(item)
  85.                 item = item.proximo
  86.         else:
  87.             item = self.trailer.anterior # devolve o ultimo da lista
  88.             while (item.anterior is not None):
  89.                 print(item)
  90.                 item = item.anterior
  91.    
  92.     def removerAntes(self, alvo):
  93.         # header <-> [] <-> [] <-> trailer
  94.        
  95.         nodo_atual = self.buscar(alvo)
  96.         nodo_anterior = nodo_atual.anterior
  97.        
  98.         if (nodo_anterior != self.header):            
  99.             aux = nodo_anterior.anterior
  100.             aux.proximo = nodo_atual
  101.             nodo_atual.anterior = aux
  102.            
  103.             nodo_anterior.anterior = None
  104.             nodo_anterior.proximo = None
  105.            
  106.         self.tam -= 1
  107.        
  108.     def removerApos(self, alvo):
  109.         pass
  110.  
  111.     def get(self, indice):
  112.         pass
  113.  
  114.     def buscar(self, alvo): # retorna a 1a ocorrencia
  115.         pass
  116.  
  117.     def substituir(self, alvo, valor):
  118.         pass
  119.  
  120.     def buscarTodos(self, alvo): # retorna uma list com resultados
  121.         pass
  122.  
  123.     def primeiro(self):
  124.         if self.is_empty():
  125.             print('Lista Vazia')
  126.             return
  127.         else:
  128.             return self.header.proximo
  129.  
  130.     def ultimo(self):
  131.         pass
  132.  
  133.     def __len__(self):
  134.         return self.tam
  135.  
  136. ## TESTES ##
  137.  
  138. lista = LDE()
  139. lista.inserirInicio(Dnodo('abc'))
  140. lista.inserirInicio(Dnodo('001'))
  141. lista.inserirInicio(Dnodo('xyz'))
  142. lista.removerInicio()
  143. lista.removerInicio()
  144. lista.removerInicio()
  145. lista.removerInicio()
  146. lista.imprimir()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement