Lista Ligada em Python usando Classes
Publicado por Thiago Baldim (última atualização em 17/08/2010)
[ Hits: 10.638 ]
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 #<----------------------------------------------------------------------------->
dado-6-faces c/ Tkinter "telinha gráfica" o0o0o0
Estrutura de repetição for e while
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Sinto uma leve lentidão ao arrastar, miniminizar e restauras as janela... (0)
Zorin OS - Virtual Box não consigo abrir maquinas virtuais (6)
Iinstalar o Scanner Kodak i940 no Linux Mint 19/20? (3)