概述
很朴素的想法就是开个数组,如何疯狂判断这组有没有,有的话插入,没有在后面插入,显然复杂度有点高
那如果把其的总队列与分队列分开,则上面插入加复杂度的问题就解决咯,
就四种情况:
插入
如果原来有,则直接在分队列插入该数
否则,则再在队列末插入该数所在的队列
删除
直接得总队列的第一个队列是谁,直接删分队列中第一个数
如果分队列中的该队列的数被删完了,则在总队列将该队列删去
#include <bits/stdc++.h>
using namespace std;
const int MA = 1e6+10;
int H[MA]; //记录每个数在哪个序列
queue <int> Zq;//总序列
queue <int> Fq[1005];//分序列
void Qclear(){
while(!Zq.empty()) Zq.pop();
for (int i = 0; i < 1005;i++){
while(!Fq[i].empty()) Fq[i].pop();
}
}
int main()
{
int n,kase = 0;
while (cin>>n , n){
memset(H,0,sizeof(H));
Qclear();
for (int i = 1; i <= n; i++){
int m,k;
scanf("%d",&m);
while(m--){
scanf("%d",&k);
H[k] = i;
}
}
//读命令
cout<<"Scenario #"<<++kase<<endl;
string commod;
while(cin>> commod,commod != "STOP"){
if(commod == "ENQUEUE"){
int k,lie;
scanf("%d",&k);
lie = H[k];
if(Fq[lie].empty()) Zq.push(lie); //空则总加
Fq[lie].push(k);
}
else{
int lie = Zq.front();
cout<<Fq[lie].front()<<endl;
Fq[lie].pop();
if(Fq[lie].empty()) Zq.pop();//空则总删
}
}
cout<<endl;
}
return 0;
}
最后
以上就是强健西牛为你收集整理的进阶指南---小组队列插入删除的全部内容,希望文章能够帮你解决进阶指南---小组队列插入删除所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复