AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos,...
Transcript of AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos,...
![Page 1: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/1.jpg)
AED – Algoritmos e Estruturas de Dados
Alexandre Gonçalves Silva
Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva
Fonte: Projeto de Ensino de Gilmário Santos e Adriano Fiorese
Notas de aula – 2s05
![Page 2: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/2.jpg)
2
Tópicos
• Tipo de Dado Abstrato
• TDA Pilha
• TDA Fila
• TDA Lista
• Árvore Binária de Busca
• Algoritmos de Ordenação
![Page 3: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/3.jpg)
3
Filas
• Estrutura FIFO – First In, First Out– Primeiro elemento inserido é o primeiro a ser removido
• Aplicadas em situações onde há necessidade de registrar uma série de elementos em seqüência, acessando-os na ordem de sua ocorrência.
• Ilustração de uma fila: pessoas, uma após a outra, esperando atendimento em um caixa de supermercado.
![Page 4: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/4.jpg)
4
Introdução
• Filas permitem manipulações em duas extremidades: no início (ou frente) e no fim (ou cauda).
• Inserções são feitas na cauda.
• Remoções são feitas na frente.
• Aplicações: implementação de filas de impressão/processos, simulações, percurso em largura em árvores, algoritmos de inundação.
![Page 5: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/5.jpg)
5
Operações de Fila
• Na Fila, pode-se:– Criar
• Instanciar objeto
– Inserir • Inserir na cauda
– Remover • Remover da frente
– Buscar • Consultar a frente
– Destruir• Desalocar objeto
• Exemplo de “relógio global”:–T0: fila vazia
–T1: insere A
–T2: insere B
–T3: insere C
![Page 6: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/6.jpg)
6
Implementação de Fila
• Estática
– Alocação feita apenas na criação para a quantidade máxima de elementos, desalocação feita apenas na destruição do objeto
– Limitação no número máximo de elementos
– Uso de vetor, estrutura de acesso eficiente
– Desperdício de memória
• Dinâmica
– Alocação a cada inserção (insere), desalocação a cada remoção (remove) de um elemento
– Sem limitação para o número de elementos (a não ser de memória)
– Uso de lista de nós encadeados, eficiente pois há referências da frente e cauda
– Não há desperdício de memória
![Page 7: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/7.jpg)
7
Fila Estática (FE)
![Page 8: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/8.jpg)
8
Possibilidades de FE
• Fila Estática Simples (FES) – Sem reaproveitamento do vetor. Pode ocorrer uma situação de “falso cheio” (último elemento inserido está na última posição do vetor, porém há posições iniciais disponíveis de remoções já realizadas).
• Fila Estática com Movimentação de Dados– Na Remoção (FEMR) – Reutilização da primeira posição do vetor após
uma remoção através da cópia dos elementos para uma posição à frente.
– Na Inserção (FEMI) – Reutilização do vetor (se for o caso) após uma inserção em condição de “falso cheio”, através do deslocamento dos elementos para as primeiras posições.
• Fila Estática Circular (FEC) – Inserção do elemento, em condição de “falso cheio”, na primeira posição.
![Page 9: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/9.jpg)
9
Fila Estática Simples (FES)
![Page 10: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/10.jpg)
10
Criando a FES
![Page 11: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/11.jpg)
11
Inserindo na FES
![Page 12: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/12.jpg)
12
Buscando e Removendo na FES
![Page 13: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/13.jpg)
13
Falso Cheio na FES
Cheio Falso Cheio
![Page 14: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/14.jpg)
14
Fila Estática com Movimentação de Dados na Remoção (FEMR)
![Page 15: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/15.jpg)
15
Removendo na FEMR
![Page 16: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/16.jpg)
16
Fila Estática com Movimentação de Dados na Inserção (FEMI)
![Page 17: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/17.jpg)
17
Inserindo na FEMI
![Page 18: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/18.jpg)
18
Fila Estática Circular (FEC)
![Page 19: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/19.jpg)
19
Estrutura da FEC
Descritortypedef struct { int tamVet; int tamInfo; int quant; int frente; int cauda; void **vet;} FEC;
Inserção...
if (p->quant < p->tamVet) if (p->cauda == tamVet-1) p->cauda = 0;
... ...
if (p->frente == p->tamVet-1) p->frente = 0;
...
Remoção
![Page 20: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/20.jpg)
20
Mecanismo de Inserção e Remoção na FEC
![Page 21: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/21.jpg)
21
Fila Dinâmica (FD)
![Page 22: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/22.jpg)
22
Simplesmente (FDSE) e Duplamente Encadeada (FDDE)
![Page 23: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/23.jpg)
23
Fila de Prioridade (FP)
![Page 24: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/24.jpg)
24
Comparando na FP
int compara(void *p1, void *p2) { pElemento e1 = (pElemento) p1; pElemento e2 = (pElemento) p2;
if (e1->prior > e2->prior) return MAIOR; else if (e1->prior < e2->prior) return MENOR; else return IGUAL;}
• O TDA não conhece o tipo de seus elementos.
• Cada aplicação apresenta critérios de prioridade específicos (exemplo: idade, gestante, data de expedição, etc).
• Exemplo de lógica de comparação de prioridades da aplicação a ser passada, como parâmetro (ponteiro para função), ao TDA:
![Page 25: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/25.jpg)
25
Inserindo na FP
• Quanto maior a prioridade do elemento, mais próximo do início da fila ele é inserido.
• Pode-se optar em modificar apenas a remoção ou apenas a inserção de modo que os elementos sejam retirados na ordem decrescente de sua prioridade.
• A inserção modificada consiste na comparação, de nó em nó, até que se encontre um elemento de prioridade menor que a do elemento a ser inserido.
![Page 26: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/26.jpg)
26
Código da inserção na FP (simplesmente encadeada)
int insereFP(pFP p, void *novo, int (*Compara)(void *p1, void *p2)) {
pNoFP aux, ant, pos;
aux = (pNoFP) malloc(sizeof(NoFP));
if (aux == NULL)
return FRACASSO;
aux->dados = malloc(p->tamInfo);
if (aux->dados == NULL) {
free(aux); return FRACASSO;
}
memcpy(aux->dados, novo, p->tamInfo);
aux->prox = NULL;
if (testaVaziaFP(p) == SIM) {
p->frente = aux; p->cauda = aux; return SUCESSO;
}
ant = NULL;
pos = p->frente;
while ((pos != NULL) && (Compara(novo, pos->dados) != MAIOR)) {
ant = pos; pos = pos->prox;
}
if (ant == NULL) {
aux->prox = p->frente; p->frente = aux; return SUCESSO;
}
aux->prox = pos; ant->prox = aux; return SUCESSO;
}
![Page 27: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/27.jpg)
27
Multi-Fila Estática Circular (MFEC)
![Page 28: AED – Algoritmos e Estruturas de Dados Alexandre Gonçalves Silva Ilustrações: Gilmário Santos, André Körbes e Alexandre Silva Fonte: Projeto de Ensino.](https://reader036.fdocumentos.tips/reader036/viewer/2022062318/552fc10c497959413d8c39a4/html5/thumbnails/28.jpg)
28
Modelo da MFEC