Fila dinâmica em C
Publicado por Andrey (última atualização em 27/06/2016)
[ Hits: 9.313 ]
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;
}
Nenhum comentário foi encontrado.
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Como personalizar o lxde? [RESOLVIDO] (5)
Flatpaks não funcionam após atualizar pelo Gerenciador de Atualizações... (3)
Erro no suitable vídeo mode (15)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (2)









