繁体   English   中英

哪种数据结构像双向链表和数组的组合?

[英]Which data structure is like a combination of a doubly-linked list and an array?

是否有任何已经创建的结构仅仅是doubly linked list nodes basic array

我的意思是,然后您使用get(int index)它将直接从数组( array[i].element )返回元素。 有了这种结构,我也可以轻松地进行foreach,因为每个元素都将彼此链接,因此我无需考虑空白数组的位置。

问:为什么我需要这个? 答:我有无限的内存,我知道我需要多大的数组,并且我希望这种结构最快。

这是一个小的C ++ 11容器指南 ,只需设置您的约束并遵循箭头:

在此处输入图片说明

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];

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

它像一个双向链接列表:

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

像数组一样:

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

您要查找的get操作是operator[]std::deque::at

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

强制性基本用例

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

希望这个帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM