ATPS Estrutura de Dados Etapas 3 e 4
Por: fabiofsl • 26/5/2016 • Trabalho acadêmico • 2.597 Palavras (11 Páginas) • 378 Visualizações
Estruturas de Dados
Pilhas, Filas e Grafos
3. Filas e Pilhas
3.1 Implementação da estrutura taxiamento
#include
#include
#include
#include
#include
typedef struct taxi{
int codVoo;
char modAviao[21];
char empresa[21];
char horaSaida[6];
struct taxi* anterior, * proximo;
}Taxi;
int limiteFila, tamFila;
Taxi* criaFila(){
tamFila = 0;
Taxi* sentinela = (Taxi*) malloc(sizeof(Taxi));
sentinela->codVoo = 0;
sentinela->anterior = sentinela;
sentinela->proximo = sentinela;
return(sentinela);
}// criaFila()
int filaVazia(Taxi* sentinela){
return(sentinela->proximo == sentinela);// 1 para fila vazia ou zero para fila não- vazia.
}// filaVazia()
int filaCheia(void){
return(tamFila == limiteFila);// 1 para fila cheia ou zero para fila não-cheia.
}// filaCheia()
int cadastrarTaxiamento(Taxi* sentinela, int num){
if(!filaCheia()){
Taxi* fimFila, *aux;
fimFila = (Taxi*) malloc(sizeof(Taxi));
aux = sentinela->anterior;
sentinela->anterior = fimFila;
fimFila->anterior = aux;
fimFila->proximo = sentinela;
aux->proximo = fimFila;
fimFila->codVoo = num;
printf("Digite o modelo da aeronave: ");gets(fimFila->modAviao);fflush(stdin);
printf("Digite o nome da empresa aerea: ");gets(fimFila->empresa);fflush(stdin);
printf("Digite a hora de decolagem
tamFila++;// Incrementa o tamanho da fila.
return(fimFila->codVoo);
}
else return(0);// Fila cheia.
}// cadastrarTaxiamento()
int autorizaTaxiamento(Taxi* sentinela){
if(!filaVazia(sentinela)){
int cod;
Taxi* inicioFila, *aux;
inicioFila = sentinela->proximo;
sentinela = inicioFila->anterior;
aux = inicioFila->proximo;
sentinela->proximo = aux;
aux->anterior = sentinela;
cod = inicioFila->codVoo;
printf("Modelo da aeronave: %s\n", inicioFila->modAviao);
printf("Empresa aerea: %s\n", inicioFila->empresa);
printf("Horario de decolagem: %s\n", inicioFila->horaSaida);
free(inicioFila);
tamFila--;// Decrementa o tamanho da fila.
return(cod);
}
else return(0);// Fila vazia.
}// autorizaTaxiamento()
int menu(){
int op = 0;
system("cls");
printf("\n");
printf(" ------------ VOEBEM ------------ \n");
printf(" | |\n");
printf(" | Menu Principal --------------- |\n");
printf(" | Escolha uma opcao |\n");
printf(" | 1. Nova fila de taxiamento |\n");
printf(" | 2. Cadastrar Taxiamento |\n");
printf(" | 3. Autorizar Taxiamento |\n");
printf(" | 0. Sair |\n");
printf(" -------------------------------- \n");
printf(" Opcao: ");
scanf("%i", &op);
fflush(stdin);
return(op);
}// menu()
int main(){
setlocale(LC_ALL, "portuguese");
system("color f0");
Taxi* filaTaxi;/* Cria um ponteiro para a fila.*/
int temp;
//int num;
int op = 0;
do{
op = menu();
switch(op){
case 1:
system("cls");
printf("\nCriar nova fila de taxiamento!\n");
printf("\nDigite o tamanho maximo da fila de taxiamento: ");
scanf("%i", &limiteFila);
fflush(stdin);
filaTaxi = criaFila();
if(filaTaxi) printf("\nFila para %i aeronaves criada com sucesso!!!\n\n\n", limiteFila);
else printf("\nErro!! Não foi possivel criar a fila. Por favor, tente novamente...\n\n\n");
system("pause");
break;
case 2:
system("cls");
printf("\nCadastrar novo taxiamento!\n");
printf("\nDigite o numero do voo: ");
scanf("%i", &temp);
fflush(stdin);
temp = cadastrarTaxiamento(filaTaxi, temp);
if (temp != 0) printf("\nVoo numero %i foi enfileirado com sucesso!\n\n\n", temp);
else printf("\nA fila esta cheia!\n\n\n");
system("pause");
break;
case 3:
system("cls");
printf("\nAutorizar Taxiamento!\n");
temp = autorizaTaxiamento(filaTaxi);
...