作业协助
描述一个向量的基于数组的实现,以便在向量的开头和结尾插入和删除可以在恒定时间内完成。有说服力地争论。
显然,这对于直列阵列是不可能的。如果从前面移除,将会有一个需要填充的孔,以保持矢量属性。当然,如果我们抓取下一个元素,我们将需要这样做 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++;
}
要移除,只需减少正面或背面。然后在访问数组时,只允许显示前后的值。
首先,这是否符合向量的要求?其次,在移除时,我在弄清楚如何越过那个特殊的中心点时遇到了一些重大问题。假设您想从前面删除整个数组,而从后面添加所有内容。
感谢您提供任何帮助。