Advertisement
fahadkalil

lde_2020-1_resolvida

May 5th, 2020
1,288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.61 KB | None | 0 0
  1. # definindo o nodo duplo
  2. class Dnodo:
  3.     def __init__(self, dado=None):
  4.         self.dado = dado
  5.         self.proximo = None
  6.         self.anterior = None
  7.  
  8.     def __str__(self):
  9.         return str(self.dado)
  10.  
  11. # definindo a lista duplamente encadeada
  12. class LDE:
  13.     def __init__(self):
  14.         self.header = Dnodo()
  15.         self.trailer = Dnodo()
  16.         self.tam = 0
  17.  
  18.     def is_empty(self):
  19.         if (self.header.proximo is None or self.trailer.anterior is None):
  20.             return True
  21.         return False
  22.  
  23.     def inserir_inicio(self, novo):
  24.         self.tam += 1
  25.         if self.is_empty():
  26.             self.header.proximo = novo    # H -> novo
  27.             novo.anterior = self.header   # H <- novo
  28.             novo.proximo = self.trailer   # novo -> T
  29.             self.trailer.anterior = novo  # novo <- T
  30.         else:
  31.             primeiro = self.header.proximo
  32.             novo.proximo = primeiro
  33.             primeiro.anterior = novo
  34.             self.header.proximo = novo
  35.             novo.anterior = self.header
  36.  
  37.     def inserir_fim(self, novo):
  38.         self.tam += 1
  39.         if self.is_empty():
  40.             self.header.proximo = novo    # H -> novo
  41.             novo.anterior = self.header   # H <- novo
  42.             novo.proximo = self.trailer   # novo -> T
  43.             self.trailer.anterior = novo  # novo <- T
  44.         else:
  45.             ultimo = self.trailer.anterior
  46.             novo.anterior = ultimo
  47.             ultimo.proximo = novo
  48.             self.trailer.anterior = novo
  49.             novo.proximo = self.trailer
  50.  
  51.     def remover_fim(self):
  52.         self.tam -= 1
  53.         if self.is_empty():
  54.             print("LISTA VAZIA!")
  55.         else:
  56.             removido = self.trailer.anterior
  57.             penultimo = removido.anterior
  58.             penultimo.proximo = self.trailer
  59.             self.trailer.anterior = penultimo
  60.             removido.anterior = None
  61.             removido.proximo = None
  62.  
  63.             return removido
  64.  
  65.     def remover_inicio(self):
  66.         self.tam -= 1
  67.         if self.is_empty():
  68.             print("LISTA VAZIA!")
  69.         else:
  70.             removido = self.header.proximo
  71.             segundo = removido.proximo
  72.             segundo.anterior = self.header
  73.             self.header.proximo = segundo
  74.             removido.anterior = None
  75.             removido.proximo = None
  76.  
  77.             return removido
  78.  
  79.     def imprimir(self):
  80.         if self.is_empty():
  81.             print("LISTA VAZIA!")
  82.         else:
  83.             item = self.header.proximo
  84.             while item.proximo is not None:
  85.                 print(item)
  86.                 item = item.proximo
  87.  
  88.     def primeiro(self):
  89.         if not self.is_empty():
  90.             return self.header.proximo
  91.  
  92.     def ultimo(self):
  93.         if not self.is_empty():
  94.             return self.trailer.anterior
  95.  
  96.     def get(self, indice):
  97.         # nao fara busca diretamente no indice
  98.         # fara busca sequencial ate a posicao
  99.         if self.is_empty():
  100.             print("LISTA VAZIA!")
  101.         else:
  102.             count = 0
  103.             item = self.header.proximo
  104.             while item.proximo is not None:
  105.                 if count == indice:
  106.                     return item
  107.                 else:
  108.                     count += 1
  109.                 item = item.proximo        
  110.  
  111. ## TESTES ##
  112. lista = LDE()
  113. nodo1 = Dnodo("abc")
  114. nodo2 = Dnodo("def")
  115. nodo3 = Dnodo("zyx")
  116. lista.inserir_inicio(nodo1)
  117. lista.inserir_inicio(nodo2)
  118. lista.inserir_fim(nodo3)
  119. lista.imprimir()
  120. print(str(lista.get(2)))
  121. #removido = lista.remover_fim()
  122. #print("item removido: " + str(removido))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement