Lista Ligada em Python usando Classes
Publicado por Thiago Baldim (última atualização em 17/08/2010)
[ Hits: 10.439 ]
Homepage: http://ubuntu4free.wordpress.com
Vendo que muitos procuram como programar em Python, resolvi escrever este programa de lista ligada mostrando todas as vantagens da não instanciação dos tipos em Python, ajudando a poder usar qualquer tipo de dado dentro dessa lista. Estou usando duas classes, uma para o nó e outra para a estrutura da lista. Esse código é muito bom para iniciantes em Python. Uso o Python 3.1 para esse código.
#!/usr/bin/python3.1 #-*- utf-8 -*- """ Autor: Thiago Baldim Objetivo: Lista ligada usando classes em Python Descrição: Criar listas ligadas com funções para auxiliar sua manipulação, com metodos como inserir (insert), tamanho (size), retorna valor (findval) deletar (delete), imprime na tela (toprint), deleta tudo (dellall) e retorna em vetor (tovec) """ from nodelist import * class Llist: head = None tail = None #<-----------------------------------------------------------------------------> #Inserir qualquer tipo de valor def insert(self, val): item = Node(val, None) if self.head == None and self.tail == None: self.head = item self.tail = item item.setnext(None) else: item.setnext(None) self.tail.setnext(item) self.tail = item #<-----------------------------------------------------------------------------> #Tamanho retornando 0 se vazio def size(self): if self.head == None and self.tail == None: return 0 else: walker = self.head count = 0 while walker != None: walker = walker.getnext() count += 1 return count #<-----------------------------------------------------------------------------> #Procura valor e retorna a posição da memória def findval(self, value): if self.head == None and self.tail == None: return None else: walker = self.head while walker != None: if walker.getvalue() == value: return walker walker = walker.getnext() return None #<-----------------------------------------------------------------------------> #Metodo sobrecarregado, retorna a posição da memória da cabeça da lista def findval(self): return self.head #<-----------------------------------------------------------------------------> #deleta valor, usando a busca e remove da memória def delete(self, value): todelete = self.findval(value) if todelete == self.head: self.head = todelete.getnext() del todelete return 1 else: walker = self.head while walker != None: if walker.getnext() == todelete: walker.setnext(todelete.getnext()) del todelete return 1 return 0 #<-----------------------------------------------------------------------------> #imprime valor, usa (end='') do python 3.1 para não pular linha def toprint(self): walker = self.head while walker != None: print(walker.getvalue(), ' ', end = '') walker = walker.getnext() print('') #<-----------------------------------------------------------------------------> #deleta todos os valor da lista e retorna 1 se foi feito com sucesso def delall(self): walker = self.head self.head = None while walker != None: toremove = walker walker = walker.getnext() del toremove return 1 #<-----------------------------------------------------------------------------> #retorna um vetor(list) def tovec(self): walker = self.head vec = [] while walker != None: vec.append(walker.getvalue()) walker = walker.getnext() return vec #Segunda classe classe node #!/usr/bin/python3.1 #-*- utf-8 -*- #classe node é a classe para definir os dados compostos na lista. class Node: value = 0 next = None #<-----------------------------------------------------------------------------> def __init__(self, value, next): self.value = value self.next = next #<-----------------------------------------------------------------------------> def setvalue(self, value): self.value = value #<-----------------------------------------------------------------------------> def setnext(self, next): self.next = next #<-----------------------------------------------------------------------------> def getvalue(self): return self.value #<-----------------------------------------------------------------------------> def getnext(self): return self.next #<----------------------------------------------------------------------------->
Distância entre dois pontos [Geometria Analítica]
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
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Estou com sede em aprender sobre o nosso querido Linux. (1)
big linux sem audio como resolver (2)
Como faz para dar um update-grub por shell script [RESOLVIDO] (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta