队列(模板)

思路:

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;
}