117.info
人生若只如初见

C++循环队列的动态扩容机制

循环队列是一种基于数组实现的队列,当队列满时,需要进行扩容操作。动态扩容的机制是在队列满时,创建一个新的数组,将原数组中的元素复制到新数组中,并将队列的头指针和尾指针重新定位到新数组中。以下是C++实现循环队列动态扩容的示例代码:

#include 

class CircularQueue {
private:
    int* queue;
    int capacity;
    int size;
    int front;
    int rear;

public:
    CircularQueue(int capacity) {
        this->capacity = capacity;
        queue = new int[capacity];
        size = 0;
        front = 0;
        rear = -1;
    }

    void enqueue(int value) {
        if (isFull()) {
            // 扩容操作
            int newCapacity = capacity * 2;
            int* newQueue = new int[newCapacity];

            // 将原队列中的元素复制到新队列中
            for (int i = 0; i < size; i++) {
                newQueue[i] = queue[(front + i) % capacity];
            }

            delete[] queue;
            queue = newQueue;
            capacity = newCapacity;
            front = 0;
            rear = size - 1;
        }

        rear = (rear + 1) % capacity;
        queue[rear] = value;
        size++;
    }

    int dequeue() {
        if (isEmpty()) {
            std::cout << "Queue is empty" << std::endl;
            return -1;
        }

        int value = https://www.yisu.com/ask/queue[front];"hljs">bool isFull() {
        return size == capacity;
    }

    bool isEmpty() {
        return size == 0;
    }
};

int main() {
    CircularQueue q(5);

    q.enqueue(1);
    q.enqueue(2);
    q.enqueue(3);
    q.enqueue(4);
    q.enqueue(5);

    // 队列已满,需要进行扩容
    q.enqueue(6);
    q.enqueue(7);

    std::cout << q.dequeue() << std::endl;
    std::cout << q.dequeue() << std::endl;

    return 0;
}

在enqueue操作中,如果队列已满,则会执行扩容操作,将原队列中的元素复制到新队列中,并更新队列的容量和指针位置。通过动态扩容机制,可以有效地解决循环队列容量不足的问题。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe132AzsIAw9QAFM.html

推荐文章

  • C++ next_permutation与prev_permutation

    next_permutation和prev_permutation是C++标准库中的两个函数,用于在给定的序列中生成下一个排列和上一个排列。
    next_permutation函数可以生成给定序列的下...

  • C++ next_permutation的效率如何

    C++的next_permutation函数是标准库中用来生成给定序列的下一个排列的函数,其效率取决于输入序列的大小和特性。在最坏情况下,生成下一个排列需要O(n)的时间复杂...

  • C++ next_permutation函数怎么用

    在C++中,可以使用next_permutation函数来生成下一个排列。该函数位于头文件中,并接受两个迭代器作为参数:起始迭代器和结束迭代器。
    下面是一个简单的示例...

  • C++ next_permutation的时间复杂度

    C++中的next_permutation函数的时间复杂度为O(n),其中n为序列的长度。这是因为next_permutation函数的实现使用了一种高效的算法来生成下一个排列,时间复杂度主...

  • C++循环队列的错误处理

    在使用循环队列时,可能会遇到一些常见的错误,需要进行适当的错误处理和解决方法。以下是一些常见的错误和对应的处理方法: 队列为空:在队列为空时,如果进行出...

  • C++循环队列在并发环境的表现

    在并发环境下,使用C++循环队列可能会引发一些问题,主要是由于多个线程同时对队列进行读写操作可能会导致数据不一致性或者竞争条件的问题。 竞争条件:如果多个...

  • C++循环队列的内存管理策略

    在C++中,循环队列的内存管理策略通常涉及以下几个方面: 内存分配:循环队列通常使用数组来实现,因此在创建循环队列时需要分配一定大小的数组空间。可以使用动...

  • 如何优化C++循环队列的代码

    要优化C++循环队列的代码,可以考虑以下几点: 使用指针代替索引:在循环队列中,使用指针访问队列元素比使用索引更高效,因为指针可以直接指向队列中的元素,而...