fahadkalil

lse_final_2022

Mar 30th, 2022
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.89 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.tam == 0 or self.head is None or self.tail is None:
  20.             return True
  21.         return False
  22.        
  23.     def inserir_fim(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 inserir_inicio(self, novo): # similar ao insert(0,item) da List
  37.         if self.head is None and self.tail is None:
  38.             # lista vazia
  39.             self.head = novo
  40.             self.tail = novo
  41.         else:
  42.             novo.proximo = self.head
  43.             self.head = novo
  44.  
  45.         self.tam += 1
  46.        
  47.     def remover_inicio(self):
  48.         if self.is_empty():
  49.             print('Lista Vazia!')
  50.             return
  51.  
  52.         self.tam -= 1 # diminui o contador de itens
  53.        
  54.         ## quando temos apenas 1 item
  55.         if (self.head == self.tail):
  56.             removido = self.head
  57.             self.head = None
  58.             self.tail = None
  59.  
  60.         # lista possui + de 1 item              
  61.         else:            
  62.             removido = self.head
  63.             self.head = self.head.proximo
  64.             removido.proximo = None
  65.            
  66.         return removido
  67.    
  68.     def remover_fim(self):
  69.         if self.is_empty():
  70.             print('Lista Vazia!')
  71.             return
  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.         item = self.head
  100.         while (item != None):
  101.             if item.dado == valor:                
  102.                 return item
  103.            
  104.             item = item.proximo
  105.    
  106.     def imprimir(self):
  107.         if (self.head is None and self.tail is None):
  108.             print('Lista Vazia')
  109.             return
  110.            
  111.         item = self.head
  112.         while (item != None):
  113.             print(item)
  114.             item = item.proximo
  115.  
  116.     def imprimir_lado(self):
  117.         saida = ''
  118.         item = self.head
  119.         while (item != None):
  120.             if item == self.head:
  121.                 saida += '[' + str(item) + ']'
  122.             else:
  123.                 saida += ' => ' + '[' + str(item) + ']'
  124.             item = item.proximo
  125.         print(saida)
  126.        
  127. ## TESTES ##
  128.  
  129. lista = LSE()
  130. lista.inserir_fim( Nodo("ABC") )
  131. lista.inserir_fim( Nodo("DEF") )
  132. #lista.inserir_inicio( Nodo("123") )
  133. #lista.remover_fim()
  134. #lista.remover_inicio()
  135.  
  136. if lista.buscar("ABC") is not None:
  137.     print("Achou")
  138.  
  139. lista.imprimir_lado()
  140.  
  141.  
Add Comment
Please, Sign In to add comment