Aula2 ListasEstaticas Estrutura de Dados FASA

22
Estrutura de Dados Prof. Rafael A. G. Lima Listas Usando Arranjos

description

Pilhas, listas e filas

Transcript of Aula2 ListasEstaticas Estrutura de Dados FASA

Page 1: Aula2 ListasEstaticas Estrutura de Dados FASA

Estrutura de Dados

Prof. Rafael A. G. Lima

Listas Usando Arranjos

Page 2: Aula2 ListasEstaticas Estrutura de Dados FASA

Conteúdo:

Prof. Rafael A. G. Lima

Listas Utilizando Arranjos

Listas estáticas – Contígua

Listas estáticas – Encadeadas

Simplesmente Encadeada

Duplamente Encadeada

Circular Simples

Circular Duplamente Encadeada

Page 3: Aula2 ListasEstaticas Estrutura de Dados FASA

Listas Estáticas - Contígua

Prof. Rafael A. G. Lima

Dentre as várias operações comuns de um TAD (não só de uma lista), podemos citar as seguintes como sendo as principais:

Inicialização;

Inserção de um elemento;

Remoção de um elemento;

Localização de um elemento.

Listas estáticas são tipicamente implementadas através de arranjos.

Em uma lista estática contígua, o sucessor de um elemento ocupa posição física subsequente.

Então, o arranjo associa o elemento a(i) com índice i (mapeamento sequencial).

Page 4: Aula2 ListasEstaticas Estrutura de Dados FASA

Listas Estáticas - Contígua

Prof. Rafael A. G. Lima

Características de lista estática contígua

Elementos armazenados fisicamente em posições

consecutivas;

A inserção de um elemento na posição i causa o

deslocamento para a direito do elemento a(i) ao último;

A eliminação do elemento a(i) requer o deslocamento

para a esquerda do a(i+1) ao último.

Page 5: Aula2 ListasEstaticas Estrutura de Dados FASA

Listas Estáticas - Contígua

Prof. Rafael A. G. Lima

As propriedades estruturadas da lista contígua estática permitem então as seguintes operações:

Qual é o primeiro elemento da lista?

Qual é o último elemento da lista?

Quais elementos sucedem um determinado elemento?

Quantos elementos existem na lista?

Inserir um elemento na lista.

Eliminar um elemento da lista.

Localizar um elemento na lista.

Consequência: As quatro primeiras operações são feitas emtempo constante. Mas, as operações de inserção, remoção elocalização requerem mais atenção.

Page 6: Aula2 ListasEstaticas Estrutura de Dados FASA

Listas Estáticas - Contígua

Prof. Rafael A. G. Lima

Vantagem:

Acesso direto indexado a qualquer elemento da lista.

Desvantagem:

Movimentação quando um elemento é eliminado/inserido;

Tamanho máximo pré-estimado (esta é uma desvantagem dequalquer lista estática, na verdade).

Quando usar:

Listas pequenas;

Tamanho máximo bem definido;

Inserção/remoção no fim da lista.

Page 7: Aula2 ListasEstaticas Estrutura de Dados FASA

Listas Estáticas - Contígua

Prof. Rafael A. G. Lima

Mostraremos um código parcialmente completo das listas

estáticas (contígua).

Para fins didáticos, descreveremos a estrutura de dados

para inteiros, mas, obviamente, a estrutura ensinada pode

ser empregada para qualquer tipo de dado válido.

Page 8: Aula2 ListasEstaticas Estrutura de Dados FASA

Listas Estáticas - Contígua

Prof. Rafael A. G. Lima

Faça as funções: tamanho, localiza:

Além destas, faça também uma função que receba duas

listas e concatene os elementos da segunda ao final da

primeira.

Page 9: Aula2 ListasEstaticas Estrutura de Dados FASA

Listas Estáticas - Encadeadas

Prof. Rafael A. G. Lima

Para acabar com o problema do deslocamentos dos

elementos, propomos o uso de listas encadeadas. Neste

tipo de lista, a ordem física dos elementos da lista não

necessariamente corresponde à ordem lógica que se quer

representar.

Na implementação é necessário armazenar

separadamente a informação que mostra a posição de um

dos elementos da lista, normalmente o primeiro.

Page 10: Aula2 ListasEstaticas Estrutura de Dados FASA

Listas Estáticas - Encadeadas

Prof. Rafael A. G. Lima

A principal vantagem de listas encadeadas é portanto a

eliminação do problema de deslocar elementos.

As principais desvantagens são:

Não se consegue acessar os elementos da lista em tempo

constante;

Mais operações para manter a integridade dos dados.

Page 11: Aula2 ListasEstaticas Estrutura de Dados FASA

Listas Estáticas - Encadeadas

Prof. Rafael A. G. Lima

Podemos dividir as listas encadeadas em:

Simplesmente encadeadas;

Duplamente encadeada;

Circular simples;

Circular duplamente encadeada;

No caso de listas não circulares, as operações de inclusão

e remoção devem considerar alguns casos especiais que

são a inclusão e remoção no começo e final da lista.

Page 12: Aula2 ListasEstaticas Estrutura de Dados FASA

Lista Simplesmente Encadeada

Prof. Rafael A. G. Lima

Em uma lista simplesmente encadeada, cada elemento

possui apenas a informação de que é seu sucessor.

Principal problema: impossibilidade de voltar ao elemento

anterior.

Page 13: Aula2 ListasEstaticas Estrutura de Dados FASA

Lista Simplesmente Encadeada

Prof. Rafael A. G. Lima

Para implementar a lista simplesmente encadeada estática, cadaposição do arranjo possuirá o elemento e o “apontador” parao próximo elemento.

Este “apontador” será o índice no arranjo onde se encontra opróximo elemento da lista.

Será necessário também armazenar o índice do primeiroelemento.

Por fim, precisaremos representar neste mesmo arranjo umalista de posições vazias para sabermos onde inserir umelemento.

Page 14: Aula2 ListasEstaticas Estrutura de Dados FASA

Lista Simplesmente Encadeada

Prof. Rafael A. G. Lima

Veja o exemplo abaixo de uma lista de caracteres com os

seguintes elementos, L={‘A’,‘B’, ‘C’, ‘D’, ‘E’).

Page 15: Aula2 ListasEstaticas Estrutura de Dados FASA

Lista Simplesmente Encadeada

Prof. Rafael A. G. Lima

Mostraremos um código completo parcialmente das listas

estáticas simplesmente encadeada.

Page 16: Aula2 ListasEstaticas Estrutura de Dados FASA

Exercício

Prof. Rafael A. G. Lima

// Remove o elemento “apontado” por p

// Retorna -1 em caso de erro e 0 se sucesso

// Não esqueça de cuidar da lista de posições vaizas

int remove(Lista *l, int p)

// Localiza um elemento na lista

// Retorna o índice do vetor onde o elemento se encontra ou

-1 caso o elemento não esteja na lista

int localiza(const Lista *l, int e)

Page 17: Aula2 ListasEstaticas Estrutura de Dados FASA

Lista Duplamente Encadeada

Prof. Rafael A. G. Lima

Nas listas simplesmente encadeadas guardamos apenas oindicador do próximo elemento.

Mas em alguns caso é preciso obter o elemento anterior pararealizar algumas operações como por exemplo a funçãoremove. Nesta função, para obter o elemento anterior a quemqueremos remover, temos que percorrer a lista desde aprimeira posição.

Para evitar esta busca, introduziremos um indicador para oelemento anterior, diminuindo a complexidade computacional.

Outra utilidade das listas duplamente encadeadas é quepodemos percorrê-las nos dois sentidos facilmente.

Page 18: Aula2 ListasEstaticas Estrutura de Dados FASA

Lista Duplamente Encadeada

Prof. Rafael A. G. Lima

Para entender a versão estática, veja um exemplo abaixo

de uma lista de caracteres com os seguintes elementos,

L=={‘A’,‘B’, ‘C’, ‘D’, ‘E’).

Page 19: Aula2 ListasEstaticas Estrutura de Dados FASA

Exercício

Prof. Rafael A. G. Lima

Baseie-se no exemplo anterior para implementar uma

lista duplamente encadeada estática, incluindo também

todas as operações fundamentais já mostradas.

Page 20: Aula2 ListasEstaticas Estrutura de Dados FASA

Listas Circulares

Prof. Rafael A. G. Lima

Uma lista circular pode ser simples ou duplamente

encadeada.

O que caracteriza as listas circulares é o fato do sucessor

do último elemento ser o primeiro da lista.

Page 21: Aula2 ListasEstaticas Estrutura de Dados FASA

Listas Circulares

Prof. Rafael A. G. Lima

A principal vantagem de listas circulares é que não

precisamos considerar casos especiais de inclusão e

remoção de elementos (primeiro e último). A não ser, é

claro, o cuidado com a integridade do indicador primeiro.

Page 22: Aula2 ListasEstaticas Estrutura de Dados FASA

Exercício

Prof. Rafael A. G. Lima

Implemente uma lista circular duplamente encadeada

estática, incluindo todas as operações fundamentais já

mostradas.