算法提高 队列操作

题描述
  队列操作题。根据输入的操作命令,操作队列(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

#include中的队列操作如下

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>头文件中包含这个函数。
原型:charitoa(int value,charstring,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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int m;
queue<int> q;
int s;

while(n--){

cin>>m;
if(m==1){

cin>>s;
q.push(s);
}
else if(m==2){
if(!q.empty()){
cout<<q.front()<<endl;;
q.pop();

}
else{
cout<<"no"<<endl;
if(n>0){
cin>>m;
n--;
}
return 0;
}
}
else {

cout<<q.size()<<endl;

}
}

}

或者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#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;
}