栈的理解:

       栈就是一像放在地上的羽毛球桶,现在有各种颜色的羽毛球,你有4个操作,1,把一个羽毛球放在桶里,2,看看桶顶的羽毛球是什么颜色的(你只能看到桶顶的那个),3,把桶顶的羽毛球取出来,4,看看羽毛球桶是空的,满的,还是有羽毛球且不满。

添加一个元素

void push(int x){//给栈加一个为x的元素
    s[++top]=x;
}

删除一个元素

int pop(){//删除堆顶元素
    top--;
    return s[top+1];
}

返回堆顶元素

int top(){//返回堆顶元素
    return s[top];
}

例一:计算逆波兰表达式(我们平时用的是中缀表达式( 1 + 2 ) * ( 5 + 4 ) ,改为逆波兰表达式为1 2 + 5 4 + *。逆波兰表达式的优点在于不用加括号 )

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <queue>

using namespace std;

const int maxn=1e5+10;

int top,s[maxn];

void push(int x){//给栈加一个为x的元素
    s[++top]=x;
}

int pop(){//删除堆顶元素
    top--;
    return s[top+1];
}


int main(){
    int a;
    int b;
    top=0;
    char x[maxn];
    while(scanf("%s",x)!=EOF){
        if(x[0]=='+'){
            a=pop();
            b=pop();
            push(a+b);
        }else if(x[0]=='-'){
            b=pop();
            a=pop();
            push(a-b);
        }else if(x[0]=='*'){
            a=pop();
            b=pop();
            push(a*b);
        }else{
            push((int)atoi(x));
        }
    }
    printf("%d\n",pop());
    return 0;
}
01-25 21:52