Mercurial > baum
comparison baum.c @ 3:15d7d6b9766f
added input; added nextNode, lastNode, insertLast
author | meillo@marmaro.de |
---|---|
date | Thu, 07 Feb 2008 16:15:07 +0100 |
parents | 557fa4df2bcd |
children | 24a697f37e7c |
comparison
equal
deleted
inserted
replaced
2:557fa4df2bcd | 3:15d7d6b9766f |
---|---|
22 fprintf(stderr, "[%s]\n", text); | 22 fprintf(stderr, "[%s]\n", text); |
23 } | 23 } |
24 | 24 |
25 | 25 |
26 /* new */ | 26 /* new */ |
27 struct Node* newNode(char* name) { | 27 struct Node* newNode(char* name, unsigned char value) { |
28 struct Node* node; | 28 struct Node* node; |
29 node = (struct Node*) malloc(sizeof(struct Node)); | 29 node = (struct Node*) malloc(sizeof(struct Node)); |
30 node->name = name; | 30 node->name = name; |
31 node->value = 0; | 31 node->value = value; |
32 node->right = 0; | 32 node->right = 0; |
33 node->down = 0; | 33 node->down = 0; |
34 return node; | 34 return node; |
35 } | 35 } |
36 | 36 |
37 | |
38 void setValue(struct Node* node, unsigned char value) { | |
39 node->value = value; | |
40 } | |
41 | |
42 | |
43 struct Node* nextNode(struct Node* node) { | |
44 return node->right; | |
45 } | |
46 | |
47 struct Node* lastNode(struct Node* node) { | |
48 while (node->right != NULL) { | |
49 node = node->right; | |
50 } | |
51 return node; | |
52 } | |
53 | |
54 void insertLast(struct Node* node, struct Node* insert) { | |
55 node = lastNode(node); | |
56 node->right = insert; | |
57 } | |
37 | 58 |
38 /* delete */ | 59 /* delete */ |
39 void delete(struct Node* node) { | 60 void delete(struct Node* node) { |
40 if (node->down != NULL) { | 61 if (node->down != NULL) { |
41 delete(node->down); | 62 delete(node->down); |
76 action(root); | 97 action(root); |
77 } | 98 } |
78 | 99 |
79 /* init */ | 100 /* init */ |
80 void init() { | 101 void init() { |
81 root = newNode("printchar"); | 102 /* add some numbers |
82 root->down = newNode("number"); | 103 root = newNode("print", 0); |
83 root->down = newNode("sum"); | 104 root->down = newNode("sum", 0); |
84 root->down->down = newNode("number"); | 105 |
85 root->down->down->value = 70; /* 'F' */ | 106 root->down->down = newNode("number", 60); |
86 root->down->down->right = newNode("number"); | 107 |
87 root->down->down->right->value = 50; /* '2' */ | 108 root->down->down->right = newNode("number", 50); |
88 /* result should be 'x' */ | 109 |
110 root->down->down->right->right = newNode("sum", 0); | |
111 root->down->down->right->right->down = newNode("number", 1); | |
112 root->down->down->right->right->down->right = newNode("number", 5); | |
113 */ | |
114 | |
115 /* input numbers and add them */ | |
116 root = newNode("print", 0); | |
117 root->down = newNode("sum", 0); | |
118 root->down->down = newNode("input", 0); | |
119 root->down->down->right = newNode("input", 0); | |
120 root->down->down->right->right = newNode("input", 0); | |
89 } | 121 } |
90 | 122 |
91 | 123 |
92 /* main */ | 124 /* main */ |
93 int main(int argc, char* argv[]) { | 125 int main(int argc, char* argv[]) { |
94 init(); | 126 init(); |
95 printTree(root); | 127 printTree(root); |
96 | 128 |
97 action(root); | 129 action(root); |
98 | 130 |
131 printTree(root); | |
99 delete(root); | 132 delete(root); |
100 | 133 |
101 return(0); | 134 return(0); |
102 } | 135 } |