簡體   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