想了解栈可以看看这篇文章:
栈的简单实现——顺序栈
逆波兰表达式
逆波兰表达式是一种将运算符写在操作数后面的一种描述方法。
比如:
(1+2)*(3+4) //中缀表达式
写为逆波兰表达式就是:1 2 + 3 4 + *
代码实现:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 100
int stack[MAX], top;
int push(int num){ //入栈
stack[++top] = num;
}
int pop(){ //出栈
return stack[top--];
}
int main(){
char s[10];
int a, b;
top = 0; //栈顶指针初始化
while(scanf("%s", s) != EOF){
if(s[0] == '+'){
a = pop();
b = pop();
push(a+b);
}
else if(s[0] == '-'){
a = pop();
b = pop();
push(a-b);
}
else if(s[0] == '*'){
a = pop();
b = pop();
push(a*b);
}
else{
push(atoi(s));
}
}
printf("%d", pop());
return 0;
}
结果:
注意:读入采用 while 语句,利用 scanf 的返回值判断是否有数据输入 ,
如果结束输入,以 ctrl+z 结束输入