Listas: conceito e estáticas

35
Listas: Conceito e estáticas Prof: Sergio Souza Costa

Transcript of Listas: conceito e estáticas

Page 1: Listas:  conceito e estáticas

Listas: Conceito e estáticas

Prof: Sergio Souza Costa

Page 2: Listas:  conceito e estáticas

Sobre mim

Sérgio Souza CostaProfessor - UFMADoutor em Computação Aplicada (INPE)

[email protected]

https://sites.google.com/site/profsergiocosta/home

https://twitter.com/profsergiocosta

http://gplus.to/sergiosouzacosta

http://www.slideshare.net/skosta/presentations?order=popular

Page 3: Listas:  conceito e estáticas

Roteiro

● Lista: Definição e tipo abstrato de dados.● Lista como estrutura de dados contígua.●

Page 4: Listas:  conceito e estáticas

Roteiro

● Lista: Definição e tipo abstrato de dados.● Lista como estrutura de dados contígua.● Lista como estrutura encadeada.● Codificação de listas encadeadas em C.

Page 5: Listas:  conceito e estáticas

Exemplos de listas

Page 6: Listas:  conceito e estáticas

Coisas a fazer

Catálogo telefônicoCompras

Exemplos de listas

Page 7: Listas:  conceito e estáticas

Qual propriedade é comum a todas estas listas ?

Page 8: Listas:  conceito e estáticas

Qual propriedade é comum a todas estas listas ?

Linearidade

Page 9: Listas:  conceito e estáticas

Um lista L é uma coleção de n elementos x1, x

2, x

3

... Xn, para n >= 0.

Se os elementos x1..x

n são do mesmo tipo a lista é

denominada homogênea, caso contrário é heterogênea.

LISTA: DEFINIÇÃO FORMAL

Se n > 0, entao x1

é o primeiro e xn o último

elemento.

Para i = {1,2,...,n}, xi é precedido por x

i-1 é

seguido por xi+1

.

1

2

3

Se n é igual a 0, então a lista é vazia.4

Page 10: Listas:  conceito e estáticas

LISTA: Tipo de dados abstrato

Operação Descrição

Tamanho (L) Retorna o número de elementos de L

Inserir (L,x) Insere um elemento x a L

Busca (L, x) Busca um elemento x em L, retorna seu indice.

ElementoEm(L, i) Retorna um elemento de L localizado em i.

Remove (L, i) Remove um elemento de L localizado em i.

Descrevendo listas como um tipo abstrato de dados, com 5 operações básicas.

Page 11: Listas:  conceito e estáticas

Qual a vantagem de descrever as estruturas de dados como tipos abstrato de dados ?

Page 12: Listas:  conceito e estáticas

Qual a vantagem de descrever as estruturas de dados como tipos abstrato de dados ?

Abstrair os detalhes da

implementação,

ocultando a

representação

computacional. TAD

define a interface

apenas.

Page 13: Listas:  conceito e estáticas

Qual a vantagem de descrever as estruturas de dados como tipos abstrato de dados ?

Abstrair de detalhes

sobre a implementação.

Ocultar a representação

computacional. TAD

define a interface

apenas.

Pode então mudar a

representação

computacional sem que

o cliente da aplicação

“perceba”.

Page 14: Listas:  conceito e estáticas

Como representar as listas na memoria do computador?

Page 15: Listas:  conceito e estáticas

Como representar as listas na memoria do computador?

Estruturas contíguas

Estruturas Encadeadas

Page 16: Listas:  conceito e estáticas

Como representar as listas na memoria do computador?

Estruturas contíguas

Estruturas Encadeadas

Page 17: Listas:  conceito e estáticas

Representação computacional na memoria

xxxx xxxx xxxx xxxx . . .

1 2 3 4

xxx

n

x1

x2

x3

x4

xn

Áreas contíguas da memoria, x

2 é

adjacente a x1 e x

3.

Page 18: Listas:  conceito e estáticas

Representação computacional na memoria

xxxx xxxx xxxx xxxx . . .

1 2 3 4

xxx

n

x1

x2

x3

x4

xn

Áreas contíguas da memoria, x

2 é

adjacente a x1 e x

3.

Qual estrutura que vocês trabalham que tem esta propriedade?

Page 19: Listas:  conceito e estáticas

Representação computacional na memoria

xxxx xxxx xxxx xxxx . . .

1 2 3 4

xxx

n

x1

x2

x3

x4

xn

Áreas contíguas da memoria, x

2 é

adjacente a x1 e x

3.

Qual estrutura que vocês trabalham que tem esta propriedade?

Os arranjos, também conhecido como vetores.

Page 20: Listas:  conceito e estáticas

