Fila dinâmica em C

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

[ Hits: 1.698 ]

Homepage: https://github.com/azk4n

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

CALCULADORA SIMPLES

Determinando a posicão de ocorrencia de uma string em outra

Lista Duplamente Encadeada em C

Pilha dinâmica em C

Teste de desempenho com números primos em C (corrigido)


  

Comentários
[1] Comentário enviado por listeiro_037 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 azk4n 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 listeiro_037 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 azk4n em 28/02/2016 - 23:29h

ok, thx!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts