Escolar Documentos
Profissional Documentos
Cultura Documentos
Campus Arapiraca
Objetivos
Objetivos
Apresentar a estrutura de dados Lista
Exibir os diferentes tipos de lista
Implementar os diferentes tipos de lista
Lista encadeada
Lista encadeada
string nome
string fone
int idade
proximo →
Lista encadeada
Lista encadeada
Não é possı́vel acessar diretamente um elemento da lista, pois os
espaços alocados não são contı́nuos
Exemplo: Lista
Localização na memória
Lista encadeada
Operações
Operações:
Criar lista vazia;
Verificar se a lista está vazia;
Inserir;
Pesquisar;
Remover;
Destruir a lista.
Lista encadeada
Operações - Criar e Verificar
Lista encadeada
Operações - Inserir
Lista encadeada
Operações - Pesquisar
Lista encadeada
Operações - Remover
Lista encadeada
Operações - Destruir
Lista encadeada
Implementação
class Node:
item = None
proximo = None
def __init__(self,item):
self.item = item
Lista encadeada
Implementação
class Lista_Encadeada:
inicio = None
tamanho = 0
def __init__(self):
self.inicio = Node(None)
def estaVazia(self):
return self.tamanho == 0
Lista encadeada
Implementação
#inserir
def inserir(self, item, pos):
if pos <= self.tamanho:
p = self.inicio
for i in range(pos):
p = p.proximo
aux = Node(item)
aux.proximo = p.proximo
p.proximo = aux
self.tamanho += 1
else:
print(’operacao invalida’)
Lista encadeada
Implementação
#remover
def remover(self, pos):
if not self.estaVazia() and pos<self.tamanho:
p = self.inicio
for i in range(pos):
p = p.proximo
aux = p.proximo
p.proximo = aux.proximo
item = aux.item
del aux
self.tamanho -=1
return item
else:
print(’operacao invalida’)
Lista encadeada
Implementação
#imprimir
def imprimir(self):
p = self.inicio
for i in range(self.tamanho):
p = p.proximo
print(p.item)
print(’---’)
Lista encadeada
Implementação
#buscar
def buscarPorItem(self, item):
p = self.inicio
for i in range(self.tamanho):
p = p.proximo
if p.item == item:
return i
return None
Lista encadeada
Implementação
lista = Lista_Encadeada()
lista.inserir(’a’, 0)
lista.inserir(’b’, 0)
lista.inserir(’c’, 0)
lista.inserir(’d’, 0)
lista.imprimir()
Exercı́cios
Exercı́cio
1 A implementação de lista apresentada possui operação de remoção recebendo a
posição que se deseja remover. Implemente uma operação de remoção que remova
o item passado como parâmetro, ou seja, um inteiro representando o item será
fornecido como parâmetro
2 A implementação de busca apresentada possui operação de remoção recebendo o
item que se deseja buscar. Implemente uma operação de busca que receba a posição
que se deseja, ou seja, um inteiro representando a posição será fornecida como
parâmetro
Operações:
Criar lista vazia;
Verificar se a lista está vazia;
Inserir;
Pesquisar;
Remover;
Destruir a lista.
Operações:
Criar lista vazia;
Verificar se a lista está vazia;
Inserir (no inı́cio);
Inserir (em uma posição);
Inserir (no final);
Pesquisar;
Remover (elemento);
Remover (posição);
Destruir a lista.
Exercı́cios
Exercı́cio
1 Altere o código da lista encadeada para que o TAD seja uma lista duplamente
encadeada
Exemplo:
Exemplo:
Exercı́cios
Exercı́cio
1 Altere o código da lista encadeada para que o TAD seja uma lista encadeada com
sentinela contendo:
Uma referência para o inı́cio da lista
Uma referência para o final da lista
Uma indicação do tamanho da lista
2 As operações de inserção (inı́cio, posição, final) e remoção (inı́cio, posição, final)
podem ser simplificadas com a existência da referência para o final da lista? Se sim,
implemente estas simplificações
Listas circulares
Exemplo:
Listas circulares
Exemplo:
Exercı́cios
Exercı́cio
1 Alguma operação do TAD lista deveria ser alterada? Se sim, forneça a
implementação destas
Listas ordenadas
Exercı́cios
Exercı́cio
1 Alguma operação do TAD lista deveria ser alterada? Se sim, forneça a
implementação destas
Resumo
Resumo
Uma lista é uma estrutura de dados de tamanho variável que pode armazenar
elementos
Cada elemento da lista (nó) possui uma referência (endereço) para o próximo
elemento
Diversas variações de implementação de lista:
Lista encadeada
Lista duplamente encadeada
Lista circular
Lista com sentinela
Leituras recomendadas
Perguntas?
Alexandre de Andrade Barbosa
alexandre.barbosa@arapiraca.ufal.br