模拟队列(c++题解)

实现一个队列,队列初始为空,支持四种操作:

  1. push x – 向队尾插入一个数 xx;
  2. pop – 从队头弹出一个数;
  3. empty – 判断队列是否为空;
  4. query – 查询队头元素。

现在要对队列进行 MM 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。

输入格式

第一行包含整数 M,表示操作次数。

接下来 M 行,每行包含一个操作命令,操作命令为 push xpopemptyquery 中的一种。

输出格式

对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。

其中,empty 操作的查询结果为 YES 或 NOquery 操作的查询结果为一个整数,表示队头元素的值。

数据范围

1≤M≤100000,
1≤x≤109,
所有操作保证合法。

输入样例:

10
push 6
empty
query
pop
empty
push 3
push 4
pop
query
push 6

输出样例:

NO
6
YES
4

_____________________________________________________________________________

一如既往的用数组模拟队列

写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

不习惯用

_____________________________________________________________________________ 

题目要求的: 

#include 
using namespace std;
int que[1000005],a=1,b,n,y;
string x;
void push(int x){将x加入队尾
	que[++b]=x;
}
void pop(){删除队首
	a++;
}
void query(){输出队首元素
	cout<>n;
    for(int i=1;i<=n;i++){
    	cin>>x;
    	if(x[0]=='p'&&x[1]=='u'){
    		cin>>y;
    		push(y);
		}
		else if(x[0]=='p')pop();
		else if(x[0]=='q')query();
		else if(x[0]=='e')empty();
	}
}

 修改了query并增添了一些功能:

#include 
using namespace std;
int que[1000005],a=1,b,n,y;a表示对首的位置,b表示队尾的位置
string x;
void push(int x){将x加入队尾
	que[++b]=x;
}
void pop(){删除队首
	a++;
}
void front(){输出队首元素
	cout<>n;
    for(int i=1;i<=n;i++){
    	cin>>x;
    	if(x[0]=='p'&&x[1]=='u'){
    		cin>>y;
    		push(y);
		}
		else if(x[0]=='p')pop();
		else if(x[0]=='f')front();
		else if(x[0]=='e')empty();
		else if(x[0]=='b')back();
		else if(x[0]=='s')size();
	}
}

 

你可能感兴趣的:(c++,算法,数据结构)