利用堆栈和队列实现计算器

该博客介绍如何利用堆栈和队列来实现一个计算器。首先将中缀表达式转换为后缀表达式,然后通过堆栈处理运算符的优先级。堆栈用于存储符号,队列用于计算。在读取中缀表达式时,数字直接入队,遇到运算符时比较堆栈中符号的优先级,优先级高的进入队列。最后,所有堆栈中的符号弹出到队列中完成计算。
摘要由CSDN通过智能技术生成

我们为了简化代码量所以使用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]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值