我的c\c++之旅(十)——逆-中序表达式

来源:互联网 发布:js判断是否为身份证号 编辑:程序博客网 时间:2024/06/08 09:18

逆序表达式转换为中序表达式

#include <stdio.h>#include <stdlib.h>#include <ctype.h>#define MAXLENGTH100struct ExpTree;typedef struct ExpTree *BRANCH;struct ExpTree {int element;BRANCH left;BRANCH right;};struct ExpTree *stack[MAXLENGTH];int top = -1;void push(struct ExpTree *tree){if(top < MAXLENGTH - 1)stack[++top] = tree;}struct ExpTree *pop(void){if(top >= 0)return stack[top--];}void Print_Tree(struct ExpTree *tree){if(tree != NULL) {if(tree->element == '+' || tree->element == '-')printf("(");Print_Tree(tree->left);printf("%c", tree->element);Print_Tree(tree->right);if(tree->element == '+' || tree->element == '-')printf(")");}}int main(){int c;struct ExpTree *tree;while((c = getchar()) != EOF && c != '\n') {if(isalnum(c)) {tree = (struct ExpTree *)malloc(sizeof(struct ExpTree));tree->element = c;tree->left = NULL;tree->right = NULL;push(tree);}else if(c != ' ') {tree = (struct ExpTree *)malloc(sizeof(struct ExpTree));tree->element = c;tree->right = pop();tree->left = pop();push(tree);}}Print_Tree(pop());printf("\n");return 0;}


0 0