队列

发布时间 2023-11-17 15:52:03作者: 可爱的卤蛋

队列

队列(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());

image-20231117152037120

数组模拟队列

​ 以下操作的复杂度均为\(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);

image-20231117152506519

模板题目

洛谷B3616 【模板】队列

循环队列