Lista Ligada em Python usando Classes

Publicado por Thiago Baldim (última atualização em 17/08/2010)

[ Hits: 10.590 ]

Homepage: http://ubuntu4free.wordpress.com

Download llist.tar.gz




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.

  



Esconder código-fonte

#!/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
#<----------------------------------------------------------------------------->

Scripts recomendados

Calculo da area de um triangulo (introdutório)

Calculadora Python

Cálculo de Índices Contábeis

Um programa simples para gerar uma tabuada em python com menu utilizando laco for while try except e

Insertion Sort em Python


  

Comentários
[1] Comentário enviado por msiqueira553 em 24/03/2014 - 12:38h

Sou iniciante, e esse código deu tilt no meu cérebro!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts