Fila dinâmica em C

Publicado por Alexandre (azk4n) (última atualização em 27/02/2016)

[ Hits: 3.703 ]

Homepage: null

Download queueAZK.c




Implementação de uma simples fila dinâmica em C.

Código em en_US.

azk4n

  



Esconder código-fonte

/* 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;
}
   

Scripts recomendados

NCURSES - Parte II

Aterm multicolor v0.02

Organizar variáveis em ordem crescente

Calcular determinante de matrizes

Conversor decimal para binario para GNU/LINUX


  

Comentários
[1] Comentário enviado por removido em 28/02/2016 - 06:04h

Estou tentando entender o programa.
Conheço um algoritmo para pilha semelhante, com alocação dinâmica, que usa ponteiro duplo (**).

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

[2] Comentário enviado por azk em 28/02/2016 - 17:40h

interessante, caro listeiro! poderia postar? ponteiro duplo é um assunto que me interessa muito...

se tiver dúvidas em relação a esse algoritmo fique a vontade p/ perguntar!

[3] Comentário enviado por removido em 28/02/2016 - 19:33h

Vou conferir uns detalhes de interface e logo postarei.
Se me lembrar deixarei-lhe um aviso.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

[4] Comentário enviado por azk em 28/02/2016 - 23:29h

ok, thx!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts