栈的应用

栈的应用篇1:后缀表达式的计算

栈作为一种运算受限的后进先出的线性表,其应用面很广,最主要的是在于它的记忆功能,在中断,递归函数中运用灵活,今总结栈的一个小应用,即用于后缀表达式的计算,具体过程如下:

#include  
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"<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<
    cout<<"运算结果为: "<return 0;
}

与君共勉~

你可能感兴趣的:(数据结构学习)