簡體   English   中英

雙鏈列表指針的雙鏈表的向量

[英]Vector of Doubly Linked Lists of Doubly Linked List Pointers

我有一個包含雙向鏈接列表的向量(即std :: vector <DoublyLinkedList>),然后每個雙向鏈接列表將包含指向該向量中另一個雙向鏈接列表的指針。

這是我正在談論的示例:

假設我們有以下雙向鏈接列表向量,{{1,2,0},{0,2,1,5},{2,1,0,4,5},{4,5,1 ,0},{5,4}}。

讓我們看一下向量{1,2,0}中的第一個雙鏈表。 我想要的是1指向列表{1,2,0},2指向列表{2,1,0,4,5}和0指向{0,2,1,5}對於向量中的其他列表也是如此。

除了具有這種結構之外,如果我們置換向量的元素,我還需要指針指向正確的列表。

因此,如果在上面的示例中我交換了向量中的前兩個列表,則得出:

{{0,2,1,5},{1,2,0},{2,1,0,4,5},{4,5,1,0},{5,4}}

我仍然希望在列表{1,2,0}中,1指向{1,2,0},2指向{2,1,0,4,5},0指向{0,2,1, 5}。

因此,我能夠實施直到最后一部分的每一部分。

到目前為止,我一直在做的是,在排列之前,我可以將每個列表中的所有0都指向&vector [1],然后在排列之后,我必須遍歷每個列表中的每個元素才能找到0並將它們指向0的新位置,因此它們將指向&vector [k]。

問題是我必須在每個列表中搜索0,但是我不想執行搜索。 那么有什么方法可以執行此操作而無需進行搜索? (代碼在C ++中)

除了您描述的問題之外,將結構直接存儲在向量中的另一個問題是向量上的某些操作會使向量的部分或全部現有指針無效。 即從向量中刪除元素或將元素插入向量中。

通常,在這種情況下,向量最好存儲指向對象的指針,而不是對象本身。 在您的示例中, std::vector< DoublyLinkedList *>會更好地工作。 您的DoubleLinkedList各種實例可以直接存儲指向彼此的指針,並且在向量中四處移動指針不會對其有效性產生任何影響。

當然,此解決方案還需要解決其他一些問題,例如堆管理。 但這將是一個不同的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM