关于队列的知识;

使用queue之前,要先利用构造函数一个队列对象,才可以进行元素的入队,出队,取队首和队尾等操作;

(1).queue() queue<int> q; 或者 queue<int>Q[10000];

 (2).queue(const queue&) 复制构造函数

 例如:用一行代码利用queue对象q1,创建一个以双向链表为底层容器的queue对象q2

queue<int,list<int>>q1;

queue<int,list<int>>q2(q1);

(3).元素入队 函数为:push()例如:q.push(3),意思是将3入队 ,注意队列的大小不预设

(4).元素出队 函数为:pop()例如:q.pop()

(5)。取对头元素  函数为:front()

(6),取队尾元素  函数为:back()

(7)。判断对空  函数为:empty()

(8)。队列的大小  函数为:size()返回队列的当前元素的个数

9.如何实现固定大小的queue队列 

在每一次元素入队列前都判断当前的队列是否满,用双向链表做queue 的底层容器可以实现

优先队列基本上是一样的!只不过优先队列每一次队头元素都是队列中最大的元素!

取队头元素的函数为top()

 

自动机
Time Limit:1sMemory limit:32M
Accepted Submit:217Total Submit:799

Tom博士最近研发了一个自动机,该自动机能够同时处理n个队列。其中,队列的编号为1..n。给定m个操作,模拟该自动机的工作状态。

第一行有2个整数n,m(1≤n, m≤10,000),表示自动机能处理n个队列,接下来m行每行一条操作指令。

每条指令的格式如下:
指令指令说明
INIT将自动机初始化,此时所有的队列清空。
PUSH id val把整数val加入到编号id的队列的尾部。
POP id val输出并删除编号id的队列的队首元素,如果队列为空,则输出“NULL”。

在每条指令中,id的编号在1..n中,val的取值范围为-2 31~2 31。输入数据保证操作的第一条指令都是是INIT。

 

数据输入输出

本题有多组输入数据,你必须处理到EOF为止。

请对输入数据中每条POP指令的结果依次输出一行结果。

输入样例

3 12 INIT PUSH 1 100 POP 2 PUSH 3 300 PUSH 1 200 PUSH 2 -5 POP 2 PUSH 2 -10 POP 1 INIT PUSH 1 7 POP 1

输出样例

NULL -5 100 7

问题解析:看到题目我们就应该知道这一题肯定是用队列解;联想到STL中的queue容器,】

关于队列的知识;

使用queue之前,要先利用构造函数一个队列对象,才可以进行元素的入队,出队,取队首和队尾等操作;

(1).queue() queue<int> q; 或者 queue<int>Q[10000];

 (2).queue(const queue&) 复制构造函数

 例如:用一行代码利用queue对象q1,创建一个以双向链表为底层容器的queue对象q2

queue<int,list<int>>q1;

queue<int,list<int>>q2(q1);

(3).元素入队 函数为:push()例如:q.push(3),意思是将3入队 ,注意队列的大小不预设

(4).元素出队 函数为:pop()例如:q.pop()

(5)。取对头元素  函数为:front()

(6),取队尾元素  函数为:back()

(7)。判断对空  函数为:empty()

(8)。队列的大小  函数为:size()返回队列的当前元素的个数

9.如何实现固定大小的queue队列 

在每一次元素入队列前都判断当前的队列是否满,用双向链表做queue 的底层容器可以实现

例如:

#include<iostream>

#include<list>

#include<queue>

using namespace std;

#define QUEUE_SIZE 50   //固定大小为50

int main()

{

queue<int,list<int>> q;

if(q.size<QUEUE_SIZE)

q.push(51);

if(q.size<QUEUE_SIZE)

q.push(36);

if(q.size<QUEUE_SIZE)

q.push(28);

while(!q.empty())

{

cout<<q.front()<<endl;  //打印51 36 28

q.pop();   //出队

}

return 0;

}

code:

 #include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
int main()
{
 register int i,j;
 int m,n;
 char c[6];
 int x,y;
 while(scanf("%d%d",&n,&m)!=EOF)
 {
  queue<int>Q[10000];
  for(i=0;i<m;i++)
  {
   scanf("%s",&c);
   if(strcmp(c,"INIT")==0)
   {
    for(j=1;j<=n;j++)
    {
        while(!Q[j].empty())
     Q[j].pop();
    }
    continue;
   }
   if(strcmp(c,"PUSH")==0)
   { scanf("%d%d",&x,&y);
      Q[x].push(y);
       continue;         
   }
   if(strcmp(c,"POP")==0)
   {
    scanf("%d",&y);
    if(Q[y].empty())
    {printf("NULL/n");continue;}
    else
     printf("%d/n",Q[y].front());
        Q[y].pop();
   }

  }


 }
 return 0;
}

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