Pode-se implementar uma lista de no máximo MAX elementos, como um arranjo A[1..MAX]. Este arranjo tem um atributo N[A] que retorna a quantidade de elementos.

Para MAX=7, temos o seguinte arranjo A:

Definição

Page 21: Listas:  conceito e estáticas

Pode-se implementar uma lista de no máximo MAX elementos, como um arranjo A[1..MAX]. Este arranjo tem um atributo N[A] que retorna a quantidade de elementos.

Para MAX=7, temos o seguinte arranjo A:

Definição

Observem que

vamos empregar

a notação similar

ao do clássico

livro (Cormen)

Page 22: Listas:  conceito e estáticas

Operações: Tamanho

15 6 2 9A

1 2 3 4 5 6 7 Tamanho ( A)1. retorna N[A]

N[A] = 4

Page 23: Listas:  conceito e estáticas

Operações: Tamanho

15 6 2 9A

1 2 3 4 5 6 7 Tamanho ( A)1. retorna N[A]

N[A] = 4

Como faço para saber se a lista esta vazia ?

Page 24: Listas:  conceito e estáticas

Operações: Tamanho

15 6 2 9A

1 2 3 4 5 6 7 Tamanho ( A)1. retorna N[A]

N[A] = 4

Como faço para saber se a lista esta vazia ?

Se Tamanho (A) = 0 então faço algo

Page 25: Listas:  conceito e estáticas

Operações: Inserção

15 6 2 9A

N[A] = 4

1 2 3 4 5 6 7

15 6 2 9 20A

N[A] = 5

1 2 3 4 5 6 7

Inserir ( A, 20)

Inserir( A, x)1. Se N[A] < MAX então2. N[A] <- N[A] + 13. A[N[A]] <- x4. se não5. erro (“lista cheia”);

Page 26: Listas:  conceito e estáticas

Problema:

Nas estruturas contíguas é a necessário definir o seu tamanho a priori, podendo levar a:

● um superdimensionamento (desperdiço de mémoria) ou

● um subdimensionamento (impossibilidade de inserir mais elementos).

Page 27: Listas:  conceito e estáticas

Operações: Busca

Busca ( A, x)1. para i <- 1 ate N[A] faça2. se A[i] = x então3. retorna i4. fim se5. fim para6. retorna 0 15 6 2 9 20A

1 2 3 4 5 6 7

Busca ( A, 2)

15 6 2 9 20A

1 2 3 4 5 6 7

Explorados Não explorados

Page 28: Listas:  conceito e estáticas

Operações: Busca

Busca ( A, x)1. para i <- 1 ate N[A] faça2. se A[i] = x então3. retorna i4. fim se5. fim para6. retorna 0 15 6 2 9 20A

1 2 3 4 5 6 7

Busca ( A, 2)

15 6 2 9 20A

1 2 3 4 5 6 7

Explorados Não explorados

Essa busca é conhecida

como linear ou

sequencial, vocês

aprenderam outras

abordagens.

Page 29: Listas:  conceito e estáticas

Operações: ElementoEm

ElementoEm( A, i)1. retorna A[i]

15 6 2 9 20A

1 2 3 4 5 6 7

ElementoEm(A, 4) 9

Como são áreas contíguas e indexadas, basta retornar o elemento em A[i].

Page 30: Listas:  conceito e estáticas

E a remoção ?

Page 31: Listas:  conceito e estáticas

E a remoção ?

Lembre que posso querer remover um elemento em qualquer posição, no inicio, meio ou fim.

Page 32: Listas:  conceito e estáticas

E a remoção ?

Lembre que posso querer remover um elemento em qualquer posição, no inicio, meio ou fim.

Precisamos manter as propriedades da lista, x

i+1 suceder x

i.

Page 33: Listas:  conceito e estáticas

Operações: Remover

Remover( A, k)1. para i <- k até N[A]-1 faça2. A[i] = A[i+1]3. fim para4. N[A] = N[A] - 15. retorna 0

15 6 9 20 20A

N[A] = 4

1 2 3 4 5 6 7

Remover ( A, 3)

15 6 2 9 20A

N[A] = 5

1 2 3 4 5 6 7

Remove um elemento com um dado índice i.

Movo os elemento de A[i+1..n] para A[i..n].

Page 34: Listas:  conceito e estáticas

Pontos chaves

● Estrutura de dados lista é uma das mais importantes e fundamentais.

● Conceito chave da lista é a linearidade, podemos falar em primeiro, segundo ....

● Pode ser codificada usando estruturas contíguas e encadeadas

● Estruturas contíguas o tamanho é dado a priori.

Page 35: Listas:  conceito e estáticas