题解 | #【模板】队列#
【模板】队列
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; }