我们为了简化代码量所以使用stack和queue两个stl库中所提供的函数,所有的函数实现全部和前面所提供的一致
map是一个函数映射库,普通的数组可以看成是int型到int,char等其他类型的映射,而我们可以用map实现char到int的映射,从而实现优先级的定义
思路如下:
需要先将中缀表达式转化为后缀表达式,随后将后缀表达式利用堆栈特性进行计算
定义一个符号堆栈和后缀表达式的计算队列实现存储,当中缀表达式队列中元素是数字时,自动压入队列,如果遇到12等数字依次读入,则能实现1*10+2,更新此数;
定义加法与减法优先级是1,乘法与除法优先级是2,当符号堆栈中有两个符号时比较其优先级,优先级高的自动进入队列,随后当读完以后,自动将符号堆栈中的元素全部pop至队列中
代码如下:
#include <iostream>
#include <cstdio>#include <string>
#include <stack>
#include <queue>
#include <map>
using namespace std;
struct node
{
double num;//操作数
char op;//操作符
bool flag;//true表示操作数,false代表操作符
} ;
string str;
stack <node> s;//操作堆栈
queue <node> q;//后缀表达式序列,入列
map<char,int> op;//确定优先级
void change()//中序修改为后序
{
double num;
node temp;
for(int i=0;i<str.length();)
{
if(str[i]