c ++中的可扩展队列

时间:2017-09-29 23:39:25

标签: c++ arrays queue

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

如果我们尝试在队列中推送一个超出范围的元素"或者大于容量,我们被要求创建一个旧容量加倍的新队列。我怎么想在没有指向next或_rear变量的情况下实现dequeue和enqueue呢?

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

1 个答案:

答案 0 :(得分:0)

您必须知道队列的数据类型,我们假设它是一个整数。然后,您可以使用给出的信息(假设您无法按照您的说明编辑头文件,并且只能访问一些项目):

标头文件

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);   
}

如果你可以在头文件中添加函数,这会更好。由于我不知道你允许做什么的限制,我创建了一个外部函数。