Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // #include "include/main.h"
- #include <time.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define QUEUE_SIZE 30
- typedef int dataArray[20];
- struct node
- {
- dataArray data;
- struct node *next;
- };
- typedef struct node node;
- struct queue
- {
- int count;
- node *front;
- node *rear;
- };
- typedef struct queue queue;
- void initialize(queue *q);
- int is_empty(queue *q);
- void dequeue(queue *q, dataArray *outputArray);
- void display(node *head);
- float random_float();
- void initialize(queue *q)
- {
- q->count = 0;
- q->front = NULL;
- q->rear = NULL;
- }
- int is_empty(queue *q)
- {
- return (q->rear == NULL);
- }
- void enqueue(queue *q, dataArray value)
- {
- if (q->count == QUEUE_SIZE)
- {
- dataArray tmp;
- dequeue(q, &tmp);
- free(tmp);
- }
- printf(" contents of value in enqueue\n");
- for (int i = 0; i < 20; i++)
- {
- printf("%d\n", value[i]);
- }
- node *tmp;
- tmp = malloc(sizeof(node));
- printf("[enqueue] sizeof node %d\r\n", (uint) sizeof(node));
- // memcpy(tmp->data, value, sizeof(int[20]));
- memcpy(tmp->data, value, sizeof(dataArray));
- tmp->next = NULL;
- printf(" contents of tmp-node in enqueue\n");
- for (int i = 0; i < 20; i++)
- {
- printf("%d\n", tmp->data[i]);
- }
- if (!is_empty(q))
- {
- q->rear->next = tmp;
- q->rear = tmp;
- }
- else
- {
- q->front = q->rear = tmp;
- }
- q->count++;
- }
- void dequeue(queue *q, dataArray *outputArray)
- {
- node *tmp;
- memcpy(outputArray, q->front->data, sizeof(dataArray));
- printf("dequeue output before freeing memory\r\n===========\r\n");
- for (int i = 0; i < 20; i++)
- {
- printf("%d\n", *outputArray[i]);
- }
- printf("[dequeue] size %d - %d\r\n", (uint) sizeof(q->front->data), (uint) sizeof(q->front->data[0]));
- tmp = q->front;
- q->front = q->front->next;
- q->count--;
- free(tmp);
- }
- void display(node *head)
- {
- if (head == NULL)
- {
- printf("NULL\r\n");
- }
- else
- {
- for (int i = 0; i < 20; i++)
- {
- printf("%d\n", head->data[i]);
- }
- display(head->next);
- }
- }
- float random_int()
- {
- time_t t;
- srand((unsigned) time(&t));
- return rand()%50;
- }
- int main()
- {
- queue *q;
- q = malloc(sizeof(queue));
- initialize(q);
- srand((unsigned int)time(NULL));
- dataArray tmp;
- for (int i = 0; i < 20; i++)
- {
- tmp[i] = i;
- }
- printf("display dataArray before fill\r\n===========\r\n");
- for (int i = 0; i < 20; i++)
- {
- printf("%d\n", tmp[i]);
- }
- enqueue(q, tmp);
- printf("Queue display after init and fill\r\n===========\r\n");
- display(q->front);
- printf("Queue before dequeue\r\n===========\r\n");
- printf("Queue #1 element count: %d\r\n", q->count);
- // Nächsten Queue Eintrag holen
- dataArray *queData = malloc(sizeof(dataArray));
- dequeue(q, queData);
- printf("Queue after dequeue\r\n===========\r\n");
- printf("Queue #1 element count: %d\r\n", q->count);
- for (int i = 0; i < 20; i++)
- {
- printf("%d\n", *queData[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement