Fila dinâmica em C
Publicado por Alexandre (azk) (última atualização em 27/02/2016)
[ Hits: 3.993 ]
Homepage: null
Implementação de uma simples fila dinâmica em C.
Código em en_US.
azk4n
/* a simple dynamic queue in C
functions:
- insert and remove element (no)
- show the queue
- free queue
writer: Alexandre (azk4n)
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct NO{
int data;
struct NO *nxt;
}no;
int size;
no *tmp;
int empty(no *queue){
if(queue->nxt == NULL) return 1;
else return 0;
}
void showQueue(no *queue){
if(empty(queue)){
printf("\nempty queue\n\n");
}else{
tmp = queue->nxt;
printf("\n");
while(tmp != NULL){
printf("%d ", tmp->data);
tmp = tmp->nxt;
}printf("\nsize of queue: %d\n\n", size);
}
}
void enqueue(no *queue){
no *new = (no*) malloc(sizeof(no));
new->nxt = NULL;
printf("\ntake the new node: \n");
scanf("%d", &new->data);
printf("\n");
if(empty(queue)){
queue->nxt = new;
size++;
}else{
tmp = queue->nxt;
while(tmp->nxt != NULL){
tmp = tmp->nxt;
}
tmp->nxt = new;
size++;
}
}
no *dequeue(no *queue){
if(empty(queue)){
printf("\nempty queue\n\n");
return NULL;
}else{
tmp = queue->nxt;
queue->nxt = tmp->nxt;
size--;
return tmp;
}
}
void freeQueue(no *queue){
if(empty(queue)){
printf("\nempty queue\n\n");
}else{
no *nxtNode,
*actualNode;
actualNode = queue->nxt;
while(actualNode != NULL){
nxtNode = actualNode->nxt;
free(actualNode);
actualNode = nxtNode;
}
printf("\nqueue clear\n\n");
}
}
int main(){
no *queue = (no*) malloc(sizeof(no));
if(!queue){
printf("no memory");
exit(1);
}else{
queue->nxt = NULL;
size = 0;
int opt;
do{
printf("0 -> quit\n");
printf("1 -> show queue\n");
printf("2 -> add node in queue\n");
printf("3 -> remove node in queue\n");
printf("4 -> free queue\n");
printf("opt: "); scanf("%d", &opt);
switch(opt){
case 1:
showQueue(queue);
break;
case 2:
enqueue(queue);
break;
case 3:
tmp = dequeue(queue);
if(tmp != NULL)
printf("\nelement removed: %d\n\n", tmp->data);
break;
case 4:
freeQueue(queue);
queue->nxt = NULL;
size = 0;
break;
default:
if(opt != 0) printf("\ninsert valid option!\n\n");
}
}while(opt != 0);
}
return 1;
}
Busca do código do produto-Vetores----
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
Erro no suitable vídeo mode (0)
Erro no suitable vídeo mode (0)
Erro no suitable vídeo mode (0)
ERRO: LAZARUS 4.2 64 no Linux MINT não entra mais apos ajustar desktop... (0)









