Estrutura de Dados
Filas
Introdução
• Fila
– Em Estrutura de Dados, uma Fila é um vetor
(array) que possui uma regra de inserção e
remoção de elementos.
Representação Gráfica
1 2 3 4 5
0 6 7
int v[8];
v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]
Vetor (Array)
• Em um vetor não existe regras de inserção ou remoção de elementos.
• Você pode inserir ou remover de qualquer posição.
• Ex.
1 2 3 4 5
0 6 7
Inserir
int v[8];
V[1] = 10;
V[5] = 20;
Remover
Alterando
V[1] = 0;
Observação
• Não Existe uma regra de inserção ou remoção fixa.
3 2
1
Exemplo: Fila de Impressão
Os três usuários enviam o arquivo Para ser impresso ao mesmo tempo.
Fila de Impressão
3 2
1
1 2 3
Fila de Impressão
3 2
1
1 2 3
1
Fila de Impressão
3 2
1
2 3
2
Fila de Impressão
Fila
• Regra Fila
– PEPS: O primeiro elemento a entrar na fila é o
primeiro a sair.
Fila
• Toda a fila é construída de forma lógica e de acordo com a sua regra PEPS.
• Essa construção possui como base todo o aprendizado das estruturas de programação da Linguagem C.
• Como por exemplo, vetores, variáveis,
estruturas condicionais e repetição.
Operações sobre Filas
A
B C
#define t 3 char fila[t];
int inicio = 0, fim = 0;
int tam = 0;
Início
0 1 2
Operações sobre Filas
A
B C
• Enfileirar
0 1 2
#define t 3 char fila[t];
int inicio = 0, fim = 0;
int tam = 0;
Operações sobre Filas
A
B C
• Enfileirar
0 1 2
#define t 3 char fila[t];
int inicio = 0, fim = 0;
int tam = 0;
Operações sobre Filas
A
B C
• Enfileirar
0 1 2
#define t 3 char fila[t];
int inicio = 0, fim = 0;
int tam = 0;
Operações sobre Filas
A B
C
• Enfileirar
0 1 2
#define t 3 char fila[t];
int inicio = 0, fim = 0;
int tam = 0;
Operações sobre Filas
A B C
#define t 3 char fila[t];
int inicio, fim;
• Enfileirar
0 1 2
Operações sobre Filas
A B C
• Desenfileirar
0 1 2
#define t 3 char fila[t];
int inicio = 0, fim = 0;
int tam = 0;
Operações sobre Filas
A
B C
• Desenfileirar
0 1 2
#define t 3 char fila[t];
int inicio = 0, fim = 0;
int tam = 0;
Operações sobre Filas
A B
C
• Desenfileirar
0 1 2
#define t 3 char fila[t];
int inicio = 0, fim = 0;
int tam = 0;
Operações sobre Filas
A
B C
• Desenfileirar
0 1 2
#define t 3 char fila[t];
int inicio = 0, fim = 0;
int tam = 0;
Operações sobre Filas
A B C
#define t 3 char fila[t];
int inicio, fim;
int total;
• Forma de Controle
0 1 2
• A forma de controle da fila é feita através do seu inicio, fim e seu total.
inicio fim total
Operações sobre Filas
A B C
#define t 3 char fila[t];
int inicio, fim;
int total;
• Inserir
0 1 2
• A forma de controle da fila é feita através do seu inicio, fim e seu total.
inicio fim total
Operações sobre Filas
A B
C
#define t 3 char fila[t];
int inicio, fim;
int total;
• Inserir
0 1 2
• A forma de controle da fila é feita através do seu inicio, fim e seu total.
inicio
fim Total = 1
Operações sobre Filas
A B
C
#define t 3 char fila[t];
int inicio, fim;
int total;
• Inserir
0 1 2
• A forma de controle da fila é feita através do seu inicio, fim e seu total.
inicio fim
Total = 2
Operações sobre Filas
A B C
#define t 3 char fila[t];
int inicio, fim;
int total;
• Inserir
0 1 2
• A forma de controle da fila é feita através do seu inicio, fim e seu total.
inicio fim
Total = 3
Operações sobre Filas
A B C
#define t 3 char fila[t];
int inicio, fim;
int total;
• Remover
0 1 2
• A forma de controle da fila é feita através do seu inicio, fim e seu total.
inicio fim
Total = 3
Operações sobre Filas
A
B C
#define t 3 char fila[t];
int inicio, fim;
int total;
• Remover
0 1 2
• A forma de controle da fila é feita através do seu inicio, fim e seu total.
inicio fim
Total = 2
Operações sobre Filas
A B
C
#define t 3 char fila[t];
int inicio, fim;
int total;
• Remover
0 1 2
• A forma de controle da fila é feita através do seu inicio, fim e seu total.
inicio fim
Total = 1
Operações sobre Filas
• Algoritmo Enfileirar
Algoritmo
- Verificar se a fila está cheia - Se a fila não estiver cheia
-inserir o elemento no final da fila -senão
-Avisar ao usuário que a fila está cheia
Operações sobre Filas
• Algoritmo Enfileirar
PseudoCódigo
void enfileirar(int elemento) {
if(total >= t) {
printf(“A fila esta cheia\n”);
} else {
fila[fim] = elemento;
fim = fim + 1;
total = total + 1;
if(fim >= t) {
fim = 0;
} }
}
Operações sobre Filas
• Algoritmo Desenfileirar
Algoritmo
- Verificar se a fila está vazia - Se a fila não estiver vazia
-remover o elemento no inicio da fila -senão
-Avisar ao usuário que a fila está vazia
Operações sobre Filas
• Algoritmo Desenfileirar
PseudoCódigo
void desenfileirar() {
char desenfileirado;
if(total <= 0) {
printf(“A fila esta vazia\n”);
} else {
desenfileirado = fila[inicio];
inicio = inicio + 1;
total = total - 1;
printf(“O elemento %c foi desenfileirado!\n”, desenfileirado);
if(inicio >= t) {
inicio = 0;
} }
}
Operações sobre Filas
• Algoritmo Listar Fila
Algoritmo
- Verificar se a fila está vazia - Se a fila não estiver vazia
-Listar todos os elementos da fila -senão
- exibir ao usuário que a fila está vazia
Operações sobre Filas
• Algoritmo Listar Fila
PseudoCódigo
void listarFila() {
int pos,i;
if(total <= 0) {
printf(“A fila esta vazia\n”);
} else {
pos = inicio;
for(i = 0; i < total; i++) {
printf(“Elemento %d posicao %d\n”, fila[pos],pos);
pos = pos + 1;
if(pos >= t) {
pos = 0;
} } }
}
Operações sobre Filas
• Algoritmo Exibir elemento do inicio
Algoritmo
- Verificar se a fila está vazia - Se a fila não estiver vazia
-exibir o elemento do inicio -senão
- exibir ao usuário que a fila está vazia
Operações sobre Filas
• Algoritmo Exibir elemento do topo
PseudoCódigo
void elementoInicio() {
if(total <= 0) {
printf(“A fila esta vazia\n”);
} else {
printf(“O elemento inicio eh %d!\n”, fila[inicio]);
} }
Trabalho
• Faça um programa que apresente o menu de opções abaixo:
1. Cadastrar número;
2. Mostrar números pares entre o primeiro e ultimo numero cadastrado.
3. Excluir o número 4. Sair
– Observações
a) O programa deve ser implementado usando uma estrutura do tipo fila
b) A opção 1 do menu cadastra um número de cada vez c) Mostrar mensagem para opção invalida do menu
d) Quando a opção do menu não puder ser realizada, mostrar mensagem.
e) Obs: A fila possui o tamanho 10