-
Notifications
You must be signed in to change notification settings - Fork 0
/
queue.c
69 lines (63 loc) · 1.68 KB
/
queue.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
#include <stdio.h>
#include <malloc.h>
// Queue struct type
typedef struct Queue {
int* data;
int size, capacity, front, back;
} Queue;
void enqueue(Queue* queue, int data);
int dequeue(Queue* queue);
int empty(Queue* queue);
int full(Queue* queue);
int main() {
// Create queue
Queue* queue = malloc(sizeof(Queue));
// Initialize queue
queue->size = 0;
queue->capacity = 4;
queue->front = 0;
queue->back = 0;
queue->data = malloc(sizeof(int) * queue->capacity);
// Test queue functions
enqueue(queue, 1);
enqueue(queue, 2);
enqueue(queue, 3);
enqueue(queue, 4);
enqueue(queue, 5);
printf("### Enqueued 5 items {1, 2, 3, 4, 5} ###\n");
printf("### Dequeued %d ###\n", dequeue(queue));
printf("### Dequeued %d ###\n", dequeue(queue));
printf("### Dequeued %d ###\n", dequeue(queue));
printf("### Dequeued %d ###\n", dequeue(queue));
printf("### Dequeued %d ###\n", dequeue(queue));
printf("### Dequeued %d ###\n", dequeue(queue));
// Free queue
free(queue->data);
free(queue);
return 0;
}
inline void enqueue(Queue* queue, int data) {
if (full(queue)) {
printf("Queue is full\n");
return;
}
queue->back = (queue->back + 1) % queue->capacity;
queue->data[queue->back] = data;
queue->size++;
}
int dequeue(Queue* queue) {
if (empty(queue)) {
printf("Queue is empty\n");
return -1;
}
int data = queue->data[queue->front];
queue->front = (queue->front + 1) % queue->capacity;
queue->size--;
return data;
}
int empty(Queue* queue) {
return queue->size == 0;
}
int full(Queue* queue) {
return queue->size == queue->capacity;
}