-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathqueue.c
More file actions
60 lines (51 loc) · 1.12 KB
/
queue.c
File metadata and controls
60 lines (51 loc) · 1.12 KB
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
#include "queue.h"
void
enqueue(struct queue *queue, void *data) {
struct queueNode *temp = malloc(sizeof(struct queueNode));
temp->data = data;
if (queue->begin == NULL && queue->end == NULL) {
temp->next = NULL;
queue->end = temp;
} else {
temp->next = queue->begin;
}
queue->begin = temp;
}
void *dequeue(struct queue *queue) {
void *data = NULL;
if (queue->begin != NULL && queue->end != NULL) {
struct queueNode *temp = queue->begin;
if (temp->next == NULL) {
data = temp->data;
free(temp);
queue->begin = NULL;
queue->end = NULL;
return data;
}
while (temp->next->next != NULL) {
temp = temp->next;
}
data = temp->next->data;
free(temp->next);
temp->next = NULL;
}
return data;
}
struct queue *
createQueue() {
struct queue *queue = malloc(sizeof(struct queue));
queue->begin = NULL;
queue->end = NULL;
return queue;
}
/* Sample main to use queue
void main() {
struct queue *queue = createQueue();
enqueue(queue, 5);
enqueue(queue, 10);
int dq = dequeue(queue);
printf("%d dequeued\n", dq);
dq = dequeue(queue);
printf("%d dequeued\n", dq);
printQueue(queue);
}*/