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 }