Listas Encadeadas Linguagem de Programação e Estrutura de dados Prof. Clemilton Pereira Como funciona uma pilha? • Empilhar • Desempilhar Como funciona uma fila? • Enfileirar • Desenfileirar Estruturas de dados(ED) Definição: organização de dados e operações (algoritmos) que podem ser aplicados sobres esses dados como forma de apoio à solução de problemas. Exemplos de EDs: • Pilhas • Filas • Listas Lineares • Árvores Definição de uma Lista em Python • Uma lista é uma coleção ordenada de zero ou mais itens de um mesmo tipo ou não. • Python fornece um tipo de dados embutido que implemente listas como posições contíguas de memória E se python (ou outra linguagem) não tivesse tal implementação? Pode-se pensar em duas Estruturas de Dados para implementar listas: • Listas Ordenadas • Listas Não Ordenadas Definição Lista Encadeada • Em listas encadeadas, há elementos e ligações entre eles, tal que a posição relativa do elementos seja mantida. Definição Lista Encadeada • Em listas encadeadas, há elementos e ligações entre eles, tal que a posição relativa do elementos seja mantida. Definição de Lista Encadeada Existem três importantes classes que devem ser trabalhadas em listas encadeadas: • Classe No • Classe ListaNaoOrdenada • Classe ListaOrdenada Lista Encadeada: Classe No • Cada objeto da classe No possui um valor associado e uma referência para o próximo objeto da classe No. Classe No -> Python Classe No -> Python Lista Encadeada: ClasseNaoOrdenada • Uma lista não ordenada consiste de uma coleção de nós, cada um ligado ao outro por referência. Uma vez que o nó inicial é conhecido, os demais podem ser acessados através de sucessivas referências. Lista Encadeada: ClasseNaoOrdenada • Uma lista não ordenada consiste de uma coleção de nós, cada um ligado ao outro por referência. Uma vez que o nó inicial é conhecido, os demais podem ser acessados através de sucessivas referências. Classe Lista: Implementação Classe ListaNaoOrdenada: Implementação As operações comumente utilizadas em listas não ordenadas são: • Vazia: verifica se a lista está vazia. • Inserir: insere um novo item na estrutura. • Buscar: verifica se um determinado item está na estrutura. • Remover: remove um determinado item da estrutura. • Tamanho: retorna a quantidade de itens da estrutura. • Imprimir: imprime os itens da estrutura. Classe ListaNaoOrdenada: Implementação Operação Vazia Classe ListaNaoOrdenada: Implementação Operação Inserir Executando o método “inserir” para o item = 17 Classe ListaNaoOrdenada: Implementação Operação Inserir Classe ListaNaoOrdenada: Implementação Operação Inserir Classe ListaNaoOrdenada: Implementação Operação Inserir (17) Executando o método “inserir” para o item = 28 Classe ListaNaoOrdenada: Implementação Operação Inserir (28) Classe ListaNaoOrdenada: Implementação Operação Inserir (28) Classe ListaNaoOrdenada: Implementação Operação Inserir (28) Executando o método “inserir” para o item = 36 Classe ListaNaoOrdenada: Implementação Operação Inserir (36) Classe ListaNaoOrdenada: Implementação Operação Inserir (36) Classe ListaNaoOrdenada: Implementação Operação Inserir (36) Operação Imprimir Devemos atravessar a lista ATÉ O FIM. Como identificar que chegamos ao final da lista? Qual a função da variável atual? Operação Imprimir Devemos atravessar a lista ATÉ O FIM. Como identificar que chegamos ao final da lista? R: Quando o nó aponta para None Qual a função da variável atual? R: Através dela vamos percorrer a lista. Sem ela, “perderíamos a cabeça” Operação Imprimir A variável atual é um ponteiro, que nos permite percorrer a lista, sem perder a referência do inicio da lista. O laço while irá continuar enquanto atual != none. Ou seja, até chegar no final da lista Para cada elemento da lista: imprimirmos o elemento da lista Atualizamos a variável atual Método __str__() Através da implementação acima, qualquer objeto do tipo Lista pode ser impresso: Operação Buscar • Buscar 17 Algoritmo - Esboço Percorra a lista elemento-a-elemento: Caso Encontre: Retorna Verdadeiro Se chegou ao fim da lista: Não encontrou elemento -> Retorna Falso Operação Buscar Operação tamanho Devemos percorrer a lista, até encontrar o ultimo elemento. Ao final devemos retornar o contador Operação tamanho Devemos percorrer a lista, até encontrar o ultimo elemento. Ao final devemos retornar o contador Como seria a remoção de um elemento de uma Lista Encadeada? Operação Remover • Operação Remover – meio da lista • Operação Remover – ínicio da lista: ???? Referências http://www.ecp.ufma.br/alana/wpcontent/uploads/2017/02/AED_09_Lista_Encadeada.pdf