C++数据结构与STL--栈的应用--中缀表达式转后缀表达式

1.输入优先等级和栈优先等级定义:目的,解决右结合表达式问题,例如2^2^2为右结合表达式








2.累计等级与无效表达式分析:
  
   



3.使用栈处理相同或较低优先级的运算符
  Example:a*b/c+d

  






4.处理右结合表达式运算符^
  Example:a^b^c

  


   
5.处理子表达式的左右圆括号。
  Example:处理a*(b+c)中的子表达式(b+c)

  








实现代码:并未包含异常处理
//操作符优先级类
#ifndef op_priority_H
#define op_priority_H


class op_priority
{
private:
int inputPriority;  
//输入优先级 
int stackPriority;  //栈优先级 
char op;  //运算操作符 
public:
op_priority()
{
}

op_priority( char ch):op(ch) //设置运算符的优先级 
{
switch(ch)
{
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用C++ STL中的来实现中缀表达式后缀表达式,可以按照以下步骤进行: 1. 创建一个空的,用于存储运算符。 2. 遍历中缀表达式的每个字符: - 如果是操作数(数字),直接将其输出到后缀表达式。 - 如果是左括号 '(',将其推入中。 - 如果是右括号 ')',则将中的运算符依次弹出并输出到后缀表达式,直到遇到左括号 '('。注意:左括号 '('不输出到后缀表达式,也不入。 - 如果是运算符 (+, -, *, /, ^),则: - 如果为空,或者顶元素为左括号 '(',则将运算符推入中。 - 否则,比较当前运算符与顶运算符的优先级。如果当前运算符的优先级小于或等于顶运算符的优先级,则将顶运算符弹出并输出到后缀表达式,直到为空或者顶运算符为左括号 '(',然后将当前运算符推入中。 3. 遍历完中缀表达式后,如果中还有运算符,依次弹出并输出到后缀表达式。 下面是一个用C++ STL中的实现中缀后缀的示例代码: ```cpp #include <iostream> #include <stack> #include <string> int getPriority(char op) { if (op == '+' || op == '-') return 1; else if (op == '*' || op == '/') return 2; else if (op == '^') return 3; else return 0; } std::string infixToPostfix(const std::string& infix) { std::stack<char> opStack; std::string postfix; for (char ch : infix) { if (isdigit(ch)) { postfix += ch; } else if (ch == '(') { opStack.push(ch); } else if (ch == ')') { while (!opStack.empty() && opStack.top() != '(') { postfix += opStack.top(); opStack.pop(); } if (!opStack.empty() && opStack.top() == '(') { opStack.pop(); } } else { while (!opStack.empty() && getPriority(ch) <= getPriority(opStack.top())) { postfix += opStack.top(); opStack.pop(); } opStack.push(ch); } } while (!opStack.empty()) { postfix += opStack.top(); opStack.pop(); } return postfix; } int main() { std::string infix = "5 + 2 * (3 - 1)"; std::string postfix = infixToPostfix(infix); std::cout << "Infix expression: " << infix << std::endl; std::cout << "Postfix expression: " << postfix << std::endl; return 0; } ``` 在上述示例中,我们定义了一个`getPriority`函数来获取运算符的优先级。`infixToPostfix`函数使用一个循环来遍历中缀表达式的每个字符,并根据字符的类型执行相应的操作。最后,我们通过调用`infixToPostfix`函数将中缀表达式换为后缀表达式,并输出结果。 希望这个示例能帮助你理解如何使用C++ STL中的来实现中缀表达式后缀表达式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值