Lista Ligada - Versão Recursiva
Publicado por Thiago Baldim (última atualização em 09/08/2016)
[ Hits: 2.546 ]
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
Algoritmo de Euclides estendido em Python3
Nenhum coment�rio foi encontrado.
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Realizar overclock no Miyoo Mini (plus ou normal)
Otimização de memória para máquinas modestas
linux mint reconhece microfone de lapela como fone de ouvido sem micro... (1)
Unbuntu não atualiza o firmware [RESOLVIDO] (2)
Dúvidas sobre a originalidade de conteúdos online (10)
Erro de interface de Rede no Virt Manager dentro Debian 13 KDE [RESOLV... (12)