栈的基本介绍及应用
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; }
3.单调栈
顾名思义,就是栈内元素单调。但单调递增或单调递减视情况而定。
具体流程为:
首先,根据即将入栈的元素的大小,将栈内元素弹出。
接着,将元素入栈即可。
通过单调栈,可以找到某元素前面或后面比这个数大或小的数是谁。
while (top and a[s[top]] <= a[i]) top--; if (top == 0) ans[i] = 0; else ans[i] = s[top]; s[++top] = i;

浙公网安备 33010602011771号