博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【算法4】迪杰斯特拉双栈算法处理算术表达式
阅读量:4956 次
发布时间:2019-06-12

本文共 1908 字,大约阅读时间需要 6 分钟。

算法4的语言载体是Java,所以书上算法的实现是以Java语言形式来的。一个非常经典的算法,在这里把他以C++重写一遍,加深印象的同时给广大网友一个参考。

问题描述:

求形如 (1*((2+3)*(4*5)))的算术表达式。

这里运算的优先级都用挎号提现出来了,所以也降低了算法的实现难度。

 

算法思想:

这里定义两个栈,一个栈用来存操作数(aux),另一个栈用来存运算符(ope)

具体步骤:

1.将操作数压入操作数栈;

2.将运算符压入运算符栈;

3.忽略左括号;

4.在遇到右括号得时候弹出一个运算符,弹出所需数量得操作数,并将运算符和操作数的运算结果压入操作数栈。

在处理完最后一个右括号之后,操作数栈上只会有一个值,就是计算结果。

下面给出栈的设计以及测试用例:

栈的设计

#include
using namespace std;template
//栈的模板类定义class MyStack {private: vector
data; int ret; int size;public: MyStack(); //构造函数 void push(Type x);//压栈操作 bool isEmpty(); //判断栈是否为空 Type pop(); //出栈操作 int FetchSize() { return data.size }; //获取栈的大小};template
MyStack
::MyStack(){ ret = 0; size = 0;}template
void MyStack
::push(Type x) { data.push_back(x);}template
bool MyStack
::isEmpty() { return data.empty();}template
Type MyStack
::pop() { if (isEmpty()) { return false; } ret = data.back(); data.pop_back(); return ret;}

算法实现

#include
#include
#include
#include "Stack.h"#include
using namespace std;int main(){ MyStack
ops = MyStack
(); //定义运算符栈 MyStack
vals = MyStack
();//定义操作数栈 string operation; cin >> operation; for (char s:operation) { if (s == '('); else if (s == '+'|| s == '-'|| s == '*'|| s == '/'|| s == 'sqrt') ops.push(s); else if (s == ')') { char op = ops.pop(); double v = vals.pop(); if (op == '+') v = vals.pop() + v; else if (op == '-') v = vals.pop() - v; else if (op == '*') v = vals.pop() * v; else if (op == '/') v = vals.pop() / v; else if (op == 'sqrt') v = sqrt(v); vals.push(v); } else { double d = (int)(s-48); vals.push(d); } } int result = vals.pop(); cout << result << endl; return 0;}

 

转载于:https://www.cnblogs.com/hu-19941213/p/11130508.html

你可能感兴趣的文章
Spring MVC例子
查看>>
jmeter 断言
查看>>
玩玩小爬虫——抓取时的几个小细节
查看>>
error C4996: 'fopen'
查看>>
Windows向Linux上传文件夹
查看>>
20180104-高级特性-Slice
查看>>
6个SQL Server 2005性能优化工具介绍
查看>>
nginx启动、关闭命令、重启nginx报错open() "/var/run/nginx/nginx.pid" failed
查看>>
day14 Python 内置函数、匿名函数和递归函数
查看>>
BZOJ 3097 Hash Killer I
查看>>
UINavigationController的视图层理关系
查看>>
html阴影效果怎么做,css 内阴影怎么做
查看>>
宏观经济
查看>>
译:面试投行的20个Java问题
查看>>
综合练习:词频统计
查看>>
BZOJ1026: [SCOI2009]windy数
查看>>
ASP.NET应用程序和ASP.NET网站所共有的文件: App_Browsers 等
查看>>
ASP.NET杂货店实战视频 VS2010+SQL2008 三层架构设计开发讲解
查看>>
样板操作数
查看>>
64位UBUNTU下安装adobe reader后无法启动
查看>>