21xrx.com
2024-12-22 22:24:54 Sunday
登录
文章检索 我的文章 写文章
C++实现队列(Queue)
2023-07-02 18:41:09 深夜i     --     --
C++ 队列 Queue 数据结构 排序算法

队列(Queue)是一种在计算机科学中常用的数据结构,它按照先进先出的原则来管理数据。在实际应用中,队列常被用于缓存、调度和网络传输等方面。在C++中,我们可以使用STL中已经预定义好的queue类来实现队列,也可以根据队列的特点设计自己的队列类。本文将介绍如何使用C++实现队列的基本操作。

1. 定义队列

首先,我们需要定义一个队列类。队列的主要特点是先进先出,因此我们需要一个指向队头的指针和一个指向队尾的指针,还需要一个用来记录队列元素个数的变量。我们可以使用链表或数组来存储队列元素。

typedef int ElementType; //队列元素类型

class Queue {

public:

  Queue(); //构造函数

  ~Queue(); //析构函数

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

  bool IsFull(); //判断队列是否已满

  void Enqueue(ElementType element); //入队操作

  ElementType Dequeue(); //出队操作

private:

  ElementType* queueArray; //队列数组

  int front; //队头指针

  int rear; //队尾指针

  int size; //队列元素数量

  int capacity; //队列容量

};

在队列类中,我们定义了构造函数、析构函数和队列相关的各种操作函数。queueArray是一个指针类型的数组,front指向队头元素的位置,rear指向队尾元素的位置。size表示当前队列中已经存储的元素数量,capacity表示队列的容量。

2. 判断队列状态

队列的状态有两种:空和满。当队列为空时,front和rear指向同一个位置;当队列满时,front和rear指向相邻的两个位置,此时无法加入新的元素。

bool Queue::IsEmpty()

  return size == 0;

bool Queue::IsFull()

  return size == capacity;

IsEmpty()函数判断队列是否为空,返回一个bool类型的值;IsFull()函数判断队列是否已满,返回一个bool类型的值。

3. 入队操作

队列的入队操作是把一个新元素加入到队列的末尾。我们需要保证队列的元素是按照从前向后顺序存储的。添加一个新元素的步骤如下:

- 如果队列已满,返回false;

- 把新元素放到队列的末尾;

- 将rear指针向后移动一个位置;

- 增加队列的元素数量。

void Queue::Enqueue(ElementType element) {

  if (IsFull())

    return;

  queueArray[rear] = element;

  rear = (rear + 1) % capacity;

  size++;

}

4. 出队操作

队列的出队操作是把队头元素从队列中删除。我们同样需要保证队列的元素是按照从前向后顺序存储的。删除队头元素的步骤如下:

- 如果队列为空,返回0;

- 将front指针向后移动一个位置;

- 减少队列的元素数量;

- 返回队头元素。

ElementType Queue::Dequeue() {

  if (IsEmpty())

    return 0;

  ElementType element = queueArray[front];

  front = (front + 1) % capacity;

  size--;

  return element;

}

5. 总结

这里我们介绍了C++实现队列的基本操作。队列是一种十分常用的数据结构,在实际应用中有着广泛的应用。需要注意的是,当队列的元素数量达到队列容量时,队列就已经满了。因此,在进行入队操作时需要先判断队列是否已满;在进行出队操作时需要先判断队列是否为空。

  
  

评论区

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