C 中的可扩展队列
Expandable Queue in c++
对于我的作业,我被要求在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);
}
如果您可以在标题文件中添加功能,这会更好。由于我不知道您允许的限制,所以我创建了一个外部功能。
相关文章:
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- 简化可扩展的"Perform Operation X on Data Y"框架
- 传递 std::array 参数,其大小限制为可扩展的大小集
- 在 c++ 中构建封装但可扩展的动画库
- 将ADA API暴露于C/C (可扩展方式)
- 集成多态可扩展排序顺序
- 具有可扩展矢量扩展(SVE)的ARM V-8
- C++可扩展的工厂方法
- 可扩展的 SFINAE 条件覆盖
- C 中的可扩展队列
- C++中可扩展的自动类注册
- NUMA体系结构上大(8MB)内存区域的可扩展分配
- C++中的可扩展类型特征
- 无需reinterpret_cast的可扩展库接口
- 在 C++ 中具有用户可扩展类型参数的类型化类
- QTreeView-删除某些元素的可扩展外观
- 用于C++的快速、大且可扩展的几何图形库
- hdf5多个可扩展表
- 可扩展条件语句的机制
- 使类信息在运行时可访问的可扩展方式