Advertisement
fahadkalil

lde_circular_2021-2

May 5th, 2020 (edited)
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.91 KB | None | 0 0
  1. ## Lista Duplamente Encadeada Circular
  2.  
  3. class DNodo:
  4.     def __init__(self, dado = None):
  5.         self.dado = dado
  6.         self.proximo = None
  7.         self.anterior = None
  8.  
  9.     def __str__(self):
  10.         return self.dado
  11.  
  12. class LDECircular:
  13.     def __init__(self):
  14.         self.sentinela = DNodo()
  15.         self.sentinela.proximo = self.sentinela
  16.         self.sentinela.anterior = self.sentinela
  17.         self.tam = 0
  18.  
  19.     def is_empty(self): ## verifica se lista é vazia
  20.         if (self.sentinela.proximo == self.sentinela and
  21.             self.sentinela.anterior == self.sentinela) or self.tam == 0:
  22.             return True
  23.         else:
  24.             return False
  25.  
  26.     def primeiro(self):
  27.         if self.is_empty():
  28.             print('Lista Vazia')
  29.             return
  30.         else:
  31.             return self.sentinela.proximo
  32.  
  33.     def ultimo(self):
  34.         if self.is_empty():
  35.             print('Lista Vazia')
  36.             return
  37.         else:
  38.             return self.sentinela.anterior
  39.  
  40.     def inserir(self, novo): # inserirFim (append)
  41.         if isinstance(novo, DNodo): # se for um DNodo
  42.            
  43.             ## nao eh necessario testar vazio
  44.             ultimo = self.sentinela.anterior
  45.            
  46.             ultimo.proximo = novo
  47.             novo.anterior = ultimo
  48.             novo.proximo = self.sentinela
  49.             self.sentinela.anterior = novo
  50.         else:
  51.             raise Exception("Método inserir espera um DNodo")
  52.            
  53.         self.tam += 1
  54.  
  55.     def inserir_inicio(self):
  56.         if isinstance(novo, DNodo): # se for um DNodo
  57.             pass
  58.         else:
  59.             raise Exception("Método inserirInicio espera um DNodo")
  60.        
  61.         self.tam += 1
  62.    
  63.     def remover(self): # remover_inicio
  64.         removido = self.sentinela.proximo
  65.         self.sentinela.proximo = removido.proximo
  66.         removido.proximo.anterior = self.sentinela
  67.        
  68.         self.tam -= 1
  69.         return removido
  70.  
  71.     def remover_fim(self): # removerFim
  72.         removido = self.sentinela.anterior
  73.         removido.anterior.proximo = self.sentinela
  74.         self.sentinela.anterior = removido.anterior
  75.  
  76.         self.tam -= 1
  77.         return removido
  78.  
  79.     def get(self, index): # obter item em determinada posicao
  80.         if not self.is_empty():
  81.             i = 0
  82.             item = self.sentinela.proximo                
  83.             while (item != self.sentinela):
  84.                 if (i == index):
  85.                     return item
  86.                
  87.                 item = item.proximo
  88.                 i += 1
  89.  
  90.     def buscar(self, dado): # buscar comparando o dado do DNodo
  91.         if not self.is_empty():
  92.             item = self.sentinela.proximo                
  93.             while (item != self.sentinela):                
  94.                 if item.dado == dado:
  95.                     return item
  96.                 item = item.proximo
  97.        
  98.     def imprimir(self, direcao = None):
  99.         if not self.is_empty():
  100.             if (direcao == 'frente' or direcao is None): # forward (padrao)
  101.                 item = self.sentinela.proximo                
  102.                 while (item != self.sentinela):
  103.                     print(item)
  104.                     item = item.proximo
  105.                    
  106.             elif (direcao == 'tras'): # backward
  107.                 item = self.sentinela.anterior
  108.                 while (item != self.sentinela):
  109.                     print(item)
  110.                     item = item.anterior
  111.             else:
  112.                 raise Exception("Direção inválida, use: frente ou tras")
  113.  
  114. lista = LDECircular()
  115. lista.inserir(DNodo('A'))
  116. lista.inserir(DNodo('B'))
  117. lista.inserir(DNodo('C'))
  118. lista.imprimir() ## ira imprimir B e C
  119. #lista.imprimir('tras')
  120. print('Procurando por \'C\'')
  121. achou = lista.buscar('C')
  122. print('Encontrado: {}'.format(achou))
  123. #lista.remover()
  124. #lista.remover_fim()
  125. print('Item na posicao 1: {}'.format(lista.get(1)))
  126. lista.imprimir()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement