Fila dinâmica em C

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

[ Hits: 9.090 ]

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

Função para validação de datas

Calculo calorico visando perca de gordura e definicao muscular

Frases

Exemplo de Menu

Exemplo de uso de Graphics.h


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts