Lista Ligada em Python usando Classes
Publicado por Thiago Baldim (última atualização em 17/08/2010)
[ Hits: 10.479 ]
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 #<----------------------------------------------------------------------------->
Script voltado a resolução da equação de estado dos gases reais
Horá do descanso! Uma peque aplicação que fiz usando pygtk
Existência de triângulo em Python 3
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)