quinta-feira, 29 de setembro de 2011

Inclusão e exclusão de elementos em uma fila circular

#include <stdio.h>
#include <stdlib.h>
void entrar(int *fila,int v,int tam,int *ini,int *fim)
{
    int prov = (*fim+1) % (tam);
    if(prov != *ini)
    {
        *fim=prov;
        fila[*fim]=v;
        if(*ini==-1) *ini=0;
    }
    else printf("\nFila cheia!\n");
}
int sair(int *fila,int tam, int *ini,int *fim) {
    int v;
    if( *ini != -1 )
    {
        v=fila[*ini];
        if(*ini==*fim)
        {
            fila[*ini]=NULL;
            *ini=*fim=-1;
        }
        else
        {
            fila[*ini]=NULL;
            *ini = (*ini+1) % tam;
        }
        return v;
    }
    else {
        printf("\nFila vazia!\n");
        return -1;
    }
}

int main() {

    char op;
    int ok, tam, *fila, elemento,ini=-1,fim=-1,i;
    printf("Informe o tamanho desejado para a fila: ");
    scanf("%d",&tam);
    if((fila=(int*)malloc(tam*sizeof(int)))==NULL) exit(1);
    do{
        printf("\n(e)ntrar (s)air (f)echar: ");
        getchar();
        scanf("%c",&op);
        switch (op){
            case 'e':
                printf("\nInforme o elemento a ser inserido: ");
                scanf("%d",&elemento);
                entrar(fila,elemento,tam,&ini,&fim);
                break;
            case 's':
                ok=sair(fila,tam,&ini,&fim);
                printf("\nO elemento retirado foi: %d.\n",ok);
                break;
        }
        for(i=0;i<tam;i++) printf("%d\t",fila[i]);
        printf("\n");
    }while(op!='f');
    return 0;
}

Nenhum comentário:

Postar um comentário