fahadkalil

lse_05042021_fimaula

Apr 12th, 2021
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.90 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) or self.tam == 0:
  20.             return True
  21.         return False
  22.  
  23.     def __len__(self):
  24.         return self.tam
  25.        
  26.     def inserir_fim(self, novo): # similar ao append da List
  27.         self.tam += 1        
  28.         if self.is_empty():
  29.             # lista vazia
  30.             self.head = novo
  31.             self.tail = novo            
  32.         else:
  33.             # ja possui itens
  34.             ## o tail atual deve apontar para o novo
  35.             ## o tail sera atribuido para o novo
  36.             self.tail.proximo = novo
  37.             self.tail = novo
  38.  
  39.     def inserir_inicio(self, novo): # similar ao insert(0,item) da List
  40.         if self.head is None and self.tail is None:
  41.             # lista vazia
  42.             self.head = novo
  43.             self.tail = novo
  44.         else:
  45.             novo.proximo = self.head
  46.             self.head = novo
  47.  
  48.         self.tam += 1
  49.        
  50.     def remover_inicio(self):
  51.         if self.is_empty():
  52.             print('Lista Vazia!')
  53.             return
  54.  
  55.         self.tam -= 1 # diminui o contador de itens
  56.        
  57.         ## quando temos apenas 1 item
  58.         if (self.head == self.tail):
  59.             removido = self.head
  60.             self.head = None
  61.             self.tail = None
  62.  
  63.         # lista possui + de 1 item              
  64.         else:            
  65.             removido = self.head
  66.             self.head = self.head.proximo
  67.            
  68.         return removido
  69.    
  70.     def remover_fim(self):
  71.         if self.is_empty():
  72.             print('Lista Vazia!')
  73.             return
  74.            
  75.         ## precisamos descobrir quem eh o penultimo da lista!!
  76.         removido = self.tail
  77.         self.tam -= 1
  78.        
  79.         ## quando temos apenas 1 item
  80.         if (self.head == self.tail):            
  81.             self.head = None
  82.             self.tail = None
  83.             return removido
  84.  
  85.         item = self.head
  86.         while (item != None):          
  87.  
  88.             # quando tem mais de 1
  89.             if (item.proximo == self.tail):              
  90.                 self.tail = item
  91.                 item.proximo = None                
  92.                 return removido
  93.            
  94.             item = item.proximo
  95.            
  96.     def buscar(self, valor):
  97.         if self.is_empty():
  98.             print('Lista Vazia')
  99.             return
  100.  
  101.         # seu codigo aqui
  102.         item = self.head
  103.         while (item != None):
  104.             if item.dado == valor:
  105.                 return item
  106.             item = item.proximo
  107.    
  108.     def imprimir(self):
  109.         if (self.head is None and self.tail is None):
  110.             print('Lista Vazia')
  111.             return
  112.            
  113.         item = self.head
  114.         while (item != None):
  115.             print(item)
  116.             item = item.proximo
  117.  
  118.     def imprimir_lado(self):
  119.         saida = ''
  120.         item = self.head
  121.         while (item != None):
  122.             if item == self.head:
  123.                 saida += '[' + str(item) + ']'
  124.             else:
  125.                 saida += ' => ' + '[' + str(item) + ']'
  126.             item = item.proximo
  127.         print(saida)
  128.        
  129. ## TESTES ##
  130.  
  131. lista = LSE()
  132. lista.inserir_fim( Nodo("XY") )
  133. lista.inserir_inicio( Nodo("C") )
  134. lista.inserir_inicio( Nodo("B") )
  135. lista.remover_fim()
  136. lista.imprimir_lado()
  137.  
  138. print(len(lista))
  139.  
  140. print("Localizando: {}".format( lista.buscar("B") ))
  141.  
  142. print(lista.head)
  143.  
  144. #lista.remover_fim()
  145. #lista.imprimir_lado()
  146.  
  147.  
Add Comment
Please, Sign In to add comment