实现一个简单的环形队列

实现一个简单的环形队列



一、什么是环形队列?

环形队列的定义

环形队列(Circular Queue)是一种特殊的数据结构,旨在高效地管理和利用存储空间。与传统的线性队列相比,环形队列的主要特点在于,它的队尾和队头可以在同一存储空间中循环使用,从而避免了空间浪费。

环形队列的原理

  1. 数据结构

    • 环形队列通常使用一个固定大小的数组来存储元素。
    • 定义两个指针:
      • front:指向队头元素的位置。
      • rear:指向队尾元素的下一个位置。
  2. 容量

    • 最大容量通常比数组的大小少一个,以便能够区分空队列和满队列的状态。这是因为当 frontrear 相等时,队列被认为是空的,而当 (rear + 1) % maxSize == front 时,队列被认为是满的。
  3. 入队(enqueue)

    • 将新元素添加到 rear 指向的位置,然后更新 rear 指针为 (rear + 1) % maxSize。如果 rear 指针达到数组的末尾,它将重新回到数组的起始位置。
  4. 出队(dequeue)

    • front 指向的位置移除元素,然后更新 front 指针为 (front + 1) % maxSize。同样,front 指针在到达数组末尾时会循环回到开头。
  5. 判断队列状态

    • 空队列:当 frontrear 相等时,队列为空。
    • 满队列:当 (rear + 1) % maxSize == front 时,队列满。

二、环形队列功能实现

1.构造初始化

    // 构造函数,初始化队列大小
    CircularQueue(int size) : maxSize(size + 1), front(0), rear(0)
    {
   
   
        data.resize(maxSize); // 根据最大大小调整数据存储空间
    }

2.入队操作

    // 入队操作
    bool enqueue(const T &item)
    {
   
   
        if (isFull()) // 检查队列是否已满
        {
   
   
            throw std::runtime_error("Queue is full!"); // 抛出异常
            return false;                               // 这个返回语句不会被执行
        }
        data[rear] = item;           // 将新元素放入队尾
        rear = (rear + 1) % maxSize; // 更新队尾指针
        return true;                 // 入队成功
    }

3.出队操作

    // 出队操作
    bool 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科技之隅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值