-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathdemo_link_queue_2.c
More file actions
77 lines (62 loc) · 1.46 KB
/
demo_link_queue_2.c
File metadata and controls
77 lines (62 loc) · 1.46 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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "demo_link_queue_2.h"
listQueue *create_queue() {
listQueue *queue = (listQueue *)malloc(sizeof(listQueue));
if (queue == NULL) return NULL;
queue->num = 0;
queue->head = NULL;
queue->tail = NULL;
}
void destroy_queue(listQueue *queue) {
if ((queue == NULL) || (list_queue_is_empty(queue))) {
return ;
}
while(!list_queue_is_empty(queue)) {
dequeue(queue);
}
free(queue);
}
bool enqueue(listQueue *queue, int data) {
if (queue == NULL) return false;
queueNnode *p = (queueNnode *)malloc(sizeof(queueNnode));
if (p == NULL) return false;
p->data = data;
p->next = NULL;
if (queue->head == NULL) {
queue->head = p;
} else {
queue->tail->next = p;
}
queue->tail = p;
queue->num++;
return 0;
}
int dequeue(listQueue *queue) {
if (queue == NULL) return -1;
queueNnode *p = queue->head;
int data = p->data;
queue->head = queue->head->next;
queue->num--;
if (queue->head == NULL) {
queue->tail = NULL;
}
free(p);
return data;
}
void test_link_queue(listQueue *queue) {
int i;
for (i = 0 ; i < 8; i++) {
enqueue(queue, i);
}
for (i = 0 ; i < 8; i++) {
printf("dequeue val: %d\n", dequeue(queue));
}
}
int main () {
listQueue *queue = create_queue();
test_link_queue(queue);
destroy_queue(queue);
return 0;
}