Lista Ligada em Python usando Classes
Publicado por Thiago Baldim (última atualização em 17/08/2010)
[ Hits: 10.957 ]
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
#<----------------------------------------------------------------------------->
Desenhando um quadrado em python, com funções.
File Browser: Crie sua Nuvem Pessoal Privada
A produção de áudio e vídeo no Linux e as distribuições dedicadas a esse fim
Criptografando sua Home com Gocryptfs para tristeza do meliante
A Involução do Linux e as Lambanças Desnecessárias desde o seu Lançamento
O Journal no Linux para a guarda e consulta de logs do sistema
Gerenciamento de Vídeo Híbrido (Intel/NVIDIA) via nvidia-prime no Ubuntu e derivados
Assistindo IPTV no Linux com Fred TV e Lista Free TV
Impressora Tomate MDK-007 no Ubuntu (ou qualquer distro Linux)
Acelerando a compilação de pacotes no Arch Linux (AUR) usando todos os núcleos do processador
Depois não querem que eu fale sobre as baseadas... (5)
Tive um problema ao abrir minha partição Btrfs. Como posso resolver is... (0)









