266
|
1 #include "../context.h"
|
|
2 #include <stdio.h>
|
|
3
|
|
4 Queue* createSingleLinkedQueue(struct Context* context) {
|
280
|
5 struct Queue* queue = new Queue();
|
266
|
6 struct SingleLinkedQueue* singleLinkedQueue = new SingleLinkedQueue();
|
|
7 queue->queue = (union Data*)singleLinkedQueue;
|
|
8 singleLinkedQueue->top = NULL;
|
|
9 singleLinkedQueue->last = NULL;
|
|
10 queue->take = C_takeSingleLinkedQueue;
|
|
11 queue->put = C_putSingleLinkedQueue;
|
|
12 queue->isEmpty = C_isEmptySingleLinkedQueue;
|
|
13 queue->clear = C_clearSingleLinkedQueue;
|
|
14 return queue;
|
|
15 }
|
|
16
|
|
17 void printQueue1(union Data* data) {
|
|
18 struct Node* node = &data->Element.data->Node;
|
|
19 if (node == NULL) {
|
|
20 printf("NULL");
|
|
21 } else {
|
|
22 printf("key = %d ,", node->key);
|
|
23 printQueue1((union Data*)data->Element.next);
|
|
24 }
|
|
25 }
|
|
26
|
|
27 void printQueue(union Data* data) {
|
|
28 printQueue1(data);
|
|
29 printf("\n");
|
|
30 }
|
|
31
|
|
32 __code clearSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(...)) {
|
|
33 queue->top = NULL;
|
|
34 goto next(...);
|
|
35 }
|
|
36
|
|
37 __code putSingleLinkedQueue(struct SingleLinkedQueue* queue, union Data* data, __code next(...)) {
|
|
38 Element* element = new Element();
|
|
39 element->next = NULL;
|
|
40 element->data = data;
|
|
41 if (queue->last) {
|
|
42 Element* last = queue->last;
|
|
43 last->next = element;
|
|
44 queue->last = element;
|
|
45 } else {
|
|
46 queue->top = element;
|
|
47 queue->last = element;
|
|
48 }
|
|
49 goto next(...);
|
|
50 }
|
|
51
|
272
|
52 __code takeSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(union Data* data, ...)) {
|
266
|
53 if (queue->top) {
|
|
54 data = queue->top->data;
|
|
55 queue->top = queue->top->next;
|
|
56 } else {
|
|
57 data = NULL;
|
|
58 }
|
|
59 goto next(data, ...);
|
|
60 }
|
|
61
|
|
62 __code isEmptySingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(...), __code whenEmpty(...)) {
|
|
63 if (queue->top)
|
|
64 goto next(...);
|
|
65 else
|
|
66 goto whenEmpty(...);
|
|
67 }
|
|
68
|