Lista Ligada - Versão Recursiva
Publicado por Thiago Baldim (última atualização em 09/08/2016)
[ Hits: 2.357 ]
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.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (12)