Lista Ligada - Versão Recursiva
Publicado por Thiago Baldim (última atualização em 09/08/2016)
[ Hits: 2.595 ]
Homepage: http://ubuntu4free.wordpress.com
Bom galera, faz uns anos que não entrava no Viva o Linux. Parei de trabalhar com servidores Linux e hoje sou desenvolvedor Python.
E me deparei com um código em Python que fiz a muitos anos. Para ser mais preciso, seis anos...
E resolvi criar um novo arquivo script de listas ligadas, usando Python 2.7. Usando técnicas de programação funcional para listas ligadas, que acabei aprendendo. Basicamente, isso mostra uma evolução que tive.
Fiquem a vontade para comentar ;)
''' Created on 14/07/2016 @author: thiago ''' class Empty: def __init__(self): self.head = None self.tail = None def isEmpty(self): return True #Metodo aplicado a funcoes como len def __len__(self): return 0 #Metodo aplicado a representacao como string def __str__(self): return 'Empty' #Metodo aplicado a representacao como objeto def __repr__(self): return 'Empty List' class NonEmpty(Empty): def __init__(self, obj): self.obj = obj def isEmpty(self): return False def __str__(self): return str(self.obj) def __repr__(self): return self.obj class List(Empty): def __init__(self, obj): self.len = len(obj) self.head = NonEmpty(obj[0]) self.tail = List(obj[1:]) if obj[1:] else Empty() def isEmpty(self): return False def insert(self, obj): self.len += len(obj) if not self.tail.isEmpty(): self.tail.insert(obj) else: self.tail = List(obj) def __len__(self): return self.len def __str__(self): return str(self.head) + ' -> ' + str(self.tail) def __repr__(self): return self.head + ' -> tail' #metodo aplicado para List[int] def __getitem__(self, index): if index > len(self): raise IndexError return self if index == 0 else self.tail[index-1] #metodo aplicado para del List[Int] def __delitem__(self, index): if index > len(self): raise IndexError self.len -= 1 if index == 0: self.head = self.tail.head self.tail = self.tail.tail else: self.tail.__delitem__(index - 1) if self.tail.head == None: self.tail = Empty() #metodo aplicado para soma de duas listas def __add__(self, obj): self[len(self) - 1].tail = obj return self #Exemplos de teste lista1 = List([1,2,3,4])#A classe deve receber algo do tipo Seq lista2 = List([99,34,11]) print lista1 #1 -> 2 -> 3 -> 4 -> Empty print lista1[2] #3 -> 4 -> Empty print lista1[2].head #3 print len(lista1) #4 del lista1[3] print lista1 #1 -> 2 -> 3 -> Empty print len(lista1) #3 print lista2 #99 -> 34 -> 11 -> Empty print lista1 + lista2 #1 -> 2 -> 3 -> 99 -> 34 -> 11 -> Empty
"Executar" - programa útil que executa comandos com histórico. PyGtk
Algoritmo de Euclides estendido em Python3
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
estou na 22.1 e não é atualizado pra 22.4 via "sudo full-upgrade&... (6)
É normal não gostar de KDE? (6)
Impressora epson l6270 não funciona em Linux mint (0)