[学习笔记-C++篇]队列

本文详细讲解了如何实现和优化循环队列,包括队列初始化、元素入队与出队操作,以及特殊情况下front和rear的处理。重点介绍了循环队列的特点和避免隐式循环的方法。通过实例展示了代码,并讨论了代码执行效率和内存使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 普通队列(不循环)

代码参考队列 - 实现【可能要注册,不是广告】

1)使用的时候自己补充头文件和命名空间说明;
2)data.size()这个东西测试了一下,加入只在队列中输入2个元素的话,这个值就一直是2,其实相较于队列中元素个数这个含义,更贴合队尾指针。所以判空的时候p_start才和这个值进行比较。

  1. 循环队列

主要有三个要点:

1)队列为空时frontrear设为-1,此时输入元素要将frontrear设为0
2)队列只有一个元素时,front=rear,删除元素要将frontrear设为-1
3)输入元素时,若队列不满而rear达到上限(队列长度),则需要循环;删除元素时,若队列不空而front达到上限,同样需要循环。

我没有采用输入元素时rear = (rear + 1) % size、删除元素front = (front + 1) % size的操作,和队列满时front = (rear + 1) % size的操作,而是将循环过程显白,直接利用元素数目比对判满。

参考程序:

class MyCircularQueue {
   

private:
    vector<int> data;
    int front,rear;
    int size,count;

public:
    MyCircularQueue(int k) {
   
        data.reserve(k);
        front=-1;
        rear=-1;
        count=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值