Lista Ligada em Python usando Classes
Publicado por Thiago Baldim (última atualização em 17/08/2010)
[ Hits: 10.857 ]
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
#<----------------------------------------------------------------------------->
Django - Gerando o diretório do projeto
Sequência de Fibonacci até determinado número
Cinnamon seria a aposta acertada frente às outras interfaces gráficas mais populares?
KDE Plasma - porque pode ser a melhor opção de interface gráfica
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Vou destruir sua infância:) (8)
Interface gráfica com problema (2)
Instalar Linux em notebook Sony Vaio VPCEG13EB (13)









