手动模拟队列(队头指针和队尾指针都从0开始)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
int q[N]; //手写队列
int n;
int hh,tt; //队头指针hh,队尾指针tt
int main()
{
scanf("%d",&n);
while (n--)
{
char s[6]; //建议字符串读入字符
scanf("%s",s);
if (s[0]=='p'&&s[1]=='u')
{
int x;
scanf("%d",&x);
q[tt++]=x; //入队
}
else if (s[0]=='p'&&s[1]=='o')
{
if (hh!=tt)
{
hh++;
}
}
else if (s[0]=='e')
{
if (hh<tt) printf("NO\n"); //不为空的条件是hh<tt
else printf("YES\n");
}
else
{
printf("%d\n",q[hh]);
}
}
return 0;
}
手动模拟队列(头指针从0开始,尾指针从-1开始)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
int q[N]; //手写队列
int n;
int main()
{
scanf("%d",&n);
int hh=0,tt=-1; //队头指针从0开始,队尾指针从-1开始
while (n--)
{
char s[6]; //建议字符串读入字符
scanf("%s",s);
if (s[0]=='p'&&s[1]=='u')
{
int x;
scanf("%d",&x);
q[++tt]=x; //入队,每次要先让队尾指针移动再加入元素
}
else if (s[0]=='p'&&s[1]=='o')
{
if (hh<=tt) //只要队列不为空就可以出队
{
hh++;
}
}
else if (s[0]=='e')
{
if (hh<=tt) printf("NO\n"); //只要队头指针没有超过队尾指针,队列就不为空
else printf("YES\n");
}
else
{
printf("%d\n",q[hh]);
}
}
return 0;
}
STL的队列直接实现,不模拟了(狗头)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int m;
int main()
{
queue<int>q;
scanf("%d",&m);
while (m--)
{
char s[6];
scanf("%s",s);
if (s[0]=='p'&&s[1]=='u')
{
int x;
scanf("%d",&x);
q.push(x);
}
else if (s[0]=='p'&&s[1]=='o')
{
if (!q.empty())
{
q.pop();
}
}
else if (s[0]=='e')
{
if (q.empty())
{
printf("YES\n");
}
else printf("NO\n");
}
else
{
printf("%d\n",q.front());
}
}
return 0;
}