/*
1、 从左往右扫描下一个元素,直到处理完所有元素
2、 若扫描到操作数则入栈,并回到1,否则执行3,
3、 若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到1。
*/
#include<stdio.h>
#include<stdlib.h>
#define Maxsize 50
typedef struct stack{
char data[Maxsize];
int top;
}Stack;
/*
以下为栈的基本操作
*/
bool IsFull(Stack &s){
if(s.top+1 == Maxsize){
return true;
}
return false;
}
bool Isempty(Stack &s){
if(s.top == -1){
return true;
}
return false;
}
void InitStack(Stack &s){
s.top = -1;
}
bool PushStack(Stack &s,char data){
if(IsFull(s)){
return false;
}
s.data[++s.top] = data;
return true;
}
bool PopStack(Stack &s,char &x){
if (Isempty(s))
{
return false;
}
x = s.data[s.top--];
return true;
}
bool GetTop(Stack &s,char &x){
if(Isempty(s)){
return false;
}
x = s.data[s.top];
return true;
}
int length(char str[]){
int length = 0;
int i = 0;
while(str[i] != '\0'){
i++;
length++;
}
return length;
}
/*
以下为实现函数
*/
bool IsNumber(char a){
if(a >= '0' && a <= '9'){
return true;
}
return false;
}
bool lastnum(Stack &s,char str[],char &data){
int len = length(str);
char a,b,c;
int x,y ;
for(int i = 0;i<len;i++){
if(IsNumber(str[i])){
PushStack(s,str[i]);
}
else{
PopStack(s,b);
PopStack(s,a);
if(str[i] == '+'){
x = a - '0';
y = b - '0';
x = x + y;
}else if(str[i] == '-'){
x = a - '0';
y = b - '0';
x = x - y;
}else if(str[i] == '*'){
x = a - '0';
y = b - '0';
x = x * y;
}else if(str[i] == '/'){
x = a - '0';
y = b - '0';
x = x / y;
}
c = x + 48;
PushStack(s,c);
}
}
PopStack(s,data);
}
int main(){
Stack s;
InitStack(s);
char data;
char str[] = "831-5*+";
int len = length(str);
lastnum(s,str,data);
int zdk = data - '0';
printf("%d",zdk);
}