Autores
Diego Doná
Jordan Toledo
Wellinton Rodrigo
Piracicaba
2009
Faculdade Salesiana Dom Bosco de Piracicaba
Autores
Diego Doná
Jordan Toledo
Wellinton Rodrigo
Trabalho de Aproveitamento da
disciplina de Algoritmos e Programação
II apresentado como exigência parcial
para obtenção do grau de Bacharel em
Sistemas de Informação no Centro
Universitário Salesiano, sob a
orientação dos Professores Silvia
Magossi e José Carlos Magossi.
Piracicaba
2009
Autor: ____________________________________________________
Autor: ____________________________________________________
Autor: ____________________________________________________
Título: ____________________________________________________
(Assinatura) ________________________________________________
(Titulação/nome/instituição)
(Assinatura) ________________________________________________
(Titulação/nome/instituição)
Piracicaba
2009
RESUMO
Tratamos neste trabalho sobre a fila, um tipo de Estrutura de Dados muito utilizado
na computação. Fazemos a associação com elementos da vida real, para facilitar
o entendimento, demonstramos a lógica utilizada e apresentamos o código final
em linguagem C.
6. Conclusão.........................................................................................................17
Introdução
Quando pensamos numa fila da vida real, seja uma fila de atendimento no banco,
na padaria ou no supermercado, imaginamos elementos – normalmente pessoas –
sendo atendidos em ordem de chegada. Pessoas chegam ao final da fila e
pessoas são atendidas, saindo da fila.
O importante é notar a ordem que existe nela. Ninguém deveria “furar” a fila. Se
você é o terceiro da fila, não será atendido em segundo lugar, nem em quarto.
Será atendido em terceiro lugar.
Existem exceções, podemos deixar alguém com mais prioridade passar a nossa
frente, trocar de lugar e outras modificações na ordem original. Entretanto, existe
uma ordem a ser respeita.
Uma fila nada mais é que uma sequência de elementos ordenadas pela ordem de
chegada, tanto na vida real como na programação.
7
Uma fila de banco pode ser visualizada quarteirões antes do ponto inicial, algumas
vezes. No computador as filas também podem possuir muitos elementos, mas
precisamos escrever uma rotina que a mostre ao usuário, caso seja interessante.
Tipos de Fila
A fila circular é mais complexa, mais difícil de modificar, mas paga com uma
velocidade maior em seu processamento.
8
Fila linear
Simplesmente usamos um vetor e uma variável auxiliar para marcar o fim da fila.
Adotamos um lado do vetor para ser a entrada e o outro automaticamente será
onde os elementos entram – o fim da fila.
Com um vetor de 4 posições ocupadas por inteiros, não parece grande problema.
Mas com 100 elementos ocupados por outros vetores pode ser uma dificuldade.
Temos que passar por todas as posições para ajustar corretamente.
9
Fila Circular
Também utilizamos um vetor, mas dessa vez, com duas variáveis auxiliares: Início
e Fim. Conforme inserimos, incrementamos Fim. Conforme retiramos,
incrementamos o Começo. Se chegarmos ao fim do vetor, voltamos ao começo. É
um ciclo de retiradas e inserções.
Nosso algoritmo precisa prever mais detalhes, tomando cuidado para não estourar
o limite e nem deixar as variáveis com os valores errados. Por outro lado, nos
livramos da necessidade de iterar por todas as posições para organizar a fila.
Por fim, retiramos mais um elemento. Note que se fossemos inserir mais algo, ele
ficaria na casa ao lado direito do número 5.
10
Cabeçalho do arquivo
#include <stdio.h>
#include <string.h>
#define NUM 4
Temos o include padrão (stdio.h) e o string.h, para poder usar a função toupper.
Além disso, declaramos uma constante com o tamanho da fila e o cabeçalho das
funções.
As funções inserir, eliminar e bubbleSort usam algo um pouco diferente: int *c e int
*f. Com isso, requisitamos um endereço de memória de um inteiro, não um valor
inteiro. Fazemos isso, pois, podemos em cada função mexer com o começou e/ou
fim da fila.
Isso se chama passagem por referência. Com essa técnica, dispensamos o return,
pois estamos lidando diretamente com o valor contido no endereço e o seu valor
altera a variável que foi passada na função main.
11
Função Main
preencher(fC,NUM);
printf("Programa de simulacao de fila.\n");
printf("Para inserir um numero, digite 'i'\n");
printf("Para eliminar um numero, digite 'e'\n");
printf("Para buscar um numero, digite 'b' e informe o numero\n");
printf("Para organizar a fila, digite 'o'\n");
printf("Para sair, digite 's'\n\n");
do
{
//printf("Choose your destiny: ");
printf("Qual sua escolha? ");
fflush(stdin);
scanf("%c",&opcao);
if(toupper(opcao) == 'I')
{
printf("Digite o valor a ser inserido: ");
scanf("%d",&numInsert);
12
inserir(fC,numInsert,&c,&f);
printf("\nVisualizacao da fila: ");
mostrar(fC,NUM);
}
else if(toupper(opcao) == 'E')
{
eliminar(fC,&c,&f);
printf("Visualizacao da fila: ");
mostrar(fC,NUM);
printf("\n");
}
else if(toupper(opcao) == 'B')
{
printf("Digite o valor a ser buscado: ");
scanf("%d",&numBusca);
buscaSequencial(fC,numBusca);
}
else if(toupper(opcao) == 'O')
{
bubbleSort(fC,&c,&f);
printf("\nVisualizacao da fila ordenada: ");
mostrar(fC,NUM);
}
} while(toupper(opcao) != 'S');
system("PAUSE");
return 0;
}
Função Inserir
Função Eliminar
else
{
14
lista[*c] = 0;
Função Mostrar
printf("\n\n");
}
Função Preencher
Função BubbleSort
while(troca)
{
//rezo pra que fique organizado
troca=0;
lista[i] = lista[i+1];
lista[i+1] = tmp;
troca=1;
}
}
}
Função BuscaSequencial
if(!achou)
printf("\nElemento nao encontrado. Foi mal.\n\n");
}
17
Conclusão
É importante utilizar este recurso. Se filas são importantes na vida real, elas
também têm seu espaço garantido na área da computação.
18
Referência Bibliográfica