题解 | #【模板】队列#

【模板】队列

https://www.nowcoder.com/practice/afe812c80ad946f4b292a26dd13ba549

使用数组模拟队列(非循环队列)

在结构体中,需要定义用于存储队列数据的数组q,用于指向队列头部的指针head,用于指向队列尾部的指针rear,以及将头部指针和尾部指针全部初始化为0的构造函数queue()

push函数:将输入数字存入队列的尾部指针指向的位置(即q[rear]位置),尾部指针向后移动一个位置;
front函数:直接返回队列头部指针元素(即q[head]);
pop函数:调用front()获取队列头部元素并临时存储用于返回,之后将头部指针向后移动一个位置;
isEmpty函数:直接返回队列头部指针是否与尾部指针位置相同即可。

#include<iostream>
using namespace std;
struct queue
{
    int q[100001];
    int head;
    int rear;
    queue()
    {
        head = 0;
        rear = 0;
    }
};
void push(queue& que, int num) // 模拟入队的函数
{
    que.q[que.rear] = num;
    que.rear++;
}
int front(queue& que) // 模拟查看队头元素的函数
{
    return que.q[que.head];
}
int pop(queue& que) // 模拟出队的函数
{
    int tNum = front(que);
    que.head++;
    return tNum;
}
bool isEmpty(queue& que) // 判断队列是否为空的函数
{
    return que.head == que.rear;
}
int main()
{
    int n;
    cin>>n;
    queue que;
    for(int i = 0; i < n; i++)
    {
        string op;
        cin>>op;
        if(op == "push")
        {
            int num;
            cin>>num;
            push(que, num);
        }
        else if(isEmpty(que)) // 在队列进行pop和front操作前需要先判断队列此时是否为空
        {
            cout<<"error"<<endl;
        }
        else if(op == "pop")
        {
            cout<<pop(que)<<endl;
        }
        else if(op == "front")
        {
            cout<<front(que)<<endl;
        }
    }
    return 0;
}
全部评论

相关推荐

秋国🐮🐴:拿到你简历编号然后让你知道世间险恶
点赞 评论 收藏
分享
评论
11
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务