堆栈

我们所说的堆栈其实就是栈这种数据结构。只能在栈顶来进行添加和删除。

第一步:初始化
|_|
|_|
|_|
|_|
|_|
|_| top=0;

第二步:加入一个元素8
|_|
|_|
|_|
|_|
|8| top=1;
|_|

第三步:删除一个元素
|_|
|_|
|_|
|_|
|8|
|_| top=0;

 典型的堆栈的题目是:poj 3250 http://poj.org/problem?id=3250

代码如下:

(不用stl的代码,141ms)

View Code
include "iostream"

#include "string"

#include "algorithm"

using namespace std;

#define maxn 80005

int cow[maxn];

int main()

{

    int n, nn;

    long  long ans=0;

    scanf("%d", &n);

    int h=0, t=0;

    while(n--)

    {

        scanf("%d", &nn);

        while(h>t && cow[h]<=nn) h--;

        ans += h;

        cow[++h]=nn;

    }

    printf("%lld\n", ans);

}

(用了stl的代码,1016ms)

View Code
#include "iostream"

#include "string"

#include "algorithm"

#include "stack"

using namespace std;

int main()

{

    int n, nn;

    long long ans=0;

    cin>>n;

    stack<int> s;

    while(n--)

    {

        cin>>nn;

        while(!s.empty() && s.top()<=nn) s.pop();

        ans += s.size();

        s.push(nn);

    }

    cout<<ans<<endl;

}

 

你可能感兴趣的:(堆栈)