Listas: conceito e estáticas

Post on 06-Jun-2015

378 views 0 download

Transcript of Listas: conceito e estáticas

Listas: Conceito e estáticas

Prof: Sergio Souza Costa

Sobre mim

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

prof.sergio.costa@gmail.com

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

https://twitter.com/profsergiocosta

http://gplus.to/sergiosouzacosta

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

Roteiro

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

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.

Exemplos de listas

Coisas a fazer

Catálogo telefônicoCompras

Exemplos de listas

Qual propriedade é comum a todas estas listas ?

Qual propriedade é comum a todas estas listas ?

Linearidade

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

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.

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

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.

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”.

Como representar as listas na memoria do computador?

Como representar as listas na memoria do computador?

Estruturas contíguas

Estruturas Encadeadas

Como representar as listas na memoria do computador?

Estruturas contíguas

Estruturas Encadeadas

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.

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?

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.

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

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)

Operações: Tamanho

15 6 2 9A

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

N[A] = 4

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 ?

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

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”);

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).

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

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.

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].

E a remoção ?

E a remoção ?

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

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.

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].

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.