Profa. Juliana Mafra ([email protected]) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de...
Transcript of Profa. Juliana Mafra ([email protected]) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de...
![Page 1: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/1.jpg)
Profa. Juliana Mafra
ESTRUTURA DE DADOS
03 de Outubro de 2009
Faculdade de Informática e Tecnologia de Pernambuco
![Page 2: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/2.jpg)
Tipos Especiais de Listas
ESTRUTURA DE DADOS Profa. Juliana Mafra2
Filas
![Page 3: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/3.jpg)
Filas
3
É uma lista linear em que todas as inserções são realizadas em um extremo da lista (fim), e todas as retiradas são realizados no outro extremo da lista (início).
São chamadas listas fifo (“first-in”, “first-out”).
Existe uma ordem linear para filas que é a “ordem de chegada”.
São utilizadas quando desejamos processar itens de acordo com a ordem “primeiro-que-chega, primeiro-atendido”.
ESTRUTURA DE DADOS Profa. Juliana Mafra
![Page 4: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/4.jpg)
TAD Filas: Operações
4
Criar uma fila vazia
Testar se um fila está vazia
Obter o elemento do início de uma fila
Inserir um elemento no fim de uma fila
Remover o elemento do início de uma fila, retornando o elemento removido.
ESTRUTURA DE DADOS Profa. Juliana Mafra
![Page 5: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/5.jpg)
Implementação de Filas: Arranjos
5
Os itens são armazenados em posições contíguas de memória.
A operação Inserir faz a parte de trás da fila expandir-se.
A operação Remover faz a parte da frente da fila contrair-se.
ESTRUTURA DE DADOS Profa. Juliana Mafra
#define MAX 10 typedef int telem; typedef struct{ telem v[MAX]; int inicio; int final; } tfila;
...a0 a1 a20 1 2 MAX -1
início final
![Page 6: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/6.jpg)
Operações sobre Filas: Arranjos
6
Criar uma fila vazia
Obter o elemento do início da fila
ESTRUTURA DE DADOS Profa. Juliana Mafra
void criar (tfila *f){
f->inicio = 0; f->final = -1; }
int primeiro (tfila f, telem *dado) {
if (vazia(f)) return 0; *dado = f.v[f.inicio]; return (1); }
![Page 7: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/7.jpg)
Operações sobre Filas: Arranjos
7
Inserir um elemento no fim de uma fila
ESTRUTURA DE DADOS Profa. Juliana Mafra
int inserir (tfila *f, telem valor) { if (f->final == MAX-1) return 0; (f->final)++; f->v[f->final] = valor; return(1); }
...a0 a1 a2
0 1 2 MAX -1
final
3
a3
inicio
![Page 8: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/8.jpg)
Operações sobre Filas: Arranjos
8
Remover o elemento do início de uma fila
ESTRUTURA DE DADOS Profa. Juliana Mafra
int remover (tfila *f, telem *dado){ if (vazia(*f)) return 0; *dado = f.v[F.inicio]; (f->inicio)++; return(1); }
...a1 a2
0 1 2 MAX -1
final
3
a3
inicio
a0
![Page 9: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/9.jpg)
Implementação de Filas: Arranjos
9
Problema: A fila tende a caminhar pela memória do computador, ocupando espaço na parte de trás e descartando espaço na parte da frente (overflow).
Solução: Imaginar o arranjo como um círculo (a primeira posição segue a última).
ESTRUTURA DE DADOS Profa. Juliana Mafra
![Page 10: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/10.jpg)
Implementação de Filas: Apontadores
10
A fila é implementada por meio de nós.
Cada nó contém um item da fila e um apontador para outro nó.
ESTRUTURA DE DADOS Profa. Juliana Mafra
5 8 1
Indicador do fim da fila (referência null)
dado|prox dado|prox
finalinicio
typedef int telem; typedef struct no { telem dado; struct no* prox; } tno; typedef struct fila { tno* inicio; tno* final; } tfila;
![Page 11: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/11.jpg)
Operações sobre Filas: Apontadores
11
Criar uma fila vazia
Obter o elemento do início de uma fila
ESTRUTURA DE DADOS Profa. Juliana Mafra
void criar (tfila *f) { f->inicio = f->final = NULL; }
int primeiro (tfila f, telem * valor) { if (vazia(f)) return 0; *valor = (f.inicio)->dado; return 1; }
![Page 12: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/12.jpg)
Operações sobre Filas: Apontadores
12
Inserir um elemento no fim de uma fila
ESTRUTURA DE DADOS Profa. Juliana Mafra
int inserir (tfila *f, telem valor) { tno *novo; novo = (tno*) malloc(sizeof(tno)); novo->dado = valor; novo->prox = NULL;
(f->final)->prox = novo; f->final = novo; return 1; }
5 8 1
finalinicio
9novo nó
![Page 13: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.](https://reader035.fdocumentos.tips/reader035/viewer/2022062700/552fc142497959413d8df6c9/html5/thumbnails/13.jpg)
Operações sobre Filas: Apontadores
13
Remover um elemento do início de uma fila
ESTRUTURA DE DADOS Profa. Juliana Mafra
int remover (tfila *f, telem *valor){ tno *atual; if (vazia(*f)) return 0; *valor = (f.inicio)->dado;
atual = f->inicio; f->inicio = (f->inicio)->prox; free(atual); return 1; }
1 29
finalinicio
atual