45fan.com - 路饭网
首页
路由器设置
无线路由器
路由器密码
网络频道
手机频道
电脑频道
图库频道
问答中心
搜索:
智能搜索
搜索标题
您的位置
:
主页
>
手机频道
> 阅读资讯:如何用栈完成表达式计算?
如何用栈完成表达式计算?
2016-08-25 12:27:24 来源:www.45fan.com 【
大
中
小
】
如何用栈完成表达式计算?
/**/
//////////////////////////////
/
///
表达式计算
///
/数据结构:栈
///
/作者:ZZJ_4Ever
//////////////////////////////
/
#include
<
iostream
>
#include
<
stack
>
#include
<
string
>
#include
<
assert.h
>
using
namespace
std;
stack
<
double
>
data_stack;
stack
<
char
>
char_stack;
int
PRI(
char
&
ch)
...
{
if
(ch
==
'
)
'
)
...
{
return
1
;}
else
if
(ch
==
'
+
'
||
ch
==
'
-
'
)
...
{
return
2
;}
else
if
(ch
==
'
*
'
||
ch
==
'
/
'
)
...
{
return
3
;}
else
return
0
;
}
/**/
/*
2.扫描到操作符,与操作符栈的顶端操作符进行比较,
如果优先级小或相等,则弹出数据和操作符进行计算,将结果送入数据栈;
如果优先级较大,则进操作符栈;
如果是’(‘直接进栈,如果是’)’,遇到’(‘则抵消.
*/
void
Exc_stack()
...
{
double
result_temp;
assert(char_stack.size()
>=
1
&&
data_stack.size()
>=
1
);
double
temp1
=
data_stack.top();
data_stack.pop();
double
temp2
=
data_stack.top();
data_stack.pop();
char
popchar
=
char_stack.top();
char_stack.pop();
if
(popchar
==
'
+
'
)
result_temp
=
temp2
+
temp1;
else
if
(popchar
==
'
-
'
)
result_temp
=
temp2
-
temp1;
else
if
(popchar
==
'
*
'
)
result_temp
=
temp2
*
temp1;
else
if
(popchar
==
'
/
'
)
result_temp
=
temp2
/
temp1;
data_stack.push(result_temp);
}
void
push_charinto(
char
&
ch)
...
{
if
(ch
==
'
(
'
)
//
如果是’(‘直接进栈
char_stack.push(ch);
else
if
(char_stack.empty())
...
{
char_stack.push(ch);
}
else
if
(PRI(ch)
>
PRI(char_stack.top()))
//
如果优先级较大,则进操作符栈
...
{
char_stack.push(ch);
}
//
扫描到操作符
else
//
如果优先级小或相等,则弹出数据和操作符进行计算,将结果送入数据栈
...
{
Exc_stack();
if
(ch
==
'
)
'
)
//
如果是’)’,遇’(‘直接弹出.
...
{
while
(char_stack.top()
!=
'
(
'
)
//
操作括号内的内容直到遇到'('为止
...
{
Exc_stack();
}
char_stack.pop();
}
else
//
将自己压入栈
char_stack.push(ch);
}
}
void
push_datainto(
double
&
db)
...
{
data_stack.push(db);
}
void
main()
...
{
string
str;
while
(
1
)
...
{
bool
flag
=
false
;
double
ret
=
0.0
;
double
n;
cout
<<
"
在此输入表达式:
"
;
//
读入
cin
>>
str;
//
处理
//
筛选
/**/
////////////////////////
///
//开始扫描
/////////////////////
//
for
(
int
i
=
0
;i
<
str.length();i
++
)
...
{
if
(str[i]
>=
'
0
'
&&
str[i]
<=
'
9
'
)
...
{
if
(
!
flag)
ret
=
ret
*
10
+
str[i]
-
'
0
'
;
else
...
{
ret
=
ret
+
(str[i]
-
'
0
'
)
/
n;
n
*=
10
;
}
}
else
if
(str[i]
==
'
.
'
)
...
{
n
=
10
;
flag
=
true
;
}
else
...
{
if
(ret
!=
0
||
str[i
-
1
]
==
'
0
'
)
push_datainto(ret);
ret
=
0.0
;
flag
=
false
;
push_charinto(str[i]);
}
}
//
如果最后一个数字还没有压入栈
if
(ret
!=
0
||
str[i
-
1
]
==
'
0
'
)push_datainto(ret);
//
3.扫描数据完成后,依次退栈并进行计算
assert(
!
data_stack.empty()
||!
char_stack.empty());
while
(data_stack.size()
!=
1
)
...
{
Exc_stack();
}
//
doublerre=data_stack.top();
cout
<<
"
结果:
"
<<
data_stack.top()
<<
endl;
data_stack.pop();
}
}
本文地址:
http://www.45fan.com/a/luyou/67401.html
Tags:
表达式
计算
完成
编辑:路饭网
上一篇:
很有用的一段代码大全
下一篇:
Eclipse入门知识介绍
相关文章列表
使用苹果手机开启计算日历中的周数的方法
如何计算余额宝提现手续费?
崩坏3防御计算及属性如何?
使用手机百度完成火车票离线抢购的方法技
支付宝计算存款利率的步骤
正则表达式在IOS中的应用有哪些?
如何计算水仙花数?
计算机电源的详细知识解说
如何完成一台裸机?
在好贷app中计算房贷还多少钱的办法
推广内容
推荐阅读
热门推荐
推荐文章
·
新用户必看的安卓系统常见问题及解决方法
·
什么是小米助手?小米助手有哪些功用,怎
·
发烧友们需要了解的小米助手常见问题及解
·
流量消耗太快?教你如何关闭iOS7自动更新
·
解读小米随身Wifi的原理,了解它在台式机
·
被电话骚扰很恼火?教你iphone iOS 6系统
·
590元酷派8295手机怎么样?4核5英寸QHD大
·
安卓手机的内存越来越小怎么办?
·
OPPO N1手机拆机评测,其可旋转摄像头很
·
关闭小米2手机防误触模式开启和关闭的操
·
iphone手机查看office文件的方法
·
哪种手机屏幕的材质比较好?
关于我们
|
联系我们
|
友情链接
|
网站地图
|
Sitemap
|
App
|
返回顶部