簡體   English   中英

索引單鏈表

[英]Indexed singly linked list

我想創建一個單鏈表。 我已經有一個不允許在其上建立索引的實現。 我想添加此功能,但是我不確定該怎么做。

鏈表

因此,基本上頭應該具有索引“ 1”。 但是我無法弄清楚自己應該如何在If語句中將索引每增加1

void AddNode (int addData)
{
    nodePtr NewNode = new node;
    NewNode->next = NULL;
    NewNode->data = addData;

    if (head != NULL)
    {
        curr = head;
        while(curr->next != NULL)
        {
            curr = curr->next;
        }
        curr->next = NewNode;
        NewNode->index;
    }
    else
    {
        head = NewNode;
        NewNode->index = 1;
    }
}

您是說能夠通過get(index)獲得鏈接列表節點等功能?

另外,您的頭部不應該具有索引1,它應該為0。這不符合從零開始的標准索引編制方法。

鏈表在技術上沒有索引,也不應存儲索引。 似乎鏈表可能不是您正在執行的操作的正確數據結構,但是您可以使用這樣的循環將其視為這樣(請注意,如果我的c ++語法生銹)

int get(int index) {
  Node current = head;
  for (int x = 0; x < index; x++) {
    if (current->next == null) {
      //some sort of error handling for index out of bounds
    } else {
      current = current->next;
    }
  }
  return current->data
}

get(2)將返回列表的第三個元素。

結構圖為什么要將其添加到列表的末尾? 只需將新節點添加到最前面即可。

我認為沒有必要遵循1,2,3的順序。。。相反,您可以反向進行。在添加新節點之前,請訪問頭並找到其索引(i)。 當您添加新的索引時,該索引的索引將為i + 1。

有兩個優點:-遍歷此列表時,它不會改變任何內容。 -您知道已添加到此列表中的數量。

所以,你真的想要做的是增加的能力鏈表的索引元素。

  • 無需將索引實際存儲在任何地方(因為您實際上並不存儲array/vector元素的索引,因為類型和數組第一個元素的地址就是檢索第i-th元素所需要的一切)。

  • 你想保留的唯一信息是因為計算是昂貴的,因為你必須從遍歷列表列表的長度headtail每次你需要它的時候。 獲得此信息后, addNode僅應更新列表的size

如您所知,訪問鏈表i-th元素也很昂貴(與向量相比),但是很容易編寫代碼。

類似於以下內容的東西應該起作用:

void get(Node* head, size_t pos) {
    while (head && pos--)
        head = head->next;
    return pos<=0 ? head : nullptr ;
}

head開始遍歷列表,直到到達末尾( headnullptr )或pos <=0 一旦您退出循環,如果pos>0表示列表比pos短,則可以返回head (這將指向pos-th元素)

暫無
暫無

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

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