7/23/2019 A05 Estruturas de Dados
1/86
7/23/2019 A05 Estruturas de Dados
2/86
Estruturas de dados: Pilhas,Filas, Listas, Dicionrios, Filas de
prioridade.
7/23/2019 A05 Estruturas de Dados
3/86
Agenda
Dicas;
Pilhas;
Filas;
Listas;
Dicionrios;
Filas de prioridade.
7/23/2019 A05 Estruturas de Dados
4/86
Dicas
Leia o problema atentamente
No assuma nada: leia a especificao
Eficincia nem sempre algo to importantea no ser que voc esteja lidando comalgoritmos exponenciais para problemaspolinomiais
4
7/23/2019 A05 Estruturas de Dados
5/86
Dicas
Qual a melhor forma de representar umamo de cartas? Voc vai embaralhar as cartas?
Comparar os seus valores?
Procurar por padres na sua mo?
5
7/23/2019 A05 Estruturas de Dados
6/86
Dicas
Qual a melhor forma de representar cadacarta? Operaes com cartas?
O naipe importa?
6
7/23/2019 A05 Estruturas de Dados
7/86
Dicas
Debugar pode ser muito frustante com o robde avaliao (robot judge) Muito importante testar antes da submisso.
Teste a entrada
Teste entradas incorretas
Teste situaes limites (entrada vazia, umnico item, dois items e valores igual a zero)
7
7/23/2019 A05 Estruturas de Dados
8/86
Dicas
Teste instncias em que voc sabe aresposta correta
Teste instncias grandes (muito grandes)
Conhea bem seu debugador
Exiba sua estruturas de dados Faa testes invariantes
Verifique seu cdigo
Faa seus prints significarem alguma coisa8
7/23/2019 A05 Estruturas de Dados
9/86
Dicas
Crie seus arranjos um pouco maiores do queo necessrio
Tenha certeza de que seus bugs so bugsde verdade
9
7/23/2019 A05 Estruturas de Dados
10/86
Pilhas
10
7/23/2019 A05 Estruturas de Dados
11/86
Pilhas
Tipo Abstrato de dados com a seguintecaracterstica:
O ltimo elemento a ser inserido o primeiroa ser retirado/ removido
(LIFOLastin FirstOut)
Analogia: pilha de pratos, livros, etc.
Usos: Chamada de subprogramas, avaliaode expresses aritmticas, etc.
11
7/23/2019 A05 Estruturas de Dados
12/86
Pilhas
Operaes primrias:
PilhaPush(s, x)Insere item xno topoda pilha s.PilhaPop(s)Retorna (e remove) o topoda pilha s.
PilhaInicializa(s)Cria uma pilha vazia em s.PilhaCheia(s), PilhaVazia(s)Testa se a pilha sest cheia ou vazia, respectivamente.
Existem opes de estruturas de dados que podem serusadas para representar pilhas.
As duas representaes mais utilizadas so asimplementaes por meio de arranjos e de ponteiros
12
7/23/2019 A05 Estruturas de Dados
13/86
Fila (Queue)
13
7/23/2019 A05 Estruturas de Dados
14/86
Fila
Tipo Abstrato de dados com a seguintecaracterstica:
O primeiro elemento a ser inserido oprimeiro a ser retirado/ removido
(FIFOFirstin FirstOut)
Analogia: fila em de pessoas, fila de espera,etc.
Usos: Sistemas operacionais, filas deimpresso, processamento, etc.
14
7/23/2019 A05 Estruturas de Dados
15/86
Fila
Operaes primrias:
FilaPush(q, x)Insere o item x no final da fila q.
FilaPop(q)Retorna (e remove) o item na frente da
fila q.FilaInicializa(q)Cria uma fila vazia em q.
FilaCheia(q), FilaVazia(q)Testa se a fila q estcheia ou vazia, respectivamente.
Existem opes de estruturas de dados que podem serusadas para representar listas.
As duas representaes mais utilizadas so asimplementaes por meio de arranjos e de ponteiros
15
7/23/2019 A05 Estruturas de Dados
16/86
Dicas
Problemas de utilizar arranjos: Possibilidade de overflow.
Em caso de fila: dificuldade de manuteno.
Assim, se utilizar array: Use dois ndices para implementar filas:
inicio(head) e fim (tail), de forma a evitar
movimentaes em toda a fila. Use um contador para implementar as funes
FilaCheia e FilaVazia.
16
7/23/2019 A05 Estruturas de Dados
17/86
Dicas
Problemas de utilizar arranjos: Possibilidade de overflow.
Em caso de fila: dificuldade de manuteno.
Assim, se utilizar array: Use dois ndices para implementar filas:
inicio(head) e fim (tail), de forma a evitar
movimentaes em toda a fila. Use um contador para implementar as funes
FilaCheia e FilaVazia.
17
7/23/2019 A05 Estruturas de Dados
18/86
Dicionrios
18
7/23/2019 A05 Estruturas de Dados
19/86
Dicionrios
Permite retornar um item a partir de sua chave, ao invs deutilizar a posio do elemento
Operaes primrias: DicInsere(d, x)Insere item x no dicionrio d.
DicRemove(d, x)Remove item x(ou o item para o qual x aponta) dodicionrio d.
DicBusca(d, k)Retorna o item com chave k do dictionrio d (se o itemexistir).
DicInicializa(d)Inicializa o dicionrio d.
DicCheio(d), DicVazio(d)Testa se o dicionrio dest cheio ou vazio,respectivamente.
19
7/23/2019 A05 Estruturas de Dados
20/86
Dicionrios
Arrays ordenados e no-ordenados
Listas ordenadas e no-ordenadas
rvores AVL Tabelas Hash
Qual deles utilizar? O que analisar?Performance?
Dados sero modificados?20
7/23/2019 A05 Estruturas de Dados
21/86
Dicionrios
Dicionrios estticos Dados no mudam
Utilizar arrays(ordenados ou no-ordenados)
Fazer busca binria apenas se n >> 1000
Dicionrios semi-estticos Apenas inseres e buscas (pouqussimas remoes)
Tabelas Hash(com endereamento aberto)
Dicionrios totalmente dinmicos
Dados so modificados o tempo todo Tabelas Hash(caprichar na funo de Hash)
21
7/23/2019 A05 Estruturas de Dados
22/86
Filas de Prioridade
22
7/23/2019 A05 Estruturas de Dados
23/86
Filas de Prioridade
Estruturas de dados que suportam as operaes:
FPInsere(q, x)Insere item x na fila de prioridade q.
FPRemove(q)Remove e retorna o maior item da fila deprioridade q.
Maximo(q)Retorna o maior item da fila de prioridade q (seo item existir).
FPInicializa(q)Inicializa a fila de prioridade d.
FPCheio(q), FPVazio(q)Testa se a fila de prioridade q est
cheia ou vazia, respectivamente.
23
7/23/2019 A05 Estruturas de Dados
24/86
Filas de Prioridade
Como implementar?
Quando usar?
Um heap binrio uma forma eficiente.
Se houver poucas inseres, que tal umarray ordenado?
Utilizar para manter cronogramas ecalendrios, determinando prximas tarefas.
24
7/23/2019 A05 Estruturas de Dados
25/86
Conjuntos
25
7/23/2019 A05 Estruturas de Dados
26/86
Conjuntos
Coleo de elementos.
Deve implementar as seguintes operaes bsicas:
Membro(S, x)Retorna true se o item x for membro do
conjunto S.Uniao(A, B)Retorna um novo conjunto AB.
Intersecao(A, B)Retorna um novo conjunto AB.
SetInsere(S, x), SetRemove(S, x)Insere e remove,
respectivamente, o item x do conjunto S.SetInicializa(S)Inicializa um conjunto S vazio.
26
7/23/2019 A05 Estruturas de Dados
27/86
Conjuntos
Dicionrio uma boa opo para conjuntosmaiores.
Dicionrios ordenados facilitam a operao de
interseo. Para conjuntos menores, que tal um array de bits,
com uma posio para cada um dos possveiselementos?
Uso de array para representar um conjunto U Eficiente at para valores maiores de |U|
Exemplo: array de 1.000 inteiros suficiente pararepresentar um conjunto de at 32.000 elementos!!!
27
7/23/2019 A05 Estruturas de Dados
28/86
Que tal implementar um heap binrio ou umatabela hash durante uma competio?
Desvantagem de utilizar a linguagem C
No existe uma biblioteca de estruturasde dados de uso geral
Impossvel criar uma pilha genrica.
Seriam necessrias mltiplas definies: push_char()
push_int()
push_estudante()
push_outro_tipo_dados()28
7/23/2019 A05 Estruturas de Dados
29/86
29
7/23/2019 A05 Estruturas de Dados
30/86
Programao Genrica
30
7/23/2019 A05 Estruturas de Dados
31/86
Programao Genrica
Por exemplo, podemos criar uma funo genrica que ordeneum vetor
A linguagem se encarrega de criar especializaes que trataro vetoresdo tipo int, float, string e etc.
Podemos tambm criar uma classe genrica para a estrutura dedados Pilha
A linguagem se encarrega de criar as especializaes pilha de int, float,string, etc.
O genrico um estncil (define o formato), a Especializao contedo.
31
7/23/2019 A05 Estruturas de Dados
32/86
Funes Genricas ou Templates
32
7/23/2019 A05 Estruturas de Dados
33/86
Funes Genricas ou Templates
33
7/23/2019 A05 Estruturas de Dados
34/86
Funes Genricas ou Templates
34
7/23/2019 A05 Estruturas de Dados
35/86
Funes Genricas ou Templates
35
7/23/2019 A05 Estruturas de Dados
36/86
Funes Genricas ou Templates
36
7/23/2019 A05 Estruturas de Dados
37/86
Funes Genricas ou Templates
37
7/23/2019 A05 Estruturas de Dados
38/86
Funes Genricas ou Templates
38
7/23/2019 A05 Estruturas de Dados
39/86
Conhecer a STL
(Standard Templates Library)
39
7/23/2019 A05 Estruturas de Dados
40/86
STL
A Standard Template Library (STL) foiadicionada biblioteca padro C++;
A STL define componentes genricosreutilizveis que implementam vriasestruturas de dados e algoritmos queprocessam estas estruturas;
Basicamente, a STL composta decontineres, iteradorese algoritmos.
40
7/23/2019 A05 Estruturas de Dados
41/86
STL
Contineresso templates de estruturas de dados Possuem mtodos associados a eles.
Iteradoresso ponteiros, utilizados para percorrer e
manipular os elementos de um continer; Algoritmosso as funes que realizam operaes
tais como buscar, ordenar e comparar elementos oucontineres inteiros Existem aproximadamente 70 algoritmos implementados
na STL;
A maioria utiliza iteradores para acessar os elementos decontineres.
41
7/23/2019 A05 Estruturas de Dados
42/86
Contineres
42
7/23/2019 A05 Estruturas de Dados
43/86
Contineres
43
7/23/2019 A05 Estruturas de Dados
44/86
Contineres
44
7/23/2019 A05 Estruturas de Dados
45/86
Contineres
45
7/23/2019 A05 Estruturas de Dados
46/86
Contineres
46
7/23/2019 A05 Estruturas de Dados
47/86
Contineres, Funes Comuns
47
7/23/2019 A05 Estruturas de Dados
48/86
Contineres, Funes Comuns
48
7/23/2019 A05 Estruturas de Dados
49/86
Contineres, Funes Comuns
49
7/23/2019 A05 Estruturas de Dados
50/86
Funes de Contineres
50
7/23/2019 A05 Estruturas de Dados
51/86
Bibliotecas de Contineres
51
7/23/2019 A05 Estruturas de Dados
52/86
Contineres
necessrio garantir que os elementosarmazenados em um continer suportam umconjunto mnimo de operaes
Quando um elemento inserido em um continer,ele copiado: o operador de atribuio deve sersobrecarregado se necessrio;
Dica: pode ser necessrio que os operadores ==e< devem ser sobrecarregados.
52
7/23/2019 A05 Estruturas de Dados
53/86
Iteradores
53
7/23/2019 A05 Estruturas de Dados
54/86
Iteradores
54
7/23/2019 A05 Estruturas de Dados
55/86
Categorias de Iteradores
55
7/23/2019 A05 Estruturas de Dados
56/86
Categorias de Iteradores
56
7/23/2019 A05 Estruturas de Dados
57/86
Tipos Predefinidos de Iteradores
57
7/23/2019 A05 Estruturas de Dados
58/86
Operaes em Iteradores
58
7/23/2019 A05 Estruturas de Dados
59/86
Operaes em Iteradores
Bidirecionais
59
7/23/2019 A05 Estruturas de Dados
60/86
Operaes em Iteradores
60
7/23/2019 A05 Estruturas de Dados
61/86
Algoritmos
61
7/23/2019 A05 Estruturas de Dados
62/86
Algoritmos, Ordenao
62
7/23/2019 A05 Estruturas de Dados
63/86
Algoritmos, Busca Binria
63
7/23/2019 A05 Estruturas de Dados
64/86
Algoritmos, Intercalao
64
7/23/2019 A05 Estruturas de Dados
65/86
Algoritmos, Heap
65
7/23/2019 A05 Estruturas de Dados
66/86
Algoritmos, Min e Max
66
7/23/2019 A05 Estruturas de Dados
67/86
Exemplos
67
7/23/2019 A05 Estruturas de Dados
68/86
Exemplos, Vector
68
7/23/2019 A05 Estruturas de Dados
69/86
Exemplos, Vector
69
7/23/2019 A05 Estruturas de Dados
70/86
Exemplos, Vector
A classe vector genrica, logo, deve serdefinido o tipo na declarao de um objeto;
Este continer dinmico A cada insero o continer se redimensiona
automaticamente.
O mtodo push_back adiciona um elemento
ao final do vector.
70
7/23/2019 A05 Estruturas de Dados
71/86
Exemplos, Vector
Outros possveis mtodos incluem: front: determina o primeiro elemento;
back: determina o ltimo elemento;
at: determina o elemento em uma determinadaposio, mas antes verifica se uma posiovlida.
insert: insere um elemento em uma posioespecificada por um iterador.
71
7/23/2019 A05 Estruturas de Dados
72/86
Exemplos, Deque
72
7/23/2019 A05 Estruturas de Dados
73/86
Exemplos, Deque
73
7/23/2019 A05 Estruturas de Dados
74/86
Exemplos, Deque
O mtodo push_front est disponvel apenaspara liste deque;
O operador [] permite acesso direto aos
elementos do deque Tambm pode ser utilizado em um vector.
Em geral, um deque possui um desempenho
levemente inferior em relao a um vector No entanto, mais eficiente para fazer inseres
e remoes no incio.74
7/23/2019 A05 Estruturas de Dados
75/86
Exemplos, Set
75
7/23/2019 A05 Estruturas de Dados
76/86
Exemplos, Map
76
7/23/2019 A05 Estruturas de Dados
77/86
Exemplos, Map
77
7/23/2019 A05 Estruturas de Dados
78/86
Exemplos, Map
O continer map possui os mesmos mtodosfind(), count(), swap() e clear().
78
7/23/2019 A05 Estruturas de Dados
79/86
Exemplos, Multimap
79
7/23/2019 A05 Estruturas de Dados
80/86
Exemplos, Multimap
O continer multimap possui os mesmosmtodos find(), count(), swap() e clear().
80
7/23/2019 A05 Estruturas de Dados
81/86
Exemplos, Contineres Adaptativos
Os contineres adaptativos (pilha, fila e filade prioridades) contm praticamente osmesmos mtodos: empty: testa se o continer est vazio; size: retonar a quantidade de elementos do continer;
top (exceto fila): acessa o elemento do topo;
push: insere um elemento;
pop: remove um elemento;
front (somente fila): acessa o prximo elemento;
back (somente fila): acessa o ltimo elemento.81
7/23/2019 A05 Estruturas de Dados
82/86
Exemplos, Stack
82
7/23/2019 A05 Estruturas de Dados
83/86
Exemplos, Stack
83
7/23/2019 A05 Estruturas de Dados
84/86
Exemplos, Queue
84
7/23/2019 A05 Estruturas de Dados
85/86
Exemplos, Priority_Queue
85
7/23/2019 A05 Estruturas de Dados
86/86
Estruturas de dados: Pilhas,Filas, Listas, Dicionrios, Filas de
prioridade.
Top Related