栈的应用篇1:后缀表达式的计算
栈作为一种运算受限的后进先出的线性表,其应用面很广,最主要的是在于它的记忆功能,在中断,递归函数中运用灵活,今总结栈的一个小应用,即用于后缀表达式的计算,具体过程如下:
#include <iostream>
using namespace std;
#define MAXSIZE 100
/**
函数功能:
计算后缀表达式的值,其中后缀式存于一数组exp中,最后一个字符是'\0',
作为结束符,且假设后缀表达式中的数字只有一位,除法当做整除。
**/
//计算两个数字之间的运算,包括加减乘除运算
int op(int a,char ch,int b)
{
if(ch == '+') return a+b;
if(ch == '-') return a-b;
if(ch == '*') return a*b;
if(ch == '/')
{
if(b == 0)
{
cout<<"ERROR"<<endl;
return 0;
}else
return a/b;
}
}
//后缀式计算函数,利用栈的思想
int comp(char exp[])
{
int i=0,c=0,a=0,b=0;
//构建一个栈并初始化,这种构建方式不浪费空间
int stack[MAXSIZE];
int top = -1;
char OP;
while(exp[i] != '\0') //也可用for循环
{
if(exp[i]>='0' && exp[i]<='9')
stack[++top] = exp[i]-'0'; //将字符型转化成整形并入栈
else
{
OP = exp[i]; //去运算符
b = stack[top--]; //取得第二个操作数,因第二个后入栈
a = stack[top--]; //取得第一个操作数,下同
c = op(a,OP,b); //计算运算结果
stack[++top] = c; //操作结果入栈
}
++i; //自增1
}
return stack[top];
}
int main(void)
{
int vol;
char test[10] = {'4','5','+','6','2','*','+','4','/','\0'};
vol = comp(test);
//cout<<vol<<endl;
cout<<"运算结果为: "<<vol<<endl;
return 0;
}
与君共勉~