求逆波兰表达式

本文介绍了逆波兰表达式的基本概念,以及如何使用栈和队列实现逆波兰表达式的解析。在解析过程中,遇到操作数直接入队,左括号入栈,右括号时将栈顶至最近左括号间的运算符入队。根据运算符优先级处理栈中运算符,最后清空栈并将所有元素入队,完成转换。
摘要由CSDN通过智能技术生成

概述

逆波兰表达式即后缀表达式,即将每一运算符都置于其运算对象之后。逆波兰表达式是一种十分有用的表达式,它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。例如(a+b)*(c+d)转换为ab+cd+。

思路

首先定义一个栈和一个队列,栈用于储存运算符,队列用于储存逆波兰表达式。读取字符时,若遇操作数直接加入队列,遇左括号直接压栈,遇右括号则将距离栈顶最近的左括号之间的运算符加入队列(右括号本身不压栈)。若遇运算符需要考虑优先级问题,加减运算符优先级较低,因此取栈顶除括号以外的运算符直接加入队列,直至栈空或遇上括号;乘除运算符优先级较高,因此将栈顶的乘和除运算符加入队列。即将栈内优先级高于当前运算符的元素加入队列,最后将当前运算符压栈。若完成上述步骤后栈内不为空,则将栈内元素依次弹出加入队列。

代码

void Reverse(char *buffer) {
    Stack s; // 用于储存运算符
    Queue q; // 用于储存逆波兰表达式
    InitStack(s);
    InitQueue(q);
    int i = 0;
    char ch;
    Push(s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值