繁体   English   中英

向量的基于数组的实现

[英]Array Based Implementation of a Vector

作业协助

描述向量的基于数组的实现,以便可以在恒定时间内完成向量开头和结尾的插入和删除操作。 令人信服地争论。

显然,这对于直接阵列是不可能的。 如果从前面移开,将需要填充一个孔以保持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++;
}

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

首先,这是否满足向量的要求? 其次,在删除时,我遇到了一些主要问题,以解决如何越过该特殊中心点的问题。 假设您要从背面添加所有内容时,要从正面移除整个阵列。

感谢您的协助。

秘诀是使用两个数组。 第一个数组的末尾是“ front”。 第二个数组的末尾是“ back”。

我不明白您要使用偶数和奇数索引做什么。 但是基本上要有一个开始索引和一个结束索引-在前面保留空白,以便您可以在此处添加元素,如果删除元素,则可以再次增加开始索引。

另一种选择是使用圆形数组,使您可以在前端和后端高效地添加/删除。

还可以应用其他变体:您是否还能找到一种实现方式,使得在开始,结尾和中间(准确地)插入/删除是高效的,并且具有O(1)时间?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM