Fila dinâmica em C

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

[ Hits: 3.693 ]

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

MeikeNeime - Programa gerador de nomes aleatórios

Calcular dia da semana a partir de uma data sugerida

Exibi os números primos de um numero recebido pelo usuário, sem estrutura de repetição

Multipla escolha

Organizar variáveis em ordem crescente


  

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