21xrx.com
2024-06-03 00:20:53 Monday
登录
文章检索 我的文章 写文章
C++编写队列类的实现
2023-07-12 06:40:41 深夜i     --     --
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类来简化实现。但是对于初学者来说,手动实现队列类有助于加深对数据结构和编程的认识。

  
  

评论区

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