用于模拟数组的数据结构,可以在任何位置添加数据?

时间:2012-04-21 09:00:38

标签: c data-structures

我想存储少量具有恒定大小(c char)的项目(小于255),并且能够执行以下操作:

  • 将值附加到任意位置,并让其他项目保留其先前的顺序。

  • 删除项目并让其他项目保留其订单(如上所述)。

  • 找到项目的下一个和上一个。

我已经尝试过使用一个数组并通过将所有项目移动到一个地方前面来创建一个函数来添加一个值。删除可能会发生一些事情,但效率太低。当然,我不介意使用图书馆,只要它随时可用且免费。

2 个答案:

答案 0 :(得分:5)

  • 数组 - 访问:O(1),插入:O(n)
  • 双链表 - 访问O(n),上一个/下一个:O(1),插入(*):O(1)
  • 存储子节点数的RB树:所有操作的O(log n)。

(*):首先需要遍历列表才能到达位置(O(n))。

注意:不,数组不是凌乱,实现起来非常简单。另外,正如您所看到的,根据使用情况,它可以非常有效。

根据元素的数量以及您对数组实现的评论,您应该坚持使用数组。

答案 1 :(得分:0)

您可以使用双链表。但是,如果您想保持数组行为(例如,通过索引快速访问元素(O(1),LL为O(n)),这将不起作用)