Lista Ligada em Python usando Classes
Publicado por Thiago Baldim (última atualização em 17/08/2010)
[ Hits: 10.626 ]
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 #<----------------------------------------------------------------------------->
Mini-dicionário de termos em Python
Desenhando uma estrela com Python
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Quebra de linha na data e hora no Linux Mint
Organizando seus PDF com o Zotero
Problema com Conexão Outlook via Firewall (OpenSUSE) com Internet Fibr... (5)
Sempre que vou baixar algum pacote acontece o erro dpkg (7)
como instalo panfrost-dri e o driver panfrost fork , ou panfrost (12)