队列

题目 模拟队列

image-4607cd64

思路分析

使用两个指针维护数组

hh要删除 所以以0为起点

tt表示尾 用于插入 和栈同理 以-1为起点

队尾插队头删

代码实现

#include<bits/stdc++.h>

using namespace std;

const int N = 100010;

int q[N];

//[hh, tt] 之间为队列(左闭右闭)

int hh = 0;//队头位置

int tt = -1;//队尾位置

//操作次数

int m;

//操作方式

string s;

//入队:队尾先往后移动一格,再放入要插入的数据

void push(int x){

    q[++tt] = x;

}

//出队:队头往后移动一格

void pop(){

    hh++;

}

//[hh, tt]表示队列区间,当tt >= hh时,区间不为空

void empty(){

    if(tt >= hh) cout << "NO" << endl;

    else cout << "YES" << endl;

}

//hh指向队头,q[hh]代表队头元素

void query (){

    cout << q[hh] << endl;

}

int main(){

    cin >> m;

    while(m--)

    {

        cin >> s;

        //入队

        if(s == "push"){

            int x;

            cin >> x;

            push(x);

        }

        //出队

        if(s == "pop"){

            pop();

        }

        //判空

        if(s == "empty"){

            empty();

        }

        //访问队头

        if(s == "query"){

            query();

        }

    }

    return 0;

}

同类题型

视频讲解


⬅️ 🏠 00-听课板子 ➡️ 单调栈