基于数组的矢量实现

时间:2013-06-13 16:05:28

标签: arrays vector

家庭作业援助

描述一个基于数组的向量实现,以便插入和 在矢量的开始和结束处移除可以在恒定时间内完成。争论 令人信服。

显然,使用直接阵列这是不可能的。如果从前面移除,则会有一个需要填充的孔以保持矢量属性。当然,如果我们抓住下一个元素,我们将需要这样做n次,因此运行时将是线性的,而不是常量。

另一种方法是抓住最后一个元素并将其粘贴在前面,但是数据结构会扰乱你的数据有什么用呢?

到目前为止我所做的是创建一个数组。奇数索引在数组中的某个点后面(最好是中间用于大小目的,但它可以在任何地方),然后偶数索引在该点之前。如果特殊点不是中心点,那占用了大量的内存并且有很多空位。最坏的情况是2n。但是,它的作用就像没有洞一样,因为它总会填满下一个元素。

插入:

private int front = 0;
private int back = 0;
public void insertAtFront(int element)
{
    (front+1));
        dataArray[2*(front + 1) + 1] =  element;
        front++;
}

public void insertAtBack(int element)
{
    dataArray[2*(back+1)] = element;
    back++;
}

要移除,只需减少前部或后部。然后在访问数组时,只允许显示正面和背面之间的值。

首先,这是否符合向量的要求?其次,在删除时,我遇到了一些重大问题,想知道如何通过这个特殊的中心点。当您从后面添加所有内容时,假设您要从前面删除整个阵列。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

秘诀是使用两个数组。第一个数组的末尾是“前面”。第二个数组的结尾是“后面”。

答案 1 :(得分:0)

我不明白你用偶数和奇数指数做什么。但是有一个起始索引和一个结束索引基本上是要走的路 - 在前面留空空,这样你就可以在那里添加元素,如果你删除一个元素,就再次增加起始索引。

答案 2 :(得分:0)

另一种选择是使用圆形阵列,以便有效地在前端和末尾添加/删除。

还可以应用其他变体:你是否也可以找到一个实现,这样在开头,结尾和(确切地)在中间插入/删除是有效的并且有O(1)时间?

相关问题