Пример #1
0
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.");
    }
}
Пример #2
0
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).
    
}