Advertisement
azk4n

dynamic queue in C

Feb 21st, 2016
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.26 KB | None | 0 0
  1. /* a simple dynamic queue in C
  2.        
  3.   functions:
  4.   - insert and remove element (no)
  5.   - show the queue
  6.   - free queue
  7.  
  8.   writer: Alexandre (azk4n)    
  9. */
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13.  
  14. typedef struct NO{
  15.      int data;
  16.      struct NO *nxt;
  17.  }no;
  18.  
  19. int size;
  20. no *tmp;
  21.  
  22. int empty(no *queue){
  23.     if(queue->nxt == NULL) return 1;
  24.     else return 0;
  25. }
  26.  
  27.  
  28. void showQueue(no *queue){
  29.     if(empty(queue)){
  30.         printf("\nempty queue\n\n");
  31.     }else{
  32.         tmp = queue->nxt;
  33.         printf("\n");
  34.         while(tmp != NULL){
  35.             printf("%d ", tmp->data);
  36.             tmp = tmp->nxt;
  37.         }printf("\nsize of queue: %d\n\n", size);
  38.     }
  39. }
  40.  
  41. void enqueue(no *queue){
  42.     no *new = (no*) malloc(sizeof(no));
  43.     new->nxt = NULL;
  44.     printf("\ntake the new node: \n");
  45.     scanf("%d", &new->data);
  46.     printf("\n");
  47.     if(empty(queue)){
  48.         queue->nxt = new;
  49.         size++;
  50.     }else{
  51.         tmp = queue->nxt;
  52.         while(tmp->nxt != NULL){
  53.             tmp = tmp->nxt;
  54.         }
  55.         tmp->nxt = new;
  56.         size++;
  57.     }
  58. }
  59.  
  60. no *dequeue(no *queue){
  61.     if(empty(queue)){
  62.         printf("\nempty queue\n\n");
  63.         return NULL;
  64.     }else{
  65.         tmp = queue->nxt;
  66.         queue->nxt = tmp->nxt;
  67.         size--;
  68.         return tmp;
  69.     }
  70. }
  71.  
  72. void freeQueue(no *queue){
  73.     if(empty(queue)){
  74.         printf("\nempty queue\n\n");
  75.     }else{
  76.         no *nxtNode,
  77.            *actualNode;
  78.         actualNode = queue->nxt;
  79.         while(actualNode != NULL){
  80.             nxtNode = actualNode->nxt;
  81.             free(actualNode);
  82.             actualNode = nxtNode;
  83.         }
  84.         printf("\nqueue clear\n\n");
  85.     }
  86. }
  87.    
  88. int main(){
  89.     no *queue = (no*) malloc(sizeof(no));
  90.     if(!queue){
  91.         printf("no memory");
  92.         exit(1);
  93.     }else{
  94.         queue->nxt = NULL;
  95.         size = 0;
  96.         int opt;
  97.    
  98.         do{
  99.             printf("0 -> quit\n");
  100.             printf("1 -> show queue\n");
  101.             printf("2 -> add node in queue\n");
  102.             printf("3 -> remove node in queue\n");
  103.             printf("4 -> free queue\n");
  104.             printf("opt: "); scanf("%d", &opt);
  105.        
  106.             switch(opt){
  107.                 case 1:
  108.                     showQueue(queue);
  109.                     break;
  110.                 case 2:
  111.                     enqueue(queue);
  112.                     break;
  113.                 case 3:
  114.                     tmp = dequeue(queue);
  115.                     if(tmp != NULL)
  116.                         printf("\nelement removed: %d\n\n", tmp->data);
  117.                         break;
  118.                 case 4:
  119.                     freeQueue(queue);
  120.                     queue->nxt = NULL;
  121.                     size = 0;
  122.                     break;
  123.                 default:
  124.                     if(opt != 0) printf("\ninsert valid option!\n\n");
  125.              } 
  126.         }while(opt != 0);
  127.     }
  128.     return 1;
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement