队列
队列的概念
队列和栈一样,也是一种访问受限的线性表,它只允许在表的一端插入元素,在另一端删除元素。其中,允许插入的一端称为队尾,允许删除的一端称为队头。先进入队列的元素会先出队,因此队列具有先进先出的特性。
队列的模拟实现
创建
定义一个足够大的数组来充当队列,在定义两个变量h和t,变量h标记队头元素的前一个位置,变量t标记队尾元素的位置。
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int q[N];
int h, t;
入队
将x这个元素放入队列中,这里我们依旧是从下标为1的位置开始存储有效元素。
void push(int x)
{
q[++t] = x;
}
出队
删除队头元素。
void pop()
{
h++;
}
查询队头元素
这里要注意,不是h所指的位置,而是h所指的下一个位置。
int front()
{
return q[h + 1];
}
查询队尾元素
int back()
{
return q[t];
}
判断队列是否为空
bool empty()
{
return h==t;
}
有效元素个数
int size()
{
return t - h;
}
STL——queue
size & empty
size:返回队列中实际元素的个数
empty:判断队列是否为空
push & pop
push:入队
pop:出队
front & back
front:返回队头元素,但不删除
back:返回队尾元素,但不删除
测试代码
#include <iostream>
#include <queue>
using namespace std;
typedef pair<int, int> PII;
int main()
{
queue<PII> q;
for(int i = 1; i <= 10; i++)
{
q.push({i, i * 10});
}
while(q.size())
{
auto t = q.top();
q.pop();
cout << t.first << " " << t.second << endl;
}
return 0;
}