Fila dinâmica em C
Publicado por Andrey (última atualização em 27/06/2016)
[ Hits: 9.458 ]
Homepage: https://github.com/andreycdias
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.
#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;
}
Contagem de elementos de um array
Integração numérica - Método da Quadratura Gaussiana
Nenhum comentário foi encontrado.
SynapSeq - programa para estimular as ondas cerebrais
Por que seu __DIR__ falhou ou o "inferno" dos caminhos no PHP
Preparando-se para certificações da LPI através do LPI Lab
Migração de Arch Linux para repositórios CachyOS (Uso de Instruções v3 e v4)
Arch Linux com repos do CachyOS para otimização ou usar Gentoo?
Ativando o modo Quake no XFCE4-Terminal
[Tutorial] Configurando Multimaster no Samba 4 AD (DC02) + Explicação de FSMO Roles
[Resolvido] Google Chrome reclamando de perfil em uso após mudar hostname
Senhor Einstein tinha razão mesmo! [RESOLVIDO] (10)
Como insiro e excluo um elemento XML e JSON ao código Javascript (2)
Como instalar Warsaw no Gentoo? (4)
Da pra formatar um netbook MGB e usar algum linux nele? É possível usa... (4)









