循环队列的基本操作

循环队列深度解析:从基础实现到工业级优化

循环队列核心特性

graph TD
    A[循环队列] --> B[固定容量]
    A --> C[高效空间复用]
    A --> D[O(1)操作复杂度]
    B --> E[避免内存碎片]
    C --> F[解决假溢出问题]
    D --> G[适合高频操作场景]

一、现代C++循环队列实现

模板类实现(动态扩容版)

#include <iostream>
#include <vector>
#include <stdexcept>

template <typename T>
class CircularQueue {
   
   
private:
    std::vector<T> data;
    size_t front = 0;
    size_t rear = 0;
    bool fullFlag = false;

    void resize(size_t newCapacity) {
   
   
        std::vector<T> newData(newCapacity);
        size_t size = this->size();
        
        for(size_t i=0; i<size; ++i) {
   
   
            newData[i] = data[(front + i) % data.capacity()];
        }
        
        data = std::move(newData);
        front = 0;
        rear = size;
        fullFlag = false;
    }

public:
    explicit CircularQueue(size_t initialCapacity = 10) {
   
   
        data.resize(initialCapacity);
    }

    bool empty() const {
   
   
        return !fullFlag && (front == rear);
    }

    bool full() const {
   
   
        return fullFlag;
    }

    size_t capacity() const {
   
   
        return data.capacity();
    }

    size_t size() const {
   
   
        if(fullFlag) return data.capacity();
        return (rear >= front) ? (rear - front) : (data.capacity() - front + rear);
    }

    void enqueue(const T& value) {
   
   
        if(fullFlag) {
   
   
            resize(data.capacity() * 2);
        }
        
        data[rear] = value;
        rear = (rear + 1) % data.capacity();
        fullFlag = (rear == front);
    }

    T dequeue() {
   
   
        if(empty()) {
   
   
            throw std::runtime_error("Dequeue from empty queue");
        }
        
        T val = data[front];
        front = (front + 1) % data.capacity();
        fullFlag = false;
        return val;
    }

    const T& peek() const {
   
   
        if(empty()) {
   
   
            throw std::
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

star _chen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值