如何用栈完成表达式计算?

如何用栈完成表达式计算?

如何用栈完成表达式计算?如何用栈完成表达式计算?///////////////////////////////
如何用栈完成表达式计算?
///表达式计算
如何用栈完成表达式计算?
////数据结构:栈
如何用栈完成表达式计算?
////作者:ZZJ_4Ever
如何用栈完成表达式计算?
///////////////////////////////

如何用栈完成表达式计算?
如何用栈完成表达式计算?#include<iostream>
如何用栈完成表达式计算?#include<stack>
如何用栈完成表达式计算?#include<string>
如何用栈完成表达式计算?#include<assert.h>
如何用栈完成表达式计算?usingnamespacestd;
如何用栈完成表达式计算?
如何用栈完成表达式计算?stack
<double>data_stack;
如何用栈完成表达式计算?stack
<char>char_stack;
如何用栈完成表达式计算?
intPRI(char&ch)
如何用栈完成表达式计算?如何用栈完成表达式计算?
{
如何用栈完成表达式计算?如何用栈完成表达式计算?
if(ch==')'){return1;}
如何用栈完成表达式计算?如何用栈完成表达式计算?elseif(ch=='+'||ch=='-'){return2;}
如何用栈完成表达式计算?如何用栈完成表达式计算?elseif(ch=='*'||ch=='/'){return3;}
如何用栈完成表达式计算?elsereturn0;
如何用栈完成表达式计算?}

如何用栈完成表达式计算?如何用栈完成表达式计算?/*
如何用栈完成表达式计算?2.扫描到操作符,与操作符栈的顶端操作符进行比较,
如何用栈完成表达式计算?如果优先级小或相等,则弹出数据和操作符进行计算,将结果送入数据栈;
如何用栈完成表达式计算?如果优先级较大,则进操作符栈;
如何用栈完成表达式计算?如果是’(‘直接进栈,如果是’)’,遇到’(‘则抵消.
如何用栈完成表达式计算?
*/

如何用栈完成表达式计算?voidExc_stack()
如何用栈完成表达式计算?如何用栈完成表达式计算?
{
如何用栈完成表达式计算?
如何用栈完成表达式计算?
doubleresult_temp;
如何用栈完成表达式计算?assert(char_stack.size()
>=1&&data_stack.size()>=1);
如何用栈完成表达式计算?
doubletemp1=data_stack.top();
如何用栈完成表达式计算?data_stack.pop();
如何用栈完成表达式计算?
doubletemp2=data_stack.top();
如何用栈完成表达式计算?data_stack.pop();
如何用栈完成表达式计算?
charpopchar=char_stack.top();
如何用栈完成表达式计算?char_stack.pop();
如何用栈完成表达式计算?
if(popchar=='+')
如何用栈完成表达式计算?result_temp
=temp2+temp1;
如何用栈完成表达式计算?
elseif(popchar=='-')
如何用栈完成表达式计算?result_temp
=temp2-temp1;
如何用栈完成表达式计算?
elseif(popchar=='*')
如何用栈完成表达式计算?result_temp
=temp2*temp1;
如何用栈完成表达式计算?
elseif(popchar=='/')
如何用栈完成表达式计算?result_temp
=temp2/temp1;
如何用栈完成表达式计算?data_stack.push(result_temp);
如何用栈完成表达式计算?}

如何用栈完成表达式计算?voidpush_charinto(char&ch)
如何用栈完成表达式计算?如何用栈完成表达式计算?
{
如何用栈完成表达式计算?
if(ch=='(')//如果是’(‘直接进栈
如何用栈完成表达式计算?char_stack.push(ch);
如何用栈完成表达式计算?
elseif(char_stack.empty())
如何用栈完成表达式计算?如何用栈完成表达式计算?
{
如何用栈完成表达式计算?char_stack.push(ch);
如何用栈完成表达式计算?
如何用栈完成表达式计算?}

如何用栈完成表达式计算?elseif(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);
如何用栈完成表达式计算?}

如何用栈完成表达式计算?}

如何用栈完成表达式计算?voidpush_datainto(double&db)
如何用栈完成表达式计算?如何用栈完成表达式计算?
{
如何用栈完成表达式计算?
如何用栈完成表达式计算?data_stack.push(db);
如何用栈完成表达式计算?}

如何用栈完成表达式计算?voidmain()
如何用栈完成表达式计算?如何用栈完成表达式计算?
{
如何用栈完成表达式计算?
stringstr;
如何用栈完成表达式计算?
如何用栈完成表达式计算?
while(1)
如何用栈完成表达式计算?如何用栈完成表达式计算?
{
如何用栈完成表达式计算?
boolflag=false;
如何用栈完成表达式计算?
doubleret=0.0;
如何用栈完成表达式计算?
doublen;
如何用栈完成表达式计算?cout
<<"在此输入表达式:";
如何用栈完成表达式计算?
//读入
如何用栈完成表达式计算?cin>>str;
如何用栈完成表达式计算?
//处理
如何用栈完成表达式计算?
如何用栈完成表达式计算?
//筛选
如何用栈完成表达式计算?如何用栈完成表达式计算?////////////////////////
如何用栈完成表达式计算?/////开始扫描
如何用栈完成表达式计算?
///////////////////////

如何用栈完成表达式计算?for(inti=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;
如何用栈完成表达式计算?}

如何用栈完成表达式计算?}

如何用栈完成表达式计算?elseif(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();
如何用栈完成表达式计算?}

如何用栈完成表达式计算?}

如何用栈完成表达式计算?