Advertisement
fahadkalil

lse_17092020_fimaula

Sep 17th, 2020
1,354
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.76 KB | None | 0 0
  1. class Nodo:
  2.     def __init__(self, dado):
  3.         self.dado = dado
  4.         self.proximo = None
  5.  
  6.     def __str__(self):
  7.         return str(self.dado)
  8.  
  9. # ##############################
  10. # Lista Simplesmente Encadeada
  11. # [NODO] => [NODO] => None
  12. class LSE:
  13.     def __init__(self):
  14.         self.head = None # cabeca | inicio
  15.         self.tail = None # cauda  | fim
  16.         self.tam = 0     # quantidade de elementos
  17.  
  18.     def is_empty(self): # retorna se a lista esta vazia
  19.         if self.head is None and self.tail is None:
  20.             return True
  21.         return False
  22.        
  23.     def inserirFim(self, novo): # similar ao append da List
  24.         self.tam += 1        
  25.         if self.is_empty():
  26.             # lista vazia
  27.             self.head = novo
  28.             self.tail = novo            
  29.         else:
  30.             # ja possui itens
  31.             ## o tail atual deve apontar para o novo
  32.             ## o tail sera atribuido para o novo
  33.             self.tail.proximo = novo
  34.             self.tail = novo
  35.  
  36.     def inserirInicio(self, novo): # similar ao insert(0,item) da List
  37.         self.tam += 1
  38.         if self.is_empty():
  39.             self.head = novo
  40.             self.tail = novo
  41.         else:
  42.             # obtem o atual head
  43.             # refaz apontamentos
  44.             head_antigo = self.head
  45.             novo.proximo = head_antigo
  46.             self.head = novo
  47.        
  48.     def removerInicio(self):
  49.         if self.is_empty():
  50.             print('Lista Vazia!')
  51.             return
  52.  
  53.         self.tam -= 1 # diminui o contador de itens
  54.  
  55.         removido = self.head
  56.        
  57.         ## quando temos apenas 1 item
  58.         if (self.head == self.tail):            
  59.             self.head = None
  60.             self.tail = None
  61.  
  62.         # lista possui + de 1 item              
  63.         else:            
  64.             self.head = self.head.proximo
  65.             removido.proximo = None
  66.            
  67.         return removido
  68.    
  69.     def removerFim(self):
  70.         if self.is_empty():
  71.             print('Lista Vazia!')
  72.            
  73.         ## precisamos descobrir quem eh o penultimo da lista!!
  74.         removido = None
  75.         item = self.head
  76.         while (item != None):
  77.             # quando tem apenas 1 item
  78.             if (item == self.tail and item == self.head):
  79.                 self.head = None
  80.                 self.tail = None
  81.                 self.tam -= 1
  82.                 return item
  83.  
  84.             # quando tem mais de 1
  85.             if (item.proximo != None and item.proximo == self.tail):
  86.                 removido = self.tail
  87.                 self.tail = item
  88.                 item.proximo = None
  89.                 self.tam -= 1
  90.                 return removido
  91.            
  92.             item = item.proximo
  93.            
  94.     def buscar(self, valor):
  95.         if self.is_empty():
  96.             print('Lista Vazia')
  97.             return
  98.  
  99.         pass
  100.    
  101.     def imprimir(self):
  102.         if (self.head is None and self.tail is None):
  103.             print('Lista Vazia')
  104.             return
  105.            
  106.         item = self.head
  107.         while (item != None):
  108.             print(item)
  109.             item = item.proximo
  110.  
  111.     def imprimirLadoALado(self):
  112.         saida = ''
  113.         item = self.head
  114.         while (item != None):
  115.             if item == self.head:
  116.                 saida += '[' + str(item) + ']'
  117.             else:
  118.                 saida += ' => ' + '[' + str(item) + ']'
  119.             item = item.proximo
  120.         print(saida)
  121.  
  122.     def __len__(self):
  123.         return self.tam
  124.        
  125. ## TESTES ##
  126. lista = LSE()
  127. lista.inserirFim( Nodo("ABC") )
  128. lista.inserirFim( Nodo("DEF") )
  129. lista.inserirInicio( Nodo("IMED") )
  130. lista.imprimir()
  131. print(len(lista))
  132.  
  133. #lista.inserirInicio( Nodo("123") )
  134. #lista.removerFim()
  135. #lista.imprimirLadoALado()
  136.  
  137.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement