Mercurial > hg > Papers > 2019 > oshiro-thesis
comparison final_main/src/SingleLinkedStack.cbc @ 0:83f997abf3b5
first commit
author | e155702 |
---|---|
date | Thu, 14 Feb 2019 16:51:50 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:83f997abf3b5 |
---|---|
1 #include "../context.h" | |
2 #include "../origin_cs.h" | |
3 #include <stdio.h> | |
4 | |
5 // typedef struct SingleLinkedStack { | |
6 // struct Element* top; | |
7 // } SingleLinkedStack; | |
8 | |
9 Stack* createSingleLinkedStack(struct Context* context) { | |
10 struct Stack* stack = new Stack(); | |
11 struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); | |
12 stack->stack = (union Data*)singleLinkedStack; | |
13 singleLinkedStack->top = NULL; | |
14 stack->push = C_pushSingleLinkedStack; | |
15 stack->pop = C_popSingleLinkedStack; | |
16 stack->pop2 = C_pop2SingleLinkedStack; | |
17 stack->get = C_getSingleLinkedStack; | |
18 stack->get2 = C_get2SingleLinkedStack; | |
19 stack->isEmpty = C_isEmptySingleLinkedStack; | |
20 stack->clear = C_clearSingleLinkedStack; | |
21 return stack; | |
22 } | |
23 | |
24 void printStack1(union Data* data) { | |
25 struct Node* node = &data->Element.data->Node; | |
26 if (node == NULL) { | |
27 printf("NULL"); | |
28 } else { | |
29 printf("key = %d ,", node->key); | |
30 printStack1((union Data*)data->Element.next); | |
31 } | |
32 } | |
33 | |
34 void printStack(union Data* data) { | |
35 printStack1(data); | |
36 printf("\n"); | |
37 } | |
38 | |
39 __code clearSingleLinkedStack(struct SingleLinkedStack* stack,__code next(...)) { | |
40 stack->top = NULL; | |
41 goto next(...); | |
42 } | |
43 | |
44 __code pushSingleLinkedStack(struct SingleLinkedStack* stack,union Data* data, __code next(...)) { | |
45 Element* element = new Element(); | |
46 element->next = stack->top; | |
47 element->data = data; | |
48 stack->top = element; | |
49 goto next(...); | |
50 } | |
51 | |
52 __code popSingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, ...)) { | |
53 if (stack->top) { | |
54 data = stack->top->data; | |
55 stack->top = stack->top->next; | |
56 } else { | |
57 data = NULL; | |
58 } | |
59 goto next(data, ...); | |
60 } | |
61 | |
62 __code pop2SingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, union Data* data1, ...)) { | |
63 if (stack->top) { | |
64 data = stack->top->data; | |
65 stack->top = stack->top->next; | |
66 } else { | |
67 data = NULL; | |
68 } | |
69 if (stack->top) { | |
70 data1 = stack->top->data; | |
71 stack->top = stack->top->next; | |
72 } else { | |
73 data1 = NULL; | |
74 } | |
75 goto next(data, data1, ...); | |
76 } | |
77 | |
78 | |
79 __code getSingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, ...)) { | |
80 if (stack->top) | |
81 data = stack->top->data; | |
82 else | |
83 data = NULL; | |
84 goto next(data, ...); | |
85 } | |
86 | |
87 __code get2SingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, union Data* data1, ...)) { | |
88 if (stack->top) { | |
89 data = stack->top->data; | |
90 if (stack->top->next) { | |
91 data1 = stack->top->next->data; | |
92 } else { | |
93 data1 = NULL; | |
94 } | |
95 } else { | |
96 data = NULL; | |
97 data1 = NULL; | |
98 } | |
99 goto next(data, data1, ...); | |
100 } | |
101 | |
102 __code isEmptySingleLinkedStack(struct SingleLinkedStack* stack, __code next(...), __code whenEmpty(...)) { | |
103 if (stack->top) | |
104 goto next(...); | |
105 else | |
106 goto whenEmpty(...); | |
107 } | |
108 | |
109 | |
110 |