队列
队列(queue)是一种具有「先进入队列的元素一定先出队列」性质的表。
由于该性质,队列通常也被称为先进先出(first in first out)表,简称 FIFO 表。
STL队列
以下操作的复杂度均为\(O(1)\)。
-
创建队列
queue<int> q
queue<char> q
queue<string> q
-
元素访问
q.front()
返回队首元素q.back()
返回队尾元素
-
修改
q.push(x)
在队尾插入元素\(x\)q.pop()
弹出队首元素
-
容量
q.empty()
队列是否为空,若为空,返回true
。q.size()
返回队列中元素的数量
STL用法:
queue<int> q;
printf("队列是否为空:%d\n", q.empty());
for(int i = 1; i <= 3; i ++)
{
q.push(i);
}
printf("队首元素:%d,队尾元素:%d\n", q.front(), q.back());
q.pop();
printf("队首元素:%d,队尾元素:%d\n", q.front(), q.back());
printf("队列长度:%d", q.size());
数组模拟队列
以下操作的复杂度均为\(O(1)\)。
-
创建队列
int q[SIZE], ql = 1, qr = 0;
-
元素访问
q[ql]
返回队首元素q[qr]
返回队尾元素
-
修改
q[++ qr] = x
在队尾插入元素\(x\)ql ++
弹出队首元素
-
容量
qr >= ql
队列是否为非空:若非空,返回true
。qr - ql + 1
返回队列中元素的数量
数组模拟队列用法:
int q[100], ql = 1, qr = 0;
printf("队列是否为非空:%d\n", qr >= ql);
for(int i = 1; i <= 3; i ++)
{
q[++ qr] = i;
}
printf("队首元素:%d,队尾元素:%d\n", q[ql], q[qr]);
ql ++;//弹出队首
printf("队首元素:%d,队尾元素:%d\n", q[ql], q[qr]);
printf("队列长度:%d", qr - ql + 1);