Advertisement
pseud0_

Untitled

Aug 30th, 2022
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.01 KB | None | 0 0
  1. // #include "include/main.h"
  2. #include <time.h>
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #define QUEUE_SIZE 30
  8.  
  9. typedef int dataArray[20]; // will be used as payload for the data in the queue
  10.  
  11. struct node
  12. {
  13.     void* data;
  14.     struct node *next;
  15. };
  16. typedef struct node node;
  17.  
  18. struct queue
  19. {
  20.     int count;
  21.     node *front;
  22.     node *rear;
  23. };
  24. typedef struct queue queue;
  25.  
  26. void initialize(queue *q);
  27. int is_empty(queue *q);
  28. void dequeue(queue *q, void** outputValue);
  29. void display(node *head);
  30.  
  31. float random_float();
  32.  
  33. void initialize(queue *q)
  34. {
  35.     q->count = 0;
  36.     q->front = NULL;
  37.     q->rear = NULL;
  38. }
  39.  
  40. int is_empty(queue *q)
  41. {
  42.     return (q->rear == NULL);
  43. }
  44.  
  45. void enqueue(queue *q, void* value)
  46. {
  47.     if (q->count == QUEUE_SIZE)
  48.     {
  49.         void* tmp;
  50.         dequeue(q, &tmp);
  51.     }
  52.    
  53.     printf(" contents of value in enqueue: %p\n", value);
  54.  
  55.     node *tmp;
  56.     tmp = malloc(sizeof(node));
  57.     printf("[enqueue] sizeof node %d\r\n", (uint) sizeof(node));
  58.     tmp->data = value;
  59.     tmp->next = NULL;
  60.    
  61.     printf(" contents of tmp-node in enqueue: %p\n", tmp->data);
  62.  
  63.     if (!is_empty(q))
  64.     {
  65.         q->rear->next = tmp;
  66.         q->rear = tmp;
  67.     }
  68.     else
  69.     {
  70.         q->front = q->rear = tmp;
  71.     }
  72.     q->count++;
  73. }
  74.  
  75. void dequeue(queue *q, void** outputValue)
  76. {
  77.     node *tmp;
  78.     *outputValue = q->front->data;
  79.     printf("dequeue output before freeing memory: %p\r\n===========\r\n", *outputValue);
  80.     printf("[dequeue] size %d - %d\r\n", (uint) sizeof(q->front->data), (uint) sizeof(q->front->data));
  81.     tmp = q->front;
  82.     q->front = q->front->next;
  83.     q->count--;
  84.     free(tmp);
  85. }
  86.  
  87. void display(node *head)
  88. {
  89.     if (head == NULL)
  90.     {
  91.         printf("NULL\r\n");
  92.     }
  93.     else
  94.     {
  95.         printf("value: %p\n", head->data);
  96.         display(head->next);
  97.     }
  98. }
  99.  
  100. float random_int()
  101. {
  102.     time_t t;
  103.     srand((unsigned) time(&t));
  104.     return rand()%50;
  105. }
  106.  
  107. int main()
  108. {
  109.     queue *q;
  110.     q = malloc(sizeof(queue));
  111.     initialize(q);
  112.     srand((unsigned int)time(NULL));
  113.  
  114.     dataArray tmp;
  115.     for (int i = 0; i < 20; i++)
  116.     {
  117.         tmp[i] = i;
  118.     }
  119.     printf("display dataArray before fill\r\n===========\r\n");
  120.     for (int i = 0; i < 20; i++)
  121.     {
  122.         printf("%d\n", tmp[i]);
  123.     }
  124.  
  125.     // an array is also a pointer, so we can enqueue the pointer directly.
  126.     enqueue(q, tmp);
  127.    
  128.     printf("Queue display after init and fill\r\n===========\r\n");
  129.     display(q->front);
  130.  
  131.     printf("Queue before dequeue\r\n===========\r\n");
  132.     printf("Queue #1  element count: %d\r\n", q->count);
  133.     // Nächsten Queue Eintrag holen
  134.     void* queueData;
  135.     dequeue(q, &queueData);
  136.     printf("Queue after dequeue\r\n===========\r\n");
  137.     printf("Queue #1  element count: %d\r\n", q->count);
  138.     // the queue data is actually a 20-element int array
  139.     int* pData = (int*) queueData;
  140.     for (int i = 0; i < 20; i++)
  141.     {
  142.         printf("%d\n", pData[i]);
  143.     }
  144.     return 0;
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement