Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Nodo:
- def __init__(self, dado):
- self.dado = dado
- self.proximo = None
- def __str__(self):
- return str(self.dado)
- # ##############################
- # Lista Simplesmente Encadeada
- # [NODO] => [NODO] => None
- class LSE:
- def __init__(self):
- self.head = None # cabeca | inicio
- self.tail = None # cauda | fim
- self.tam = 0 # quantidade de elementos
- def is_empty(self): # retorna se a lista esta vazia
- if (self.head is None and self.tail is None):
- return True
- return False
- def inserirFim(self, novo): # similar ao append da List
- self.tam += 1
- if self.is_empty():
- # lista vazia
- self.head = novo
- self.tail = novo
- else:
- # ja possui itens
- ## o tail atual deve apontar para o novo
- ## o tail sera atribuido para o novo
- ultimo = self.tail
- ultimo.proximo = novo
- self.tail = novo
- def inserirInicio(self, novo): # similar ao insert(0,item) da List
- self.tam += 1
- if self.is_empty():
- self.head = novo
- self.tail = novo
- else:
- # obtem o atual head
- primeiro = self.head
- novo.proximo = primeiro
- self.head = novo
- def removerInicio(self):
- if self.is_empty():
- print('Lista Vazia!')
- return
- self.tam -= 1 # diminui o contador de itens
- ## quando temos apenas 1 item
- if (self.head == self.tail):
- removido = self.head
- self.head = None
- self.tail = None
- # lista possui + de 1 item
- else:
- removido = self.head
- novo_head = removido.proximo
- self.head = novo_head
- removido.proximo = None
- return removido
- def removerFim(self):
- if self.is_empty():
- print('Lista Vazia!')
- ## precisamos descobrir quem eh o penultimo da lista!!
- removido = None
- item = self.head
- while (item != None):
- # quando tem apenas 1 item
- if (item == self.tail and item == self.head):
- self.head = None
- self.tail = None
- self.tam -= 1
- return item
- # quando tem mais de 1
- if (item.proximo != None and item.proximo == self.tail):
- removido = self.tail
- self.tail = item
- item.proximo = None
- self.tam -= 1
- return removido
- item = item.proximo
- def buscar(self, valor):
- if self.is_empty():
- print('Lista Vazia')
- return
- else:
- item = self.head
- while (item != None):
- if valor == item.dado:
- return item
- item = item.proximo
- return None
- def imprimir(self):
- if (self.head is None and self.tail is None):
- print('Lista Vazia')
- return
- item = self.head
- while (item != None):
- print(item)
- item = item.proximo
- def imprimirLadoALado(self):
- saida = ''
- item = self.head
- while (item != None):
- if item == self.head:
- saida += '[' + str(item) + ']'
- else:
- saida += ' => ' + '[' + str(item) + ']'
- item = item.proximo
- print(saida)
- def __len__(self):
- return self.tam
- def clear(self):
- while self.head != None:
- self.removerInicio()
- def remover(self, valor):
- if self.is_empty():
- print('Lista Vazia')
- return
- else:
- item = self.head
- anterior = None
- while (item != None):
- if valor == item.dado: # encontrei o alvo
- self.tam -= 1 # decrementa a quantidade de itens
- anterior.proximo = item.proximo # fazer o nodo anterior a ele apontar para o proximo
- item.proximo = None
- return item
- anterior = item # guarda o item que representa o anterior
- item = item.proximo
- return None
- def get(self, indice):
- if self.is_empty():
- print('Lista Vazia')
- return
- else:
- item = self.head
- cont = 0
- while (item != None):
- if cont == indice:
- return item
- item = item.proximo
- cont += 1
- return None
- '''
- ## TESTES ##
- lista = LSE()
- lista.inserirFim( Nodo("ABC") )
- lista.inserirFim( Nodo("DEF") )
- #lista.inserirInicio( Nodo("123") )
- #lista.removerInicio()
- #lista.clear()
- #lista.imprimirLadoALado()
- #print(len(lista))
- #print(lista.buscar("ABC"))
- #print(lista.buscar("4252"))
- lista.inserirFim(Nodo("XYZ"))
- removido = lista.remover("DEF")
- lista.imprimirLadoALado()
- print(len(lista))
- achou = lista.get(1)
- achou.dado = "888"
- lista.imprimirLadoALado()
- '''
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement