void escolhe(int resposta, node* Fila) { switch(resposta) { case 0: limpaFila(Fila); break; case 1: exibeFila(Fila); break; case 2: novoFinal(Fila); break; case 3: removePrimeiro(Fila); break; case 4: criaFila(Fila); break; default: puts("\nOpção inválida! Verifique novamente as opções apresentadas."); } }
void testeFila () { //Define o tamanho maximo da fila int NMAX = 100; //Inicializa o vetor onde a fila sera armazenada dado *fila = malloc(sizeof(dado) * NMAX); //Cria os indicadores de inicio e fim int inicio, fim; //Inicializa a fila criaFila(fila, NMAX, &inicio, &fim); //Insere 2 elementos insereFila(fila, &inicio, &fim, 3, NMAX); insereFila(fila, &inicio, &fim, 10, NMAX); //Exibe a fila atual exibeFila(fila, inicio, fim); //Desempilha um elemento e imprime dado desempilhado; desempilhaFila(fila, &inicio, &fim, &desempilhado); printf("\nElemento desempilhado: %d\n", desempilhado); //Mostra a nova fila exibeFila(fila, inicio, fim); printf("\nForcando underflow:\n"); //Forca underflow while (desempilhaFila(fila, &inicio, &fim, &desempilhado) == OK) { printf(" Desempilhei alguem...\n"); } printf(" Underflow!\n"); //Mostra a fila apos o overflow exibeFila(fila, inicio, fim); printf("\nVou empilhar para ver se ainda funciona:\n"); //Empilha coisas para ver se ainda funciona if (insereFila(fila, &inicio, &fim, 10, NMAX)==OK) printf(" Tudo ok!\n"); //Mostra a fila apos insercao exibeFila(fila, inicio, fim); printf("\nForcando Overflow!\n"); //Empilha ate ter overflow while (insereFila(fila, &inicio, &fim, 0, NMAX) == OK); printf(" Overflow!\n"); //Se quiser ver: //exibeFila(fila, inicio, fim); printf("\nDesempilhando um elemento e tentando reempilhar:\n"); //Desempilha um elemento e tenta empilhar outro: desempilhaFila(fila, &inicio, &fim, &desempilhado); if (insereFila(fila, &inicio, &fim, 0, NMAX) == OK) { printf(" Empilhado com sucesso.\n"); } else { printf(" Ueh... Pq nao empilhou?\n"); } //O empilhamento falou por causa da implementacao linear da fila. //Observe o processo ate agora: /* Inicial: Empilhamento Empilhamento Desempilhamento || -> |elm1| -> |elm1|elm2| -> |elm2| inicio = fim inic; fim+1 inicio fim+2 inic+1 fim+2 */ //Ao desempilharmos, nao mudamos o incide de 'fim', mas sim apenas o indice de 'inicio' //Isso faz com que a fila ainda pareca cheia quando se tenta empilhar um elemento, mesmo //que haja espaco no comeco do vetor. //Isso motiva a implementacao circular das filas (Veja exemplo). }