c - 使用什么数据结构来模拟一个可以在任何位置添加数据的数组?

标签 c data-structures

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

  • 将一个值附加到任意位置,并让其他项保留它们之前的顺序。

  • 删除一个项目并让其他项目保留它们的顺序(如上)。

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

我试过使用一个数组并创建一个函数来添加一个值,方法是将它后面的所有项目向前移动一个位置。删除也会发生同样的事情,但效率太低了。当然,我不介意必须使用一个图书馆,只要它随时可用且免费。

最佳答案

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

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

注意:不,数组并不凌乱,实现起来真的很简单。同样如您所见,根据使用情况,它可能非常高效。

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

关于c - 使用什么数据结构来模拟一个可以在任何位置添加数据的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10257595/

相关文章:

c++ - 带有 PAGE_GUARD 的 VirtualProtect 不使用局部变量

c - 这是什么原因? (研究段错误的原因)

c - 打印结构体和枚举的矩阵

list - unix - 如何从字典列表中的每个字典中获取 (2) 列

c - C 中的实例级抽象

c++ - 在程序中使用函数会加快执行速度吗?

php - 处理复杂的数据结构值

java - 内核线程定时器中断的优先级队列实现

c# - 循环缓冲区的用途是什么?

algorithm - Little-oh 和 Little-omega 时间复杂度