ramytamer

SLL QUEUE

Jun 17th, 2014
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.32 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define TYPE int
  5.  
  6. typedef struct Node{
  7.     TYPE data;
  8.     struct Node *next;
  9. }Node;
  10.  
  11. typedef struct Queue{
  12.     Node *head,*tail;
  13.     int numberOfElements;
  14. }Queue;
  15.  
  16. void reset(Queue *q);
  17. int isEmpty(Queue *q);
  18. void enqueue(Queue *q,TYPE val);
  19. TYPE dequeue(Queue *q);
  20. void display(Queue q);
  21.  
  22. int main(){
  23.     system("clear");
  24.     Queue q; reset(&q);
  25.     enqueue(&q,1); enqueue(&q,2);
  26.     enqueue(&q,4); enqueue(&q,5);
  27.     enqueue(&q,3); enqueue(&q,6);
  28.  
  29.     dequeue(&q);
  30.     dequeue(&q);dequeue(&q);
  31.     dequeue(&q);dequeue(&q);
  32.     dequeue(&q);dequeue(&q);
  33.  
  34.     enqueue(&q,1);enqueue(&q,3);
  35.    
  36.     display(q);
  37.     return 0;
  38. }
  39.  
  40. void reset(Queue *q){ q->head = q->tail = NULL; q->numberOfElements =  0; }
  41. int isEmpty(Queue *q){ return q->numberOfElements == 0; }
  42.  
  43. void enqueue(Queue *q,TYPE val){
  44.     Node * node = (Node*) malloc(sizeof(Node));
  45.     node->data = val;
  46.     node->next = NULL;
  47.  
  48.     isEmpty(q) ? (q->tail = node) : (q->head->next = node);
  49.  
  50.     q->head = node;
  51.     q->numberOfElements++;
  52. }
  53.  
  54. TYPE dequeue(Queue *q){
  55.     if(!isEmpty(q)) {
  56.         TYPE x = q->tail->data;
  57.         Node *tmp = q->tail;
  58.         if(!q->tail->next)
  59.             reset(q);
  60.         else{
  61.             free(q->tail);
  62.             q->tail = tmp->next;
  63.         }
  64.         q->numberOfElements--;
  65.         return x;
  66.     }
  67.     return 1<<31;
  68. }
  69.  
  70. void display(Queue q){ while(!isEmpty(&q)) printf("[%d]\n", dequeue(&q)); }
Advertisement
Add Comment
Please, Sign In to add comment