目录
1.前言
此算法比较简单易懂,只需了解栈与队列的思想即可。
2.栈的模拟
题目出自:https://www.acwing.com/problem/content/830/
#include <iostream>
using namespace std;
const int N = 100010;
int e[N];
int main()
{
int m;
cin>>m;
//tt表示栈顶
int tt = -1;
string op;
while(m--)
{
int x;
cin>>op;
//栈顶插入一个元素
if(op=="push")
{
cin>>x;
e[++tt]=x;
}
//栈顶弹出一个元素
else if(op=="pop")
{
tt--;
}
//判断栈是否为空
else if(op=="empty")
{
if(tt>=0)
{
printf("NO\n");
}
else
{
printf("YES\n");
}
}
//查询栈顶元素
else if(op=="query")
{
printf("%d\n",e[tt]);
}
}
return 0;
}
3.队列的模拟
题目出自:https://www.acwing.com/problem/content/831/
#include <iostream>
using namespace std;
const int N = 100010;
int e[N];
int main()
{
int m;
cin >> m;
//hh为队头,tt为队尾
int hh = 0, tt = -1;
while (m--)
{
string op;
cin >> op;
int x;
//队尾插入一个数
if (op == "push")
{
cin >> x;
e[++tt] = x;
}
//队头弹出一个元素
else if (op == "pop")
{
hh++;
}
//判断是否为空
else if (op == "empty")
{
if (hh > tt)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
//查询队头元素
else if (op == "query")
{
printf("%d\n", e[hh]);
}
}
return 0;
}
4.结语
到这里,本篇就结束了,以后会向着更复杂的结构进行模板总结。希望大家多多支持哦。