Lista Ligada - Versão Recursiva
Publicado por Thiago Baldim (última atualização em 09/08/2016)
[ Hits: 2.529 ]
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.
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Máquina perereca - até onde é possível o uso de Linux?
Convertendo pacotes DEB que usam ZSTD (Padrão Novo) para XZ (Padrão Antigo)
Colocando skins no VLC Media Player
Como anda a saúde do disco rígido?
Debian 13 "trixie&... lançado! (34)
Alguém pode me ajudar entender essas perguntas? (física e matemática) (0)