#include<iostream>
#include<stdio.h>
#include<string.h>
#include<malloc.h>
using namespace std;
typedef struct StackNode
{
int data;
struct StackNode *next;
} StackNode,*LinkStack;
void InitStack(LinkStack &S) //构造一个空栈
{
S=NULL;
printf("\t\t\t空栈创建成功\n");
}
void Push(LinkStack &S,int e) //入栈
{
StackNode *p;
p= new StackNode;
//p=(StackNode *)malloc(sizeof(StackNode)); //生成新节点
p->data=e;
p->next=S;
S=p;
}
int GetTop(LinkStack S) //返回栈顶元素
{
if(S!=NULL) //栈非空
return S->data;
}
int In(char i)
{
//int a;
switch(i)
{
case '+' : return 1;
case '-' : return 1;
case '*' : return 1;
case '/' : return 1;
case '(' : return 1;
case ')' : return 1;
case ' ' : return 1;
case '$': return 1;
default : return 0;
}
}
int Operate(int a,char theta,int b)
{
switch(theta)
{
case '+': return a+b;
case '-': return a-b;
case '*': return a*b;
case '/': return a/b;
}
}
void Pop(LinkStack &S,int &e) //出栈
{
StackNode *p;
if(S==NULL)
{
printf("栈为空");
}
e=S->data;
p=S;
S=S->next;
delete p;
}
int EvaluateExpression()
{
char theta,ch;
int a,b;
int m=0;
// LinkStack OPTR; //运算符栈
LinkStack OPND; //运算数栈
InitStack(OPND);
// InitStack(OPTR);
Push(OPND,'#');
printf("请输入后缀表达式(并以$结尾):\n");
ch=getchar();
while(ch!='$')
{
if(!In(ch)) //判断读取到的字符是不是数字
{ //字符是数字
while(!In(ch))
{
ch=ch-'0';
m=m*10+ch;
ch=getchar();
}
if(m!=0)
{
Push(OPND,m);
m=0;
}
}
else //读取到的字符是空格或者四则运算符
{
if(ch==' ') //判断是不是空格
{
ch=getchar();
}else //读取到的字符是四则运算符号
{
Pop(OPND,b);
Pop(OPND,a);
Push(OPND,Operate(a,ch,b));
ch=getchar();
}
}
}
return GetTop(OPND); //返回最终计算值
}
int main()
{
int num;
num=EvaluateExpression();
cout<<num;
}
后缀表达式计算器
最新推荐文章于 2024-08-01 19:42:24 发布