Advertisement
pseud0_

Untitled

Aug 30th, 2022
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.24 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];
  10.  
  11. struct node
  12. {
  13.     dataArray 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, dataArray *outputArray);
  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, dataArray value)
  46. {
  47.     if (q->count == QUEUE_SIZE)
  48.     {
  49.         dataArray tmp;
  50.         dequeue(q, &tmp);
  51.         free(tmp);
  52.     }
  53.    
  54.     printf(" contents of value in enqueue\n");
  55.     for (int i = 0; i < 20; i++)
  56.     {
  57.         printf("%d\n", value[i]);
  58.     }
  59.  
  60.     node *tmp;
  61.     tmp = malloc(sizeof(node));
  62.     printf("[enqueue] sizeof node %d\r\n", (uint) sizeof(node));
  63.     // memcpy(tmp->data, value, sizeof(int[20]));
  64.     memcpy(tmp->data, value, sizeof(dataArray));
  65.     tmp->next = NULL;
  66.    
  67.  
  68.  
  69.     printf(" contents of tmp-node in enqueue\n");
  70.     for (int i = 0; i < 20; i++)
  71.     {
  72.         printf("%d\n", tmp->data[i]);
  73.     }
  74.  
  75.     if (!is_empty(q))
  76.     {
  77.         q->rear->next = tmp;
  78.         q->rear = tmp;
  79.     }
  80.     else
  81.     {
  82.         q->front = q->rear = tmp;
  83.     }
  84.     q->count++;
  85. }
  86.  
  87. void dequeue(queue *q, dataArray *outputArray)
  88. {
  89.     node *tmp;
  90.     memcpy(outputArray, q->front->data, sizeof(dataArray));
  91.     printf("dequeue output before freeing memory\r\n===========\r\n");
  92.     for (int i = 0; i < 20; i++)
  93.     {
  94.         printf("%d\n", *outputArray[i]);
  95.     }
  96.     printf("[dequeue] size %d - %d\r\n", (uint) sizeof(q->front->data), (uint) sizeof(q->front->data[0]));
  97.     tmp = q->front;
  98.     q->front = q->front->next;
  99.     q->count--;
  100.     free(tmp);
  101. }
  102.  
  103. void display(node *head)
  104. {
  105.     if (head == NULL)
  106.     {
  107.         printf("NULL\r\n");
  108.     }
  109.     else
  110.     {
  111.         for (int i = 0; i < 20; i++)
  112.         {
  113.             printf("%d\n", head->data[i]);
  114.         }
  115.  
  116.         display(head->next);
  117.     }
  118. }
  119.  
  120. float random_int()
  121. {
  122.     time_t t;
  123.     srand((unsigned) time(&t));
  124.     return rand()%50;
  125. }
  126.  
  127. int main()
  128. {
  129.     queue *q;
  130.     q = malloc(sizeof(queue));
  131.     initialize(q);
  132.     srand((unsigned int)time(NULL));
  133.  
  134.     dataArray tmp;
  135.     for (int i = 0; i < 20; i++)
  136.     {
  137.         tmp[i] = i;
  138.     }
  139.     printf("display dataArray before fill\r\n===========\r\n");
  140.     for (int i = 0; i < 20; i++)
  141.     {
  142.         printf("%d\n", tmp[i]);
  143.     }
  144.  
  145.     enqueue(q, tmp);
  146.    
  147.     printf("Queue display after init and fill\r\n===========\r\n");
  148.     display(q->front);
  149.  
  150.     printf("Queue before dequeue\r\n===========\r\n");
  151.     printf("Queue #1  element count: %d\r\n", q->count);
  152.     // Nächsten Queue Eintrag holen
  153.     dataArray *queData = malloc(sizeof(dataArray));
  154.     dequeue(q, queData);
  155.     printf("Queue after dequeue\r\n===========\r\n");
  156.     printf("Queue #1  element count: %d\r\n", q->count);
  157.  
  158.     for (int i = 0; i < 20; i++)
  159.     {
  160.         printf("%d\n", *queData[i]);
  161.     }
  162.     return 0;
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement