「这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战」
栈
今天用静态数组模拟栈,相比于c++中一般的stl,静态数组具有灵活,以更小的开支达成效果等优点
各个基本操作
// 插入数字
stk[ ++ tt] = x;
// 弹出
tt --;
// 判断栈是否为空
if(tt > 0) not empty;
else empty;
// 取栈顶元素
stk[tt];
模板题目
实现一个栈,栈初始为空,支持四种操作:
push x– 向栈顶插入一个数 xx;pop– 从栈顶弹出一个数;empty– 判断栈是否为空;query– 查询栈顶元素。
现在要对栈进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。
输入格式
第一行包含整数 M,表示操作次数。
接下来 M 行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。
输出格式
对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。
其中,empty 操作的查询结果为 YES 或 NO,query 操作的查询结果为一个整数,表示栈顶元素的值。
数据范围
1≤M≤100000 1≤x≤109 所有操作保证合法。
输入样例:
10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty
输出样例:
5
5
YES
4
NO
代码
#include<iostream>
using namespace std;
const int N = 100010;
int q[N],idx;
int main()
{
int m,x;
cin >> m;
while(m --)
{
string ch;
cin >> ch;
if(ch == "push")
{
cin >> x;
q[++ idx] = x;
}
else if(ch == "pop")
{
idx --;
}
else if(ch =="empty")
{
if(! idx) puts("YES");
else puts("NO");
}
else if(ch == "query")
{
cout << q[idx] << endl;
}
}
}
队列
基本操作
// 在队尾插入元素,在队头弹出元素
int q[N],hh,tt = -1;
// 插入
q[ ++ tt] = x;
// 弹出
hh ++;
// 判断队列是否为空
if(hh <= tt) not empty;
else empty
// 取出队头元素
q[hh]
模板题目
实现一个队列,队列初始为空,支持四种操作:
push x– 向队尾插入一个数 xx;pop– 从队头弹出一个数;empty– 判断队列是否为空;query– 查询队头元素。
现在要对队列进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。
输入格式
第一行包含整数 M,表示操作次数。
接下来 M 行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。
输出格式
对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。
其中,empty 操作的查询结果为 YES 或 NO,query 操作的查询结果为一个整数,表示队头元素的值。
数据范围
1≤M≤100000, 1≤x≤109 所有操作保证合法。
输入样例:
10
push 6
empty
query
pop
empty
push 3
push 4
pop
query
push 6
输出样例:
NO
6
YES
4
代码
#include<iostream>
using namespace std;
const int N = 100010;
int q[N],hh,tt=-1;
int main()
{
int m;
cin >> m;
hh = 0;
while(m -- )
{
string ch;
int x;
cin >> ch;
if(ch == "push")
{
cin >> x;
q[++tt] = x;
}
else if(ch == "pop")
{
hh++;
}
else if(ch == "empty")
{
if(hh <= tt) puts("NO");
else puts("YES");
}
else if(ch == "query")
{
cout << q[hh] << endl;
}
}
return 0;
}