21xrx.com
2025-04-12 12:18:48 Saturday
文章检索 我的文章 写文章
C++编写队列类的实现
2023-07-12 06:40:41 深夜i     14     0
C++ 队列 编写 实现

C++编写队列类的实现是一个基础的数据结构编程问题。队列是一种常用的FIFO(先进先出)数据结构。这种数据结构包含了插入新元素和取出元素的操作。

在C++中,可以使用标准模板库(STL)的queue类来实现队列。但是,为了更好地理解队列和C++编程,我们可以手动实现一个队列类。

队列类需要支持以下操作:

1. push(element): 将元素添加到队列的末尾。

2. pop(): 移除队列顶部的元素,并返回其值。

3. front(): 返回队列顶部的元素。

4. empty(): 检查队列是否为空。

我们先来看看一个基本的队列类的代码实现:

class Queue
{
private:
  int *elements;
  int size;
  int frontIndex;
  int backIndex;
public:
  Queue(int size);
  ~Queue();
  void push(int element);
  int pop();
  int front();
  bool empty();
};

我们使用了一个数组来存储队列元素。size、frontIndex和backIndex分别表示数组大小、队列头部和尾部的索引。我们来看一下每个函数的实现。

Queue::Queue(int size)
{
  elements = new int[size];
  this->size = size;
  frontIndex = 0;
  backIndex = -1;
}
Queue::~Queue()
{
  delete[] elements;
}
void Queue::push(int element)
{
  elements[++backIndex] = element;
}
int Queue::pop()
{
  if (empty())
    throw exception("Queue is empty");
  int element = elements[frontIndex++];
  if (frontIndex > backIndex)
  {
    frontIndex = 0;
    backIndex = -1;
  }
  return element;
}
int Queue::front()
{
  if (empty())
    throw exception("Queue is empty");
  return elements[frontIndex];
}
bool Queue::empty()
{
  return backIndex < frontIndex;
}

构造函数中创建了一个数组,并初始化frontIndex为0,backIndex为-1,表示初始时队列为空。push方法将元素添加到数组的末尾,也就是backIndex+1的位置上。pop方法返回队列头部的元素,并将frontIndex+1。当frontIndex大于backIndex时,表示队列已经为空,需要将frontIndex和backIndex重置。front方法返回队列顶部的元素。empty方法通过判断frontIndex和backIndex的关系来确定队列是否为空。

最后,我们来写一个简单的测试程序,用于验证Queue类的正确性。

int main()
{
  Queue q(5);
  q.push(1);
  q.push(2);
  q.push(3);
  q.push(4);
  q.push(5);
  while (!q.empty())
    cout << q.pop() << endl;
  return 0;
}

输出:

1
2
3
4
5

上面的测试程序使用Queue类来实现了一个FIFO队列,按照添加顺序从队列中取出元素。对于更复杂的程序,C++编写队列类的实现可以使用STL的queue类来简化实现。但是对于初学者来说,手动实现队列类有助于加深对数据结构和编程的认识。

  
  

评论区

请求出错了