Fila dinâmica em C

Publicado por Andrey (última atualização em 27/06/2016)

[ Hits: 6.857 ]

Homepage: https://github.com/andreycdias

Download dynamic_queue.c




Código simples de fila dinâmica em C.

A estrutura utiliza de duas cabeças para melhor desempenho na hora de remover e inserir na fila.

  



Esconder código-fonte

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

typedef struct queueElem{       //
    int data;                   //you can change for any type of data
    struct queueElem*next;      //
}queueELEM;                     //
typedef struct queue{
    struct queueElem*begin;
    struct queueElem*end;
}queue;
int opt;

queue*create(){
    queue*q = (queue*)malloc(sizeof(queue));
    if(!q)
        exit(1);
    else{
     q->begin = NULL;
     q->end = NULL;
    }
    return q;
}
int emptyQUEUE(queue*q){
    if(q==NULL) return 1;
    if(q->begin==NULL) return 1;
    else return 0;
}
int readVALUE(){
    int value;
    printf (" value to insert: ");
    scanf("%i", &value);
    return value;
}
queueELEM* allocate(int value){
    queueELEM* node = (queueELEM*)malloc(sizeof(queueELEM));
    if(!node)
        exit(1);
    else{
        node->data = value;
        node->next = NULL;
        return node;
    }
}
void enqueue(queue*q){
    queueELEM*node = allocate(readVALUE());
    if(!node)
        exit(1);
    if(q->end == NULL)
        q->begin = node;
    else
        q->end->next = node;
    q->end = node;
}
int dequeue(queue*q){
    if(emptyQUEUE(q)) return 0;

    queueELEM*node = q->begin;
    q->begin = q->begin->next;
    if(q->begin!=NULL)
        q->end = NULL;
    free(node);
    return 1;
}
void display(queue*q){
    if(emptyQUEUE(q)){
        printf (" empty queue;\n");
        return ;
    }
    queueELEM*aux = q->begin;
    printf ("\n  current queue: ");
    while(aux!=NULL){
        printf ("%i ", aux->data);
        aux = aux->next;
    }
    printf ("\n");
}
void cases(int opt, queue*q){
    switch(opt){
        case 1:
            enqueue(q);
            display(q);
            break;
        case 2:
            dequeue(q);
            display(q);
            break;
        default:
            if (opt!=0) printf (" invalid option;\n");
    }
}
int menu(){
    printf ("\n queue options;\n");
    printf ("  0 quit;\n");
    printf ("  1 enqueue;\n");
    printf ("  2 dequeue;\n");
    printf (" your choice: ");
    scanf("%i", &opt);
    return opt;
}
int main (void){
    queue*q = create();
    do{
        opt = menu();
        cases(opt,q);
    }while(opt);
    return 0;
}

Scripts recomendados

Programa para cálculo vetorial

Gerando uma "number list" de 6 digitos

Calendário em C

simples gerador de numeros primos

Listas Encadeadas


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário