队列(模板)
【模板】队列
https://www.nowcoder.com/practice/afe812c80ad946f4b292a26dd13ba549?tpId=308&tqId=2110348&ru=/exam/company&qru=/ta/algorithm-start/question-ranking&sourceUrl=%2Fexam%2Fcompany
队列(模板)
思路:
1.构造一个结构体表示队列:包含一个数组用来存队列中的元素,一个队头指针head,一个队列的尾指针rear
2.初始化为空队列:head=rear=0;
3.从队尾插入元素,即将元素插入下标为rear的位置,再将rear++
4.获得队首,即head处的元素
5.让队首出队列,即让head++
6.判断队列是否为空:如果head==rear,则队列为空
代码:
#include<iostream>
using namespace std;
//最多进行的操作数
const int N=100005;
int n,m;
string op;
//定义一个队列结构体:
//队列用数组存,设置队首head,队尾rear
//初始化队列的无参函数:head=rear=0;
struct queue{
int q[N];
int head;
int rear;
queue(){
head=0;rear=0;
}
};
//从队尾插入元素,就是在rear所指的位置插入那个元素,再将rear++
void push(queue& que,int x){
que.q[que.rear]=x;
que.rear++;
}
//判断队列是否为空,如果队首head和队尾rear处于同一个位置,则队列为空
bool empty(queue&que){
return que.rear==que.head;
}
//返回队首元素
int front(queue& que){
return que.q[que.head];
}
//将队首元素出队列,即先保留队首元素,再将队首元素出队列,head++
int pop(queue& que){
int temp=que.q[que.head];
que.head++;
return temp;
}
int main(){
cin>>n;
queue que;
for(int i=1;i<=n;i++){
cin>>op;
if(op=="push"){
cin>>m;
push(que,m);
}else if(empty(que)){
cout<<"error"<<endl;
}else if(op=="front"){
cout<<front(que)<<endl;
}else if(op=="pop"){
cout<<pop(que)<<endl;
}
}
return 0;
}