[acm]循环队列(不是自己写queue)

这是个很简单的用c++ stl实现的queue,不是用class重新写一次,这个算法可以用于一些数字的循环筛选中

思路:

首先还是用stl来创建一个queue

1 queue<int> a

因为queue的pop机制是删除队首的元素,而我们在进行筛选的时候可能数字都是在队列中间的所以直接pop是行不通的所以我们就可以通过每次循环都判断队首是不是要筛选的元素,都先出队列,如果不是的话我们就又再次入队列,这样就实现了一轮循环了。

下图,假设我们要每计数4次,就要踢出一个元素:

下一个元素就是2,同样的道理.........

代码实现:

 1 int cnt=1;
 2     while(1){
 3         if(a.size()==1){//判断最后剩下一个数就停止
 4             break;
 5         }
 6         int temp;//先存着,如果是就不要了,如果不是就又入队
 7         temp=a.front();
 8         a.pop();
 9         if(cnt==4){
10             cnt=1;
11             continue;
12         }
13         else{
14             a.push(temp);
15             cnt++;
16         }
17     }

这个算法呢,只适用于队列较小的时候,如果数字太大肯定就要超时的。

原文地址:https://www.cnblogs.com/hoppz/p/12591060.html