考研复试上机C++——前缀,后缀,中缀表达式相互转换及其运算

表达式的转换:

 

 

  • 1.中缀表达式转前缀表达式或者后缀表达式

  • 利用栈转换
  • 2.后缀表达式转中缀表达式或者前缀表达式

  • 直接构造表达式二叉树,得到表达式树根节点,然后中序遍历和前序遍历即可
  • 3.前缀表达式转中缀表达式或者后缀表达式

  • 直接构造表达式二叉树,得到表达式树根节点,然后中序遍历和后序遍历即可

 

  • 准备工作:

  • 定义表达式树结点类型

typedef struct BTNode{...}BTNode

  • 1.中缀表达式转前缀表达式或者后缀表达式

stack<char> k1,k2//初始化一个操作数栈,一个操作符栈

  • 2.后缀表达式转中缀表达式或者前缀表达式

stack<char> k3//初始化一个操作数栈

  • 3.前缀表达式转中缀表达式或者后缀表达式

stack<char> k4//初始化一个操作数栈

 

  • 接口声明:

  • 1.中缀表达式转前缀表达式或者后缀表达式

int priority(char x)//返回运算符优先级大小,返回格式是int数字

string intopost(string in)//中缀转后缀

  • 2.后缀表达式转中缀表达式或者前缀表达式

BTNode *posttree(string post)//后缀生成二叉树

  • 3.前缀表达式转中缀表达式或者后缀表达式

BTNode *pretree(string post)//前缀生成二叉树

  • 4.遍历函数

void preorder(BTNode *head);

void inorder(BTNode *head);

void postorder(BTNode *head);

  • 算法核心:

  • 1.1中缀表达式转后缀

从左到右扫描

  • 操作符在以下情况时入操作符栈
  1. 操作符栈为空

  2. 栈顶为(

  3. 优先级大于栈顶

  4. 优先级小于栈顶时,把运算符栈顶元素弹到操作数栈直到能入栈为止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值