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