Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # definindo o nodo duplo
- class Dnodo:
- def __init__(self, dado=None):
- self.dado = dado
- self.proximo = None
- self.anterior = None
- def __str__(self):
- return str(self.dado)
- # definindo a lista duplamente encadeada
- class LDE:
- def __init__(self):
- self.header = Dnodo()
- self.trailer = Dnodo()
- self.tam = 0
- def is_empty(self):
- if (self.header.proximo is None or self.trailer.anterior is None):
- return True
- return False
- def inserir_inicio(self, novo):
- self.tam += 1
- if self.is_empty():
- self.header.proximo = novo # H -> novo
- novo.anterior = self.header # H <- novo
- novo.proximo = self.trailer # novo -> T
- self.trailer.anterior = novo # novo <- T
- else:
- primeiro = self.header.proximo
- novo.proximo = primeiro
- primeiro.anterior = novo
- self.header.proximo = novo
- novo.anterior = self.header
- def inserir_fim(self, novo):
- self.tam += 1
- if self.is_empty():
- self.header.proximo = novo # H -> novo
- novo.anterior = self.header # H <- novo
- novo.proximo = self.trailer # novo -> T
- self.trailer.anterior = novo # novo <- T
- else:
- ultimo = self.trailer.anterior
- novo.anterior = ultimo
- ultimo.proximo = novo
- self.trailer.anterior = novo
- novo.proximo = self.trailer
- def remover_fim(self):
- self.tam -= 1
- if self.is_empty():
- print("LISTA VAZIA!")
- else:
- removido = self.trailer.anterior
- penultimo = removido.anterior
- penultimo.proximo = self.trailer
- self.trailer.anterior = penultimo
- removido.anterior = None
- removido.proximo = None
- return removido
- def remover_inicio(self):
- self.tam -= 1
- if self.is_empty():
- print("LISTA VAZIA!")
- else:
- removido = self.header.proximo
- segundo = removido.proximo
- segundo.anterior = self.header
- self.header.proximo = segundo
- removido.anterior = None
- removido.proximo = None
- return removido
- def imprimir(self):
- if self.is_empty():
- print("LISTA VAZIA!")
- else:
- item = self.header.proximo
- while item.proximo is not None:
- print(item)
- item = item.proximo
- def primeiro(self):
- if not self.is_empty():
- return self.header.proximo
- def ultimo(self):
- if not self.is_empty():
- return self.trailer.anterior
- def get(self, indice):
- # nao fara busca diretamente no indice
- # fara busca sequencial ate a posicao
- if self.is_empty():
- print("LISTA VAZIA!")
- else:
- count = 0
- item = self.header.proximo
- while item.proximo is not None:
- if count == indice:
- return item
- else:
- count += 1
- item = item.proximo
- ## TESTES ##
- lista = LDE()
- nodo1 = Dnodo("abc")
- nodo2 = Dnodo("def")
- nodo3 = Dnodo("zyx")
- lista.inserir_inicio(nodo1)
- lista.inserir_inicio(nodo2)
- lista.inserir_fim(nodo3)
- lista.imprimir()
- print(str(lista.get(2)))
- #removido = lista.remover_fim()
- #print("item removido: " + str(removido))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement