Pular para o conteúdo

Lista Ligada em Python usando Classes

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.
Thiago Baldim TRBaldim
Hits: 10.960 Categoria: Python Subcategoria: Introdução
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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.
Download llist.tar.gz Enviar nova versão

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

Aprendendo a fazer equações em Python

Estrutura de repetição for e while (Com tratamento de erros)

dado-6-faces c/ Tkinter "telinha gráfica" o0o0o0

Gerador de números primos

Jogo da velha

#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

Entre na sua conta para comentar.