-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqueue_array.c
84 lines (67 loc) · 1.57 KB
/
queue_array.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*****************************************************************//**
* \file queue_array.c
* \brief FIFO data structure queue implemented in C.
*
* \author Xuhua Huang
* \date November 17, 2022
*********************************************************************/
#include <stdio.h>
#include <limits.h>
#include <stdbool.h>
#include <stdlib.h>
#define QUEUE_EMPTY INT_MIN
typedef struct queue {
int* values;
int head, tail, num_entries, size;
} queue;
void init_queue(queue* q, int max_size) {
q->size = max_size;
q->values = malloc(sizeof(int) * q->size);
q->num_entries = 0;
q->head = 0;
q->tail = 0;
}
bool queue_empty(queue* q) {
return (q->num_entries == 0);
}
bool queue_full(queue* q) {
return (q->num_entries == q->size);
}
bool queue_destroy(queue* q) {
free(q->values);
q->values = NULL;
}
bool enqueue(queue* q, int value) {
if (queue_full(q)) {
return false;
}
q->values[q->tail] = value;
q->num_entries++;
q->tail = (q->tail + 1) % q->size;
return true;
}
int dequeue(queue* q) {
int result = 0;
if (queue_empty(q)) {
return QUEUE_EMPTY;
}
result = q->values[q->head];
q->head = (q->head + 1) % q->size;
q->num_entries--;
return result;
}
int main(void) {
queue q1;
init_queue(&q1, 5);
enqueue(&q1, 23);
enqueue(&q1, 34);
enqueue(&q1, 45);
enqueue(&q1, 56);
enqueue(&q1, 78);
int t = 0;
while ((t = dequeue(&q1)) != QUEUE_EMPTY) {
printf("t = %d\n", t);
}
queue_destroy(&q1);
return EXIT_SUCCESS;
}