Lista Ligada em Python usando Classes
Publicado por Thiago Baldim (última atualização em 17/08/2010)
[ Hits: 10.794 ]
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
#<----------------------------------------------------------------------------->
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Adicionar botão "mostrar área de trabalho" no Zorin OS
Como montar um servidor de backup no linux
Trazendo de volta o Serviços em Segundo Plano no Plasma6









