zoukankan      html  css  js  c++  java
  • [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     }

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

  • 相关阅读:
    线段树
    数据结构<三> 队列
    数据结构<二>双向链表
    数据结构<一>单链表
    扩展欧几里德算法
    90 个 node.js 扩展模块,我们疯了
    nodejs的查询构造器
    express的路由配置优化
    express路由方案
    Redis学习笔记~目录
  • 原文地址:https://www.cnblogs.com/hoppz/p/12591060.html
Copyright © 2011-2022 走看看