Lista Ligada em Python usando Classes

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

[ Hits: 10.452 ]

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

Comparando dois números e retornando o valor do maior

Organizar alfabeticamente

Formatando número de telefone celular (usando .format)

Cálculo de Números Perfeitos

numeros perfeitos


  

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