Lista Ligada em Python usando Classes
Publicado por Thiago Baldim (última atualização em 17/08/2010)
[ Hits: 10.669 ]
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 #<----------------------------------------------------------------------------->
Primeiro código em python que escrevi acompanhando aula do google.
Estrutura de repetição for e while
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Debian 13 Trixie para Iniciantes
Convertendo pacotes DEB que usam ZSTD (Padrão Novo) para XZ (Padrão Antigo)
Debian 13 "trixie&... lançado! (44)
Rust é o "C da nossa geração"? (3)
Gerenciador de arquivos é finalizado ao abrir pasta específica (2)