Lista Ligada - Versão Recursiva
Publicado por Thiago Baldim (última atualização em 09/08/2016)
[ Hits: 2.467 ]
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.
Automatizando digitação de códigos 2FA no browser
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Como converter imagens PNG/JPEG para SVG em linha de comando
Fez porcaria no teu repositório Git? Aprenda a restaurar uma versão anterior do seu código!
Restaurando Fontes de Download do Hydra no Linux
Atualizando "na marra" o YT-DLP quando começa a dar erro de downloads
Como instalar o WPS com interface e corretor ortográfico em PT-BR no Arch Linux
Java é uma linguagem de brinquedo? (1)
Linux não desliga a tela da TV nunca (4)
Mudar ícone do favorito "encerrar sessão" do Debian 12.10, c... (2)