Listas: Conceito e
estáticas
Prof: Sergio Souza Costa
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com

https://sites.google.com/site/profsergiocosta/home
http://www.slideshare.net/skosta/presentations?order=popular
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
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
Exemplos
de listas
Coisas a fazer

Compras
Catálogo telefônico
Qual propriedade é comum a
todas estas listas ?
Qual propriedade é comum a
todas estas listas ?

Linearidade
LISTA: DEFINIÇÃO FORMAL
Um lista L é uma coleção de n elementos x1, x2, x3
... Xn, para n >= 0.

1

Se n > 0, entao x1 é o primeiro e xn o último
elemento.

2

Para i = {1,2,...,n}, xi é precedido por xi-1 é
seguido por xi+1.

3

Se os elementos x1..xn são do mesmo tipo a lista é
denominada homogênea, caso contrário é
heterogênea.

4

Se n é igual a 0, então a lista é vazia.
LISTA: Tipo de dados abstrato
Descrevendo listas como um tipo abstrato de dados,
com 5 operações básicas.
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.
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 ?
Pode então mudar a
es
Abstrair deentação
repres detalh
tação.
sobre a implemenal sem que
computacion
Ocultacliereprdaentação
o r a nte es aplicação
compuerceba”.. TAD
“p tacional
define a interface
apenas.
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
Áreas contíguas da
memoria, x2 é
adjacente a x1 e x3.

x1

x2

x3

x4

xxxx

xxxx

xxxx

xxxx

1

2

3

4

xn
...

xxx
n
Representação computacional na memoria
Áreas contíguas da
memoria, x2 é
adjacente a x1 e x3.

x1

x2

x3

x4

xxxx

xxxx

xxxx

xxxx

1

2

3

4

xn
...

xxx
n

Qual estrutura que vocês trabalham
que tem esta propriedade?
Representação computacional na memoria
Áreas contíguas da
memoria, x2 é
adjacente a x1 e x3.

x1

x2

x3

x4

xxxx

xxxx

xxxx

xxxx

1

2

3

4

xn
...

xxx
n

Qual estrutura que vocês trabalham
que tem esta propriedade?
Os arranjos, também conhecido como
vetores.
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
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:

Observem que
vamos empregar
a notação similar
ao do clássico
livro (Cormen)
Operações: Tamanho

Tamanho ( A)
1.
retorna N[A]

1
A

15

2
6

3
2

4
9

N[A] = 4

5

6

7
Operações: Tamanho

Tamanho ( A)
1.
retorna N[A]

1
A

15

2
6

3
2

4

5

6

7

9

N[A] = 4

Como faço para saber se a lista esta
vazia ?
Operações: Tamanho

Tamanho ( A)
1.
retorna N[A]

1
A

15

2
6

3
2

4

5

6

7

9

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

1

Inserir( A, x)
1.
Se N[A] < MAX então
2.
N[A] <- N[A] + 1
3.
A[N[A]] <- x
4.
se não
5.
erro (“lista cheia”);

A

15

2
6

3
2

4

5

6

7

5

6

7

9

N[A] = 4

Inserir ( A, 20)
1
A

15

2
6

3
2

4
9

20

N[A] = 5
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

1

Busca ( A, x)
1.
para i <- 1 ate N[A] faça
2.
se A[i] = x então
3.
retorna i
4.
fim se
5.
fim para
6.
retorna 0

A

15

2
6

3
2

4
9

5

6

7

20

Busca ( A, 2)
1
A

15

2
6

3
2

Explorados

4
9

5

6

7

20

Não explorados
Operações: Busca

1

Busca ( A, x)
1.
para i <- 1 ate N[A] faça
2.
se A[i] = x então
3.
retorna i
4.
fim se
5.
fim para
6.
retorna 0

Essa busca é conhecida
como linear ou
sequencial, vocês
aprenderam outras
abordagens.

A

15

2
6

3
2

4
9

5

6

7

20

Busca ( A, 2)
1
A

15

2
6

3
2

Explorados

4
9

5

6

7

20

Não explorados
Operações: ElementoEm

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

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

A

15

2
6

ElementoEm(A, 4)

3
2

4
9

5
20

9

6

7
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,
xi+1 suceder xi.
Operações: Remover
Remove um elemento com um dado índice i.
Movo os elemento de A[i+1..n] para A[i..
n].

1
A

15

2
6

3
2

4
9

5

6

7

20

N[A] = 5

Remover( A, k)
1.
para i <- k até N[A]-1 faça
2.
A[i] = A[i+1]
3.
fim para
4.
N[A] = N[A] - 1
5.
retorna 0

Remover ( A, 3)

1
A

15

2
6

3
9

4

5

20

20

N[A] = 4

6

7
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.
Listas:  conceito e estáticas

Listas: conceito e estáticas

  • 1.
  • 2.
    Sobre mim Sérgio SouzaCosta Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home http://www.slideshare.net/skosta/presentations?order=popular https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta
  • 3.
    Roteiro ● ● ● Lista: Definição etipo abstrato de dados. Lista como estrutura de dados contígua.
  • 4.
    Roteiro ● ● ● ● Lista: Definição etipo abstrato de dados. Lista como estrutura de dados contígua. Lista como estrutura encadeada. Codificação de listas encadeadas em C.
  • 5.
  • 6.
    Exemplos de listas Coisas afazer Compras Catálogo telefônico
  • 7.
    Qual propriedade écomum a todas estas listas ?
  • 8.
    Qual propriedade écomum a todas estas listas ? Linearidade
  • 9.
    LISTA: DEFINIÇÃO FORMAL Umlista L é uma coleção de n elementos x1, x2, x3 ... Xn, para n >= 0. 1 Se n > 0, entao x1 é o primeiro e xn o último elemento. 2 Para i = {1,2,...,n}, xi é precedido por xi-1 é seguido por xi+1. 3 Se os elementos x1..xn são do mesmo tipo a lista é denominada homogênea, caso contrário é heterogênea. 4 Se n é igual a 0, então a lista é vazia.
  • 10.
    LISTA: Tipo dedados abstrato Descrevendo listas como um tipo abstrato de dados, com 5 operações básicas. 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.
  • 11.
    Qual a vantagemde descrever as estruturas de dados como tipos abstrato de dados ?
  • 12.
    Qual a vantagemde 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.
  • 13.
    Qual a vantagemde descrever as estruturas de dados como tipos abstrato de dados ? Pode então mudar a es Abstrair deentação repres detalh tação. sobre a implemenal sem que computacion Ocultacliereprdaentação o r a nte es aplicação compuerceba”.. TAD “p tacional define a interface apenas.
  • 14.
    Como representar aslistas na memoria do computador?
  • 15.
    Como representar aslistas na memoria do computador? Estruturas contíguas Estruturas Encadeadas
  • 16.
    Como representar aslistas na memoria do computador? Estruturas contíguas Estruturas Encadeadas
  • 17.
    Representação computacional namemoria Áreas contíguas da memoria, x2 é adjacente a x1 e x3. x1 x2 x3 x4 xxxx xxxx xxxx xxxx 1 2 3 4 xn ... xxx n
  • 18.
    Representação computacional namemoria Áreas contíguas da memoria, x2 é adjacente a x1 e x3. x1 x2 x3 x4 xxxx xxxx xxxx xxxx 1 2 3 4 xn ... xxx n Qual estrutura que vocês trabalham que tem esta propriedade?
  • 19.
    Representação computacional namemoria Áreas contíguas da memoria, x2 é adjacente a x1 e x3. x1 x2 x3 x4 xxxx xxxx xxxx xxxx 1 2 3 4 xn ... xxx n Qual estrutura que vocês trabalham que tem esta propriedade? Os arranjos, também conhecido como vetores.
  • 20.
    Definição Pode-se implementar umalista 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:
  • 21.
    Definição Pode-se implementar umalista 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: Observem que vamos empregar a notação similar ao do clássico livro (Cormen)
  • 22.
    Operações: Tamanho Tamanho (A) 1. retorna N[A] 1 A 15 2 6 3 2 4 9 N[A] = 4 5 6 7
  • 23.
    Operações: Tamanho Tamanho (A) 1. retorna N[A] 1 A 15 2 6 3 2 4 5 6 7 9 N[A] = 4 Como faço para saber se a lista esta vazia ?
  • 24.
    Operações: Tamanho Tamanho (A) 1. retorna N[A] 1 A 15 2 6 3 2 4 5 6 7 9 N[A] = 4 Como faço para saber se a lista esta vazia ? Se Tamanho (A) = 0 então faço algo
  • 25.
    Operações: Inserção 1 Inserir( A,x) 1. Se N[A] < MAX então 2. N[A] <- N[A] + 1 3. A[N[A]] <- x 4. se não 5. erro (“lista cheia”); A 15 2 6 3 2 4 5 6 7 5 6 7 9 N[A] = 4 Inserir ( A, 20) 1 A 15 2 6 3 2 4 9 20 N[A] = 5
  • 26.
    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).
  • 27.
    Operações: Busca 1 Busca (A, x) 1. para i <- 1 ate N[A] faça 2. se A[i] = x então 3. retorna i 4. fim se 5. fim para 6. retorna 0 A 15 2 6 3 2 4 9 5 6 7 20 Busca ( A, 2) 1 A 15 2 6 3 2 Explorados 4 9 5 6 7 20 Não explorados
  • 28.
    Operações: Busca 1 Busca (A, x) 1. para i <- 1 ate N[A] faça 2. se A[i] = x então 3. retorna i 4. fim se 5. fim para 6. retorna 0 Essa busca é conhecida como linear ou sequencial, vocês aprenderam outras abordagens. A 15 2 6 3 2 4 9 5 6 7 20 Busca ( A, 2) 1 A 15 2 6 3 2 Explorados 4 9 5 6 7 20 Não explorados
  • 29.
    Operações: ElementoEm Como sãoáreas contíguas e indexadas, basta retornar o elemento em A[i]. 1 ElementoEm( A, i) 1. retorna A[i] A 15 2 6 ElementoEm(A, 4) 3 2 4 9 5 20 9 6 7
  • 30.
  • 31.
    E a remoção? Lembre que posso querer remover um elemento em qualquer posição, no inicio, meio ou fim.
  • 32.
    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, xi+1 suceder xi.
  • 33.
    Operações: Remover Remove umelemento com um dado índice i. Movo os elemento de A[i+1..n] para A[i.. n]. 1 A 15 2 6 3 2 4 9 5 6 7 20 N[A] = 5 Remover( A, k) 1. para i <- k até N[A]-1 faça 2. A[i] = A[i+1] 3. fim para 4. N[A] = N[A] - 1 5. retorna 0 Remover ( A, 3) 1 A 15 2 6 3 9 4 5 20 20 N[A] = 4 6 7
  • 34.
    Pontos chaves ● ● ● ● Estrutura dedados 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.