Lista Ligada em Python usando Classes
Publicado por Thiago Baldim (última atualização em 17/08/2010)
[ Hits: 10.760 ]
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
#<----------------------------------------------------------------------------->
Calculadora Python - sem bugs !?
Conversor de Temperatura em Python
Organizador de números simples
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
VOL já não é mais como antes? (5)
É normal não gostar de KDE? (12)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









