栈的基本介绍及应用

1.概念

栈是一种最基本的数据结构,特点为先进后出。虽然栈看似很不常见,但是在生活中却是非常常见的,只是不容易被大家注意到,如叠放着的物品,枪的弹夹等。这里不再过多赘述,直接进入理论部分。

2.实现

栈的组成非常简单,即两部分——栈体和栈首元素。

无论是入栈还是出栈,都只需要对栈首元素进行移动。

模板题B3614 【模板】栈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include<iostream>
using namespace std;

typedef unsigned long long ll;

int T, n, top;
ll s[10000009];

void push(ll x) {s[++top]=x;}
void pop() {top --;}

int main() {
    ios::sync_with_stdio(0);
    cin >> T;
    while (T --) {
        cin >> n;
        top = 0;
        while (n--) {
            string st;
            ll x;
            cin >> st;
            if (st=="push") {
                cin >> x;
                push(x);
            }
            if (st == "query") {
                if (top == 0) cout << "Anguei!\n";
                else cout << s[top] << '\n';
            }
            if (st == "size") {
                cout << top << '\n';
            }
            if (st == "pop") {
                if (top == 0) cout << "Empty\n";
                else pop();
            }
       }
    }
    return 0;
}
View Code

 

3.单调栈

 顾名思义,就是栈内元素单调。但单调递增或单调递减视情况而定。

具体流程为:

首先,根据即将入栈的元素的大小,将栈内元素弹出。

接着,将元素入栈即可。

通过单调栈,可以找到某元素前面或后面比这个数大或小的数是谁。

while (top and a[s[top]] <= a[i]) top--;
if (top == 0) ans[i] = 0;
else ans[i] = s[top];
 s[++top] = i;

 

posted @ 2023-09-24 22:14  SouthernWind  阅读(121)  评论(0)    收藏  举报