目录
队列
队列是一个先进先出的数据结构。
成员函数
queue<int> q;
q.push(x) 插入
q.pop() 删除队首元素
q.front() 获取队首元素
q.back() 获取队尾元素
q.empty() 判空
q.size() 队列大小
优先队列
优先级队列(priority_queue)其实不满足先进先出的条件,更像是数据类型中的“堆”。优先级队列每次出队的元素是队列中优先级最高的那个元素,而不是队首的元素。这个优先级可以通过元素的大小等进行定义。比如定义元素越大优先级越高,那么每次出队,都是将当前队列中最大的那个元素出队。默认的是一个大顶堆。
小顶堆声明:priority_queue<int,vector<int>,greater<int> >q;
成员函数
push() 将新元素插入优先队列。
pop() 将优先级最高的元素从队列中删除。
top() 寻址优先队列的最顶层元素。
size() 返回大小。
empty() 判空
swap() 将优先队列的元素与具有相同类型和大小的另一个队列交换。
emplace() 在队列顶部插入一个新元素。
双端队列
两端都可操作。
成员函数
push_front(x) 在队首插入元素
push_back(x) 在队尾插入元素
pop_back() 删除队尾元素
pop_front() 删除队首元素
front() 获取队首元素
back() 获取队尾元素
size() 队列大小
empty() 判空
Team Queue
ENQUEUE x -将元素x输入到团队队列中
DEQUEUE -处理第一个元素并将其从队列中移除停止
若该团队中已有元素存在,那么就插入到团队元素之后,否则直接插入到最后
代码
#include<iostream>
#include<set>
#include<queue>
#include<vector>
#include<stack>
#include<map>
#include<cstring>
#include<algorithm>
#include<cmath>
#define int long long
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int N=1010;
int a[N];
void solve()
{
int t,k=1;
while(cin>>t&&t!=0)
{
printf("Scenario #%d\n",k++);
int n,x;
string s;
map<int,int> mp;
for(int i=1;i<=t;i++){
cin>>n;
for(int j=1;j<=n;j++){
cin>>x;
mp[x]=i;
}
}
queue<int> q[1010],que;
int f=1,i=1;
memset(a,0,sizeof(a));
while(cin>>s&&s!="STOP")
{
if(s=="ENQUEUE"){
cin>>x;
q[mp[x]].push(x);
if(!a[mp[x]]){
que.push(mp[x]);
a[mp[x]]=1;
}
}
else{
cout<<q[que.front()].front()<<endl;
q[que.front()].pop();
if(q[que.front()].empty()){
a[que.front()]=0;
que.pop();
}
}
}
cout<<endl;
}
}
signed main()
{
int T=1;
while(T--)
{
solve();
}
return 0;
}