Você está na página 1de 48

Estrutura de Dados I 1 / 48

Estruturas Genéricas

Professor: Elton Sarmanho1


E-mail: eltonss@ufpa.br
‡°
1 Faculdade de Sistemas de Informação - UFPA/CUTINS

14 de abril de 2022
Estrutura de Dados I 2 / 48

Roteiro

Conceitos Gerais
Objetivos

Listas
Conceitos Gerais
Operações
Estrutura de Dados I 3 / 48

Roteiro

Estrutura de Dados: Pilha e Fila


Caracterı́sticas Gerais

Pilha (Stack)
Conceitos Gerais
Estrutura de Dados I 4 / 48

Roteiro

Fila (Queue)
Conceitos Gerais

Trabalho 1 - Estruturas Genéricas.


Estrutura de Dados I 5 / 48
Conceitos Gerais
Objetivos

I Esta aula apresenta conceitos gerais pilhas, filas e listas. Ao


final, você deverá compreender os seguintes tópicos:
I Representação visual dessas estruturas
I Representação computacional dessas estruturas
I Algoritmos de Pesquisa, Remoção e Inserção
I Aplicações Reais
Estrutura de Dados I 6 / 48
Listas
Conceitos Gerais

I É uma estrutura de dados na qual os objetos estão


organizados em ordem linear.
I Listas Estáticas
I representadas por vetores e ı́ndices.
I Listas dinâmicas
I representadas por ponteiro (aponta para próximo elemento).
Por isso o nome “Lista encadeada”
I Toda lista encadeada tem pelo menos um ponteiro para o
inı́cio.
Estrutura de Dados I 7 / 48
Listas
Conceitos Gerais

I A lista possui apenas um dado primitivo é dita homogênea


I A lista possui dados compostos é dita heterogênea
Estrutura de Dados I 8 / 48
Listas
Conceitos Gerais

I Podemos implementar as listas de forma estática e dinâmica.


Existem 5 tipos:

Lista simplesmente encadeada e não ordenada


Lista simplesmente encadeada e ordenada
Lista duplamente encadeada e não ordenada
Lista duplamente encadeada e ordenada
Lista circular
Estrutura de Dados I 9 / 48
Listas
Conceitos Gerais

Estrutura Geral - Lista dinâmica

I ordem em lista encadeada é determinada por um ponteiro em


cada objeto.
I Suporta diversas operações
I Lista duplamente encadeada
Estrutura de Dados I 10 / 48
Listas
Conceitos Gerais

Estrutura Geral - Lista dinâmica

I Cada elemento da lista possui 3 atributos


I chave
I ponteiro para próximo elemento (sucessor)
I ponteiro para elemento anterior (predecessor)
Estrutura de Dados I 11 / 48
Listas
Conceitos Gerais

Estrutura Geral - Lista dinâmica

I Dado x um elemento da lista


I Se x.anterior = null então é o primeiro elemento da lista
I Se x.proximo = null então é o último elemento da lista
I L.head ou L.inicio que aponta para primeiro elemento da lista
I L.inicio = null a lista é vazia
Estrutura de Dados I 12 / 48
Listas
Conceitos Gerais

Estrutura Geral - Lista dinâmica

I Caso queira implementar uma lista simplesmente encadeada.


Que devemos alterar ?
I Caso queira implementar uma lista circular. Que devemos
alterar ?
I Caso queira implementar uma lista ordenada. Que devemos
alterar ?
Estrutura de Dados I 13 / 48
Listas
Operações

I Busca
I Inserção
I Remoção
Estrutura de Dados I 14 / 48
Listas
Operações

Operações: Busca

I O procedimento List Search(L, K ) realiza uma busca linear em


busca da chave k retornando um ponteiro para esse elemento
I Se nenhum objeto for encontrado, busca retorna Null
Estrutura de Dados I 15 / 48
Listas
Operações

Operações: Busca

I O procedimento List Search(L, K ) realiza uma busca linear em


busca da chave k retornando um ponteiro para esse elemento
I Se nenhum objeto for encontrado, busca retorna Null

I List Search(L, 4) Retorna qual elemento ?


I List Search(L, 88) Retorna qual elemento ?
I Se existir dois elementos repetidos ? Qual retornar?
Estrutura de Dados I 16 / 48
Listas
Operações

Algoritmo: Busca
Estrutura de Dados I 17 / 48
Listas
Operações

Análise

Análise Assintótica
I Considerando lista de tamanho n
Pior Caso O(n)
Estrutura de Dados I 18 / 48
Listas
Operações

Operações: Inserção

I O procedimento List Insert(L, x) insere um elemento x no


inı́cio da lista
Estrutura de Dados I 19 / 48
Listas
Operações

Algoritmo: Inserção
Estrutura de Dados I 20 / 48
Listas
Operações

Análise

Análise Assintótica
I O tempo de execução para List Insert(L, x) inserir um
elemento na lista de tamanho n.
Pior Caso O(1)
I Qual o tempo de execução para uma lista de tamanho n, caso
a inserção fosse no final da lista ?
Estrutura de Dados I 21 / 48
Listas
Operações

Operações: Remoção

I O procedimento List Delete(L) remove um elemento x no


inı́cio da lista
Estrutura de Dados I 22 / 48
Listas
Operações

Operações: Remoção
I O procedimento List Delete(L) remove um elemento x no
inı́cio da lista
Estrutura de Dados I 23 / 48
Listas
Operações

Análise

Análise Assintótica
I O tempo de execução para List Delete(L, x) remover um
elemento na lista de tamanho n.
Melhor Caso O(1)
Pior Caso O(n)
Estrutura de Dados I 24 / 48
Listas
Operações

Algoritmo: Remoção
Estrutura de Dados I 25 / 48
Estrutura de Dados: Pilha e Fila
Caracterı́sticas Gerais

I São consideradas listas especializadas por possuı́rem


caracterı́sticas próprias.
I Ambas possuem operações de próprias de inserir, excluir,
encontrar o maior elemento e contar os elementos.
I Dados organizados em ordem linear
I Quando representadas por vetores são consideradas estáticas.
Quando representadas por listas encadeadas com ponteiros,
são consideradas dinâmicas
I Quando formado por dado primitivo, dizemos que são
estruturas homogênea. Quando representadas por dados
compostos, dizemos que são heterogênea.
Estrutura de Dados I 26 / 48
Pilha (Stack)
Conceitos Gerais

I Uma pilha é uma coleção ordenada de zero ou mais itens, de


um mesmo tipo ou não, tal que suas operações principais são
realizadas na mesma extremidade, denominada topo.
I Implementa a polı́tica de último a entrar, primeiro a sair ou
LIFO (last-in, first-out)
Estrutura de Dados I 27 / 48
Pilha (Stack)
Conceitos Gerais

Operações

Empilhar insere um novo item no topo da estrutura


Desempilhar remove o item do topo da estrutura
Estrutura de Dados I 28 / 48
Pilha (Stack)
Conceitos Gerais

Algoritmo
Estrutura de Dados I 29 / 48
Pilha (Stack)
Conceitos Gerais

Comportamento
Estrutura de Dados I 30 / 48
Pilha (Stack)
Conceitos Gerais

Análise

Análise da Complexidade

Push/Pop Operação de tempo constante, então temos O(1)


Consulta No pior caso, temos O(n). No melhor caso temos
O(1)
Estrutura de Dados I 31 / 48
Pilha (Stack)
Conceitos Gerais

Aplicações

I Undo/Redo no editor de textos


I Controle de chamada de funções
Estrutura de Dados I 32 / 48
Fila (Queue)
Conceitos Gerais

I Uma fila é uma coleção ordenada de zero ou mais itens, de


um mesmo tipo ou não, tal que suas operações principais,
inserção e remoção, são realizadas nas extremidades,
denominadas INICIO (CABEÇA) e FIM (CAUDA) .
I Implementa a polı́tica de primeiro a entrar, primeiro a sair
ou FIFO (first-in, first-out).
Estrutura de Dados I 33 / 48
Fila (Queue)
Conceitos Gerais

Operações

Enqueue (Enfileirar) Insere um novo item no inı́cio da estrutura


Dequeue (Desinfileirar) Remove um item no fim da estrutura
Estrutura de Dados I 34 / 48
Fila (Queue)
Conceitos Gerais

Algoritmo
Enqueue(Q,x):
if Q.fim > Q.comprimento then
Estouro da Fila
Q.fim ← 1 “commentário: codigo alternativo”
else
Q[Q.fim] ← x
Q.fim ← Q.fim + 1
end if
Dequeue(Q):
if Q.comprimento == 0 then
Fila Vazia
Q.inicio ← 1 “commentário: codigo alternativo”
else
x ← [Q.inicio]
Q.inicio ← Q.inicio + 1
retorna x
end if
Estrutura de Dados I 35 / 48
Fila (Queue)
Conceitos Gerais

Comportamento

Inı́cio aponta para o primeiro da fila, ou seja, o primeiro


elemento a sair
Fim aponta para o fim da fila, ou seja, onde o próximo
elemento entrará
Estrutura de Dados I 36 / 48
Fila (Queue)
Conceitos Gerais

Comportamento
Estrutura de Dados I 37 / 48
Fila (Queue)
Conceitos Gerais

Comportamento

I Enqueue(A) → Enqueue(B) → Enqueue(C )


Estrutura de Dados I 38 / 48
Fila (Queue)
Conceitos Gerais

Comportamento

I Enqueue(Z ) → Enqueue(R) → Enqueue(S)


Estrutura de Dados I 39 / 48
Fila (Queue)
Conceitos Gerais

Comportamento

I Dequeue() → Dequeue()
Estrutura de Dados I 40 / 48
Fila (Queue)
Conceitos Gerais

Comportamento

I Temos algumas questões ?


I Como reutilizar os espaços do inı́cio da fila?
I Como inserir mais elementos?
Estrutura de Dados I 41 / 48
Fila (Queue)
Conceitos Gerais

Comportamento
I Fila em vetor circular
I se o último estiver ocupado podemos inserir no inı́cio do vetor,
se esta posição estiver livre
Estrutura de Dados I 42 / 48
Fila (Queue)
Conceitos Gerais

Comportamento

I Fila em vetor circular


I Qual a condição para fila vazia? para fila cheia ? Qual a
condição inicial (quando a fila é criada)?
Estrutura de Dados I 43 / 48
Fila (Queue)
Conceitos Gerais

Análise

Análise da Complexidade

Enqueue é uma operação básica, como a de atribuição, e


atualização de ı́ndices. Logo é uma operação de
tempo constante, O(1)
Dequeue O(1)
Consulta a Fila Como esta operação percorre toda a estrutura de
tamanho “n”, seu tempo de execução é O(n)
Estrutura de Dados I 44 / 48
Fila (Queue)
Conceitos Gerais

Aplicações

I Em computação gráfica, uma aplicação interessante é o


algoritmo para colorir regiões gráficas, que consiste em varrer
uma matriz de pontos, enfileirar os pontos conectados a esse e
trocar a cor, após remover cada um da fila.

I Cálculo de distância em Grafos.


Estrutura de Dados I 45 / 48
Trabalho 1 - Estruturas Genéricas.

1. Você pode implementar a operação de conjuntos dinâmicos


INSERT em uma lista simplesmente encadeada em tempo
O(1)? E a operação DELETE ?
2. Implemente uma pilha usando uma lista simplesmente
encadeada As operações PUSH e POP ainda devem demorar
o tempo O(1)
3. Implemente uma fila usando uma lista simplesmente
encadeada As operações ENQUEUE e DEQUEUE ainda
devem demorar o tempo O(1)
4. Dê um procedimento não recursivo de tempo Θ(n) que
inverta uma lista simplesmente encadeada de n elementos. O
procedimento só pode usar armazenamento constante além do
necessário para a própria lista
5. Mostre como implementar uma fila usando duas pilhas.
Analise o tempo de execução das operações nessa fila.
Estrutura de Dados I 46 / 48
Referências Bibliográficas

Referências I

Lee K.D., Hubbard S. (2015) Trees. In: Data Structures and


Algorithms with Python. Undergraduate Topics in Computer
Science. Springer, Cham. Retrieved from
https://doi.org/10.1007/978-3-319-13072-9_6
Hubbard, J. (2007). Schaum’s Outline sof Data Structures
with Java. Retrieved from http://www.amazon.com/
Schaums-Outline-Data-Structures-Java/dp/
0071476989
Cormen, T. H., Leiserson, C. E., & Stein, R. L. R. E. C.
(2012). Algoritmos: teoria e prática. Retrieved from
https://books.google.com.br/books?id=6iA4LgEACAAJ.
Estrutura de Dados I 47 / 48
Referências Bibliográficas

Referências II

Ascenio, Ana Fernanda Gomes. Estrutura de dados:


Algoritmos, análise da complexidade e implementações em
Java e C++. São Paulo: Pearson Prentice Hall, 2010.
Szwarcfiter, Jayme Luiz. Estruturas de dados e seus algoritmos
/ Jayme Luiz Szwarcfiter, Lilian Markenzon. 3.ed. [Reimpr.]. -
Rio de Janeiro : LTC, 2015.
Capı́tulo 20: Árvores — documentação Aprenda Computação
com Python 3.0 2009.1. Retrieved from
https://mange.ifrn.edu.br/python/aprenda-com-py3/
capitulo_20.html
Estrutura de Dados I 48 / 48

Estruturas Genéricas

Professor: Elton Sarmanho1


E-mail: eltonss@ufpa.br
‡°
1 Faculdade de Sistemas de Informação - UFPA/CUTINS

14 de abril de 2022

Você também pode gostar