一文搞懂队列!C++ 实现 + BFS 应用 + STL 详解,轻松拿捏数据结构核心

一、队列的定义

队列(Queue)是一种线性数据结构,遵循 FIFO(First In First Out,先进先出) 原则。就像现实中的排队,先进入队列的元素会先被处理,后进入的元素后处理。例如,打印任务排队时,先提交的任务先打印。


二、队列的基本操作

  1. 入队(Enqueue):将元素添加到队列末尾。

定义:将元素添加到队列的末尾(队尾)。

queue<int> q;
q.push(10);   // 入队 10 → 队列:[10]
q.push(20);   // 入队 20 → 队列:[10, 20]

实现逻辑:

  • 数组实现:尾指针 rear 后移,将元素放入 rear 位置。
  • 链表实现:创建新节点,修改尾指针的 next 指向新节点。

时间复杂度:数组 / 链表:O (1)(均摊)。

  1. 出队(Dequeue):从队列头部移除并返回元素。

定义:移除并返回队列头部(队头)的元素。

int first = q.front();  // 获取队头元素 10
q.pop();                // 出队 → 队列:[20]

实现逻辑:

  • 数组实现:头指针 front 后移,若队列空则报错。
  • 链表实现:保存头节点值,删除头节点,修改头指针。
  1. 取队头元素:获取队列头部元素,但不删除它。
  • 定义:获取队列头部元素,但不删除它。

    int head = q.front();  // 获取队头元素 10 → 队列仍为 [10, 20]
    

实现逻辑:

  • 数组实现:直接返回 arr[front]
  • 链表实现:返回头节点的值。

时间复杂度:数组 / 链表:O (1)

  1. 判断队列是否为空:检查队列中是否有元素。

定义:检查队列中是否没有元素。

if (q.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值