我是靠谱客的博主 强健西牛,最近开发中收集的这篇文章主要介绍进阶指南---小组队列插入删除,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

很朴素的想法就是开个数组,如何疯狂判断这组有没有,有的话插入,没有在后面插入,显然复杂度有点高
那如果把其的总队列与分队列分开,则上面插入加复杂度的问题就解决咯,
就四种情况:

插入

如果原来有,则直接在分队列插入该数
否则,则再在队列末插入该数所在的队列

删除

直接得总队列的第一个队列是谁,直接删分队列中第一个数
如果分队列中的该队列的数被删完了,则在总队列将该队列删去

#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;
}

最后

以上就是强健西牛为你收集整理的进阶指南---小组队列插入删除的全部内容,希望文章能够帮你解决进阶指南---小组队列插入删除所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部