C 中的可扩展队列

Expandable Queue in c++

本文关键字:队列 可扩展      更新时间:2023-10-16

对于我的作业,我被要求在C 中实现可扩展的队列。为我们提供了一个无法更改的标头文件。标题文件具有动态数组,_front,_size(队列中的当前元素数)和_capacity。

如果我们尝试在队列上推出一个"超出范围"或大于容量的元素,则要求我们创建一个新的队列,并具有两倍的旧容量。我应该如何实现decqueue和inqueue,而没有点或_rear变量的点?

任何形式的提示都会有所帮助,而不是寻找整个解决方案。

您必须知道队列的数据类型,让我们假设它是整数。然后,您可以使用给出的信息(假设您不能如所述编辑标题文件,并且只能访问几个项目):

标题文件

class Queue
{
public:
  Queue()
  {
    _front = new int[10];
    _size = 0;
    _capacity = 10;
  }
  ~Queue()
  {
    delete[] _front;
  }
  int* _front;
  int _size;
  int _capacity;
};

在您的代码中,您可以做类似的操作(注意:未测试):

#include "Queue.h"
void add(Queue*q, int i)
{
  // If there is room then add it.
  if(q->_size < q->_capacity)
  {
    q->_size++;
    *(q->_front + q->_size - 1) = i;
  }
  else
  {
    // If full then create a new array.
    int* arr = new int[q->_capacity * 2];
    // Copy over the old data.
    for(int j = 0; j < q->_capacity; j++)
    {
      *(arr + j) = *(q->_front + j);
    }
    q->_capacity *= 2;   // Update parameter.
    delete[] q->_front;  // Delete memory.
    q->front = arr;      // Point to new array.
    arr = nullptr;       // c++11
    q->_size++;          // Same as above when there was room.
    *(q->_front + q->_size - 1) = i;
  }
}
int main()
{
   Queue q;
   add(&q, 1234);   
}

如果您可以在标题文件中添加功能,这会更好。由于我不知道您允许的限制,所以我创建了一个外部功能。