哪种数据结构类似于双向链表和数组的组合?

时间:2016-01-25 15:55:46

标签: c++ data-structures

是否有任何已创建的结构只是basic array的{​​{1}}?

我的意思是你使用doubly linked list nodes它会直接从数组(get(int index))返回元素。有了这个结构,我也很容易做到foreach因为每个元素都会相互链接,所以我不需要考虑空白数组的位置。

问:为什么我需要这个? 答:我有无限的记忆,我知道我需要多大的阵列,我希望这个结构最快。

3 个答案:

答案 0 :(得分:4)

这是一个小的 C ++ 11容器指南,只需设置约束并按照箭头操作:

enter image description here

IMO std::deque是最有可能的候选人。

如果你想自己创造一些东西,这里有一个例子:

struct Node{
    // constructor
    Node (int v, Node* n = 0, Node* p = 0) 
        : value(v), next(n), prev(p) { }

    // data member
    int value;
    // pointer to next node
    Node* next;
    // pointer to previous node
    Node* prev;
};

size_t number_of_nodes = 10;
Node* ptr = new Node[number_of_nodes];

答案 1 :(得分:3)

根据您的描述,我认为最合适的数据结构是双端队列;或者,在C ++中,std::deque

它是如何成为一个双向链表:

  • 存储后指针和前指针
    • {push,pop}_{front,back}O(1)
  • 在需要扩展时不需要重新分配

它如何像一个数组:

  • 允许下标索引
    • O(1)随机访问

您正在寻找的get操作是operator[]std::deque::at

一些考虑因素是插入/移除不在结构的极端(即,在中间某处)的元素是元素数量的平均情况O(n),原因与它相同O(n) { {1}}从基本数组中删除元素。

Obligatory basic-use-case

答案 2 :(得分:2)

我认为您正在寻找的是STL中已经存在的容器双端队列。见 - > http://en.cppreference.com/w/cpp/container/deque 如果它不是您要找的那个,您可能会在这里找到您需要的容器 - > http://www.cplusplus.com/reference/stl/

希望这个帮助