Lista Ligada em Python usando Classes
Publicado por Thiago Baldim (última atualização em 17/08/2010)
[ Hits: 10.847 ]
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
#<----------------------------------------------------------------------------->
Calcular a data do Carnaval e da Páscoa
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Instalando COSMIC no Linux Mint
Turbinando o Linux Mint: o poder das Nemo Actions
Inteligência Artificial no desenvolvimento de software: quando começar a usar?
[Resolvido] Algo deu errado ao abrir seu perfil
Usando o VNSTAT para medir o seu consumo de internet
Habilitando clipboard manager no ambiente COSMIC
Problema com som no laptop (5)
Quando vocês pararam de testar distros? (11)
Não estou conseguindo fazer funcionar meu Postfix na versão 2.4 no Deb... (2)









