1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #include <stdio.h> #include <stdlib.h> struct stack_node // 宣告堆疊 { int data; struct stack_node *next; // 指向下一節點 }; typedef struct stack_node stack_list; typedef stack_list *link; link push(link stack,int value) { link new_node; // 新節黠 new_node = ( link ) malloc(sizeof(stack_list)); if ( !new_node ) { printf("Memory Error! \n"); return NULL; // 存入失敗 } new_node->data = value; //建立節點內容 new_node->next = stack; stack = new_node; return stack; } link pop(link stack,int *value) { link top; if ( stack != NULL ) { top = stack; stack = stack->next; *value = top->data; free(top); return stack; } else *value = -1; } int empty(link stack) // 檢查堆疊是否是空的 { if ( stack == NULL ) return 1; else return 0; } link operand = NULL; int isoperator(int op) { switch ( (char) op ) { case '+': case '-': case '*': case '/': return 1; default: return 0; } } // 計算運算式的值 int get_value(int op,int operand1,int operand2) { switch ( (char) op ) { case '*': return ( operand2 * operand1 ); case '/': return ( operand2 / operand1 ); case '+': return ( operand2 + operand1 ); case '-': return ( operand2 - operand1 ); } } void main() { char exp[100]; int operand1 = 0; int operand2 = 0; int result = 0; int pos = 0; printf("請輸入後序運算式 ==> "); gets(exp); printf("後序運算式[%s]的結果是 ",exp); /* 剖析運算式字串迴圈 */ while ( exp[pos] != '\0' && exp[pos] != '\n' ) { if ( isoperator(exp[pos]) ) { operand = pop(operand,&operand1); operand = pop(operand,&operand2); operand = push(operand, get_value(exp[pos],operand1,operand2)); } else operand = push(operand,exp[pos]-48); pos++; } operand = pop(operand,&result); printf(" %d\n",result); } |
2019年1月22日 星期二
資料結構 C語言 postfix後序轉中序計算
輸入後序運算式並計算結果:
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言