栈堆应用
#基础 模拟栈
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10010;
int n;
int stk[N], top;
int main()
{
while (cin>>n, n)
{
top = 0;
while (n -- )
{
char op[2];
scanf("%s", op);
if (*op == 'P')
{
int x;
scanf("%d", &x);
stk[ ++ top] = x;
}
else if (*op == 'O')
{
if (top) top -- ;
}
else
{
if (top) printf("%d\n", stk[top]);
else puts("E");
}
}
puts("");
}
return 0;
}
#弹出序列 压入序列1-n栈空间限制m
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
const int N =1010;
int n,m,k;
int a[N];
bool check()
{
stack<int>stk;
for(int i=1,j=0;i<=n;i++){
stk.push(i);
if(stk.size()>m)return false;
while(stk.size()&&stk.top()==a[j]){
stk.pop();
j++;
}
}
return stk.empty();
}
int main(){
scanf("%d%d%d",&m,&n,&k);
while(k--){
for(int i=0;i<n;i++)scanf("%d",&a[i]);
if(check())puts("YES");
else puts("NO");
}
return 0;
}
最小栈
class MinStack {
public:
stack<int> stk, f;
MinStack() {
}
void push(int x) {
stk.push(x);
if (f.empty() || f.top() >= x) f.push(x);
}
void pop() {
if (stk.top() <= f.top()) f.pop();
stk.pop();
}
int top() {
return stk.top();
}
int getMin() {
return f.top();
}
};