quinta-feira, 1 de setembro de 2011

Inclusão e exclusão em uma lista sequencial - modo fila

#include <stdio.h>
#include <stdlib.h>

int inserir(int *fila, int elemento, int tam, int *ini,int *fim)
{
    if(*ini==*fim && *fim==-1)
    {
        fila[++*fim]=elemento;
        *ini=0;
        return 1;
    }
    if(*fim==(tam-1) && *ini==0)
    {
        printf("\nFila cheia!\n");
        return 0;
    }
    if(*fim==(tam-1))
    {
        int i;
        *fim=-1;
        for(int k=*ini;k<tam;k++)
        {
            fila[i++]=fila[k];
            fila[k]=NULL;
            *fim=*fim+1;
        }
        *ini=0;
    }
    fila[++*fim]=elemento;
    return 1;
}
  
int retirar(int *fila, int tam, int *ini,int *fim)
{
    if(*fim==*ini && *fim==-1)
        {
            printf("\nFila ja vazia!\n");
            return 0;
        }
    if(*fim==*ini)
        {
            fila[*ini]=NULL;
            *ini=-1;
            *fim=-1;
            return 1;
        }
    fila[*ini]=NULL;
    *ini=*ini+1;
    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(i)nserir (r)etirar (s)air: ");
        getchar();
        scanf("%c",&op);
        switch (op){
            case 'i':
                printf("\nInforme o elemento a ser inserido: ");
                scanf("%d",&elemento);
                ok=inserir(fila,elemento,tam,&ini,&fim);
                if(ok)printf("\nElemento inserido com sucesso!\n");
                else printf("\nNao foi possivel inserir o novo elemento\n");
                break;
            case 'r':
                ok=retirar(fila,tam,&ini,&fim);
                if(ok)printf("\nElemento retirado com sucesso!\n");
                else printf("\nNao foi possivel retirar o elemento\n");
                break;
        }
        for(i=0;i<tam;i++) printf("%d\t",fila[i]);
        printf("\n");
    }while(op!='s');
    return 0;
}

Nenhum comentário:

Postar um comentário