队列操作 ——蓝桥杯

来源:互联网 发布:琳琅怎么绑定淘宝账号 编辑:程序博客网 时间:2024/05/20 08:24
问题描述
  队列操作题。根据输入的操作命令,操作队列(1)入队、(2)出队并输出、(3)计算队中元素个数并输出。
输入格式
  第一行一个数字N。
  下面N行,每行第一个数字为操作命令(1)入队、(2)出队并输出、(3)计算队中元素个数并输出。
输出格式
  若干行每行显示一个2或3命令的输出结果。注意:2.出队命令可能会出现空队出队(下溢),请输出“no”,并退出。
样例输入
7
1 19
1 56
2
3
2
3
2
样例输出
19
1
56
0
no
数据规模和约定

  1<=N<=50


#include<queue>中的队列操作如下

back()返回最后一个元素

empty()如果队列空则返回真

front()返回第一个元素

pop()删除第一个元素

push()在末尾加入一个元素

size()返回队列中元素的个数

queue 的基本操作举例如下:

queue入队,如例:q.push(x); 将x 接到队列的末端。

queue出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。

访问queue队首元素,如例:q.front(),即最早被压入队列的元素。

访问queue队尾元素,如例:q.back(),即最后被压入队列的元素。

判断queue队列空,如例:q.empty(),当队列空时,返回true。

访问队列中的元素个数,如例:q.size()


itoa用法如下:

itoa是广泛应用的非标准C语言扩展函数,通常在<stdlib.h>头文件中包含这个函数。
原型:char*itoa(int value,char*string,int radix);
int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等

atoi用法如下:


atoi (表示 alphanumeric to integer)是把字符串转换成整型数的一个函数,


原型:intatoi(const char *nptr);

参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零。包含在头文件stdlib.h中。
这个题的思路就是根据题目要求对队列进行操作,把要输出的数放到一个string数组里,如果输出的是一个数字,就把数字转化为字符串。
1.最简单的方法当然是直接输出
#include<iostream>   #include<cstdlib>   #include<queue>  #include<cstring>     using namespace std;  queue <int> q;  int main()    {        int n,m,t,k=0,flag=1;//k用来统计要打印字符串的个数,n为输入个数,m,t都是临时变量,若输出了一个no,flag置为0      cin>>n;      for(int i=0;i<n;i++)      {          cin>>m;          if(m==1)//当输入为1          {              cin>>t;              q.push(t);          }          if(m==2)//当输入为2          {              if(q.empty()&&flag)//注意一定要加flag判断              {                  cout<<"no"<<endl;                flag=0;              }              else              {                  if(flag)                  {                      cout<<q.front()<<endl;                     q.pop();                  }              }          }          if(m==3)          {              if(flag)                  cout<<q.size()<<endl;                  }      }          return 0;  }  

2.用一个数组把结果保存起来最后一块输出,建议用第一种,这个需要用到itoa函数(第二种只是为了介绍分组输出)
#include<iostream> #include<cstdlib> #include<queue>#include<cstring> using namespace std;queue <int> q;int main()  {  int n,m,t,k=0,flag=1;//k用来统计要打印字符串的个数,n为输入个数,m,t都是临时变量,若输出了一个no,flag置为0char *s=new char;//s用来当itoa中的一个参数,注意一定要申请空间string a[51];//储存要打印的字符串cin>>n;for(int i=0;i<n;i++){cin>>m;if(m==1)//当输入为1{cin>>t;q.push(t);}if(m==2)//当输入为2{if(q.empty()&&flag)//注意一定要加flag判断{a[k++]="no";flag=0;}else{if(flag){a[k++]=itoa(q.front(),s,10);q.pop();}}}if(m==3){if(flag)a[k++]=itoa(q.size(),s,10);}}for(int i=0;i<k;i++)cout<<a[i]<<endl;return 0;}                                                
2 0