21xrx.com
2024-12-27 21:02:35 Friday
登录
文章检索 我的文章 写文章
C++实现有界队列
2023-07-08 20:35:17 深夜i     --     --
C++ 有界队列 实现

有界队列是一种非常常见的数据结构,它具有固定大小的队列,如果队列已满,那么无法再向队列中添加元素,直至有其他元素被删除或取出。在计算机科学中,有界队列的实现往往是一个重要的问题,在这里我们将介绍如何用C++实现一个简单的有界队列。

首先,我们将定义一个名为BoundedQueue的类。我们需要声明一个私有的元素数组,一个队列的大小,以及两个指针(一个指向队列的头部,另一个指向队列的尾部)。这是一个C++的类定义,其中我们还定义了其中所需的一些方法。


class BoundedQueue {

private:

  int *queue;

  int size;

  int front, rear;

public:

  BoundedQueue(int size);  // 构造函数

  bool isEmpty() const;  // 判断队列是否为空

  bool isFull() const;   // 判断队列是否为满

  void enqueue(int value); // 将一个元素添加到队列尾部

  int dequeue();      // 从队列中取出元素

};

在上述实现中,当一个元素被添加到队列中时,我们首先检查队列是否为满。如果队列已满,我们需要提示队列已满(通过抛出异常、返回错误值等方式)。否则,我们将元素添加到队列的尾部,并将尾部指针后移一个位置。


void BoundedQueue::enqueue(int value) {

  if (isFull())

    // 队列已满

    return;

  

  queue[rear] = value;

  rear = (rear + 1) % size;

}

类似地,从队列中取出元素时,我们需要首先检查队列是否为空。如果队列为空,我们需要提示队列为空(通过抛出异常、返回错误值等方式)。否则,我们取出队列头部的元素,并将头部指针后移一个位置。


int BoundedQueue::dequeue() {

  if (isEmpty())

    // 队列为空

    return -1;

  

  int value = queue[front];

  front = (front + 1) % size;

  return value;

}

最后,我们可以在main函数中创建一个有界队列对象,并随意添加一些元素或删除它们,从而测试我们所编写的程序的正确性。


int main() {

  BoundedQueue queue(5);

  cout << queue.isEmpty() << endl; // 输出1

  queue.enqueue(1);

  queue.enqueue(2);

  queue.enqueue(3);

  cout << queue.dequeue() << endl; // 输出1

  queue.enqueue(4);

  queue.enqueue(5);

  queue.enqueue(6); // 应该会失败,因为队列已满

  cout << queue.isFull() << endl; // 输出1

  while (!queue.isEmpty()) {

    cout << queue.dequeue() << endl; // 输出2,3,4,5

  }

  cout << queue.isEmpty() << endl; // 输出1

  return 0;

}

总而言之,使用C++能够轻松地实现一个有界队列,只需定义相应的数据结构和方法即可。实现正确的有界队列对于解决计算机科学中的诸如并发、网络通信等问题具有重要意义。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复