Advertisement
fahadkalil

lse_24092020_fimaula

Sep 24th, 2020
1,360
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.95 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.                
  96.         if self.is_empty():
  97.             print('Lista Vazia')
  98.             return
  99.         else:
  100.             if self.tail.dado == valor.dado:
  101.                 return self.tail
  102.             else:
  103.                 item = self.head
  104.                 while (item != self.tail):
  105.                     if item.dado == valor.dado:
  106.                         return item
  107.                     item = item.proximo
  108.    
  109.     def imprimir(self):
  110.         if (self.head is None and self.tail is None):
  111.             print('Lista Vazia')
  112.             return
  113.            
  114.         item = self.head
  115.         while (item != None):
  116.             print(item)
  117.             item = item.proximo
  118.  
  119.     def imprimirLadoALado(self):
  120.         saida = ''
  121.         item = self.head
  122.         while (item != None):
  123.             if item == self.head:
  124.                 saida += '[' + str(item) + ']'
  125.             else:
  126.                 saida += ' => ' + '[' + str(item) + ']'
  127.             item = item.proximo
  128.         print(saida)
  129.  
  130.     def __len__(self):
  131.         return self.tam
  132.  
  133.     def limpar(self):
  134.         while self.tam > 0:
  135.             self.removerInicio()
  136.  
  137.     def get(self, pos):
  138.         if self.is_empty():
  139.             print('Lista Vazia')
  140.             return
  141.  
  142.         if pos < 0 or pos > self.tam - 1:
  143.             return
  144.  
  145.         index = 0
  146.         item = self.head
  147.         while item != None:
  148.             if index == pos:
  149.                 return item
  150.             item = item.proximo
  151.             index += 1
  152.  
  153.     def toList(self):
  154.         if self.is_empty():
  155.             print('Lista Vazia')
  156.             return
  157.        
  158.         l = []
  159.         item = self.head
  160.         while item != None:
  161.             l.append(item.dado)
  162.             item = item.proximo
  163.  
  164.         return l
  165.  
  166. """        
  167. ## TESTES ##
  168. lista = LSE()
  169. lista.inserirFim( Nodo("ABC") ) # 1
  170. lista.inserirFim( Nodo("DEF") ) # 2
  171. lista.inserirInicio( Nodo("IMED") ) # 0
  172. lista.imprimir()
  173. print(len(lista))
  174.  
  175. #print(lista.buscar( Nodo("DEF") ))
  176. #lista.limpar()
  177. #lista.imprimir()
  178. #print(len(lista))
  179.  
  180. print(lista.get(0))
  181.  
  182. print( lista.toList() )
  183.  
  184. #lista.inserirInicio( Nodo("123") )
  185. #lista.removerFim()
  186. #lista.imprimirLadoALado()
  187.  
  188. """
  189.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement