#include<iostream>
#include<string>
#include<cctype>
using namespace std;
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef char SElemType;
typedef char ElemType;
struct STACK
{
SElemType * base;
SElemType * top;
int stacksize;
};
int InitStack(STACK &S);
char GetTop(STACK &S);
int Push (STACK &S,SElemType e);//插入e为新的栈顶元素
int Pop (STACK &S,STACK &H,int m);//若栈不空,则删除S的栈顶元素
int EmptyStack(STACK &S);//判断栈S是否为空
int cmp(char a,char b);//判断运算符a的优先级是否高于运b
void cmp(char a,char b,STACK &f,STACK &h);//判断运算符a和b的优先级
int main()
{
STACK h1;
InitStack(h1);//定义并初始化逆序的逆波兰式栈h1
STACK h2;
InitStack(h2);//定义并初始化正序的逆波兰式栈h2
STACK fh;
InitStack(fh);//定义并初始化符号栈fh
Push(fh,'#');//将#压入符合栈
string z;
int a;
kind1:
cout<<"***************************************"<<endl;
cout<<"请输入一个表达式,并以“#”结束:"<<endl;
cout<<"***************************************"<<endl;
cin>>z;
for(int i=0;i<z.size ();i++)//对输入表达式的每个字符进行判断
{
if(isalnum(z[i]))//如果当前字符是字母或数字
Push(h1,z[i]);//将当前字符压入逆序的逆波兰式栈h1
else if(z[i]=='(')//如果当前字符是"("
Push(fh,'(');//将当前字符压入符号栈fh
else if(z[i]==')')//如果当前字符是")"
{
while(GetTop(fh)!='(')//一直删除符号栈fh的栈顶元素只至"("
Pop(fh,h1,1); //并将其压入逆序的逆波兰式栈h1
Pop(fh,
、、、、、、、、、、