对于我的作业,我被要求在c ++中实现可扩展队列。我们给出了一个我们无法更改的头文件。头文件有一个动态数组,_front,_size(队列中当前的元素数)和_capacity。
如果我们尝试在队列中推送一个超出范围的元素"或者大于容量,我们被要求创建一个旧容量加倍的新队列。我怎么想在没有指向next或_rear变量的情况下实现dequeue和enqueue呢?
任何类型的提示都会有所帮助,而不是寻找整个解决方案。
答案 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);
}
如果你可以在头文件中添加函数,这会更好。由于我不知道你允许做什么的限制,我创建了一个外部函数。