117.info
人生若只如初见

C++循环队列的应用实例

循环队列是一种具有固定大小的队列,当队列满时,新元素将会覆盖最旧的元素。下面是一个简单的C++循环队列的应用实例,实现了一个基本的生产者-消费者模型。

#include 
using namespace std;

#define SIZE 5

class CircularQueue {
private:
    int arr[SIZE];
    int front, rear;

public:
    CircularQueue() {
        front = -1;
        rear = -1;
    }

    void enqueue(int value) {
        if ((front == 0 && rear == SIZE - 1) || (rear == (front - 1) % (SIZE - 1))) {
            cout << "Queue is full" << endl;
        } else if (front == -1) {
            front = rear = 0;
            arr[rear] = value;
        } else if (rear == SIZE - 1 && front != 0) {
            rear = 0;
            arr[rear] = value;
        } else {
            rear++;
            arr[rear] = value;
        }
    }

    int dequeue() {
        if (front == -1) {
            cout << "Queue is empty" << endl;
            return -1;
        }

        int value = https://www.yisu.com/ask/arr[front];"hljs">void displayQueue() {
        if (front == -1) {
            cout << "Queue is empty" << endl;
            return;
        }

        cout << "Elements in the circular queue are:" << endl;
        if (rear >= front) {
            for (int i = front; i <= rear; i++) {
                cout << arr[i] << " ";
            }
        } else {
            for (int i = front; i < SIZE; i++) {
                cout << arr[i] << " ";
            }

            for (int i = 0; i <= rear; i++) {
                cout << arr[i] << " ";
            }
        }
        cout << endl;
    }
};

int main() {
    CircularQueue q;

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

    q.displayQueue();

    cout << "Dequeued element: " << q.dequeue() << endl;

    q.enqueue(6);
    q.displayQueue();

    return 0;
}

在这个示例中,我们定义了一个CircularQueue类,实现了循环队列的基本功能,包括入队、出队和显示队列元素。在main函数中,我们演示了如何使用循环队列模拟生产者-消费者模型。首先入队5个元素,然后出队一个元素,最后再入队一个元素。最终打印出队列中的元素。

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

推荐文章

  • C++ strtol使用时常见的错误有哪些

    未正确包含头文件:未包含stdlib.h头文件,导致编译错误。
    传入参数错误:传入的字符串参数不符合数字格式,导致无法转换。
    数字超出范围:转换后的数...

  • C++ strtol与strtoul有何不同

    C++中的strtol和strtoul函数都用于将字符串转换为长整型或无符号长整型,但它们之间有一些重要的区别: strtol函数将字符串转换为长整型(即有符号长整型),并且...

  • C++ strtol能否解析十六进制数

    是的,C++中的strtol函数可以解析十六进制数。当在第三个参数中设置基数为16时,strtol函数会将输入的字符串解析为十六进制数。例如:
    #include #include i...

  • 为什么C++ strtol比atoi效率高

    C++中的strtol函数比atoi函数效率高的主要原因是strtol函数提供了更多的功能和灵活性。strtol函数可以处理更多类型的输入数据,例如十六进制或八进制的数字,同时...

  • C++ Point的序列化与反序列化

    在C++中,可以通过重载流操作符来实现Point类的序列化和反序列化。
    下面是一个简单的示例代码:
    #include using namespace std; class Point {
    p...

  • C++ Point与向量处理的联系

    在C++中,可以使用Point和Vector来表示位置和方向。通常,Point用来表示一个点的位置,Vector用来表示方向和大小。
    Point和Vector之间有一些联系和相似之处...

  • C++ Point在游戏开发中的作用

    在游戏开发中,C++ Point 类通常用来表示一个二维平面上的点。这个点可以代表游戏中的角色位置、目标位置、碰撞检测等等。Point 类通常包含两个成员变量,分别表...

  • 如何优化C++ Point的性能

    要优化C++ Point的性能,可以考虑以下几点: 使用引用而不是指针:在函数参数和返回值中尽可能使用引用而不是指针,这样可以避免不必要的内存访问和复制操作。 使...