Professional Documents
Culture Documents
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