搜索正确的数据结构(添加头部,交换,删除,…)
本文关键字:交换 删除 头部 添加 数据结构 搜索 | 更新日期: 2023-09-27 17:50:37
我正在寻找一个数据结构,它提供:
- 在前端添加元素
- 交换两个元素 <
- 删除元素/gh>
- 当我添加一个元素(不是在最后一个位置)时,其他元素应该滑回(像在队列中)
- 访问每个元素
- generic很好,但不是必需的
我在MSDN上找到的数据结构不符合我的要求
-
List
和LinkedList
不提供交换方法 - 我可以用
ArrayList
来做,但我想当我在前面添加一个元素时,它的效率很低(因为后面的所有元素都必须被复制和读取) -
HashTable
未提供订单 -
Queue
和Stack
不提供交换,随机访问,…
我可以编写自己的数据结构,但我不想重新发明轮子,因为。net库是如此之大。
编辑:
我需要一个提供类似进程优先级调度器的数据结构。第一个条目的优先级最高,最后一个条目的优先级最低。有时我必须更改元素的优先级(交换)或完全删除元素(删除)。我最近添加的元素应该具有最高的优先级(这就是为什么我把它添加在前面的位置)
你真的需要弄清楚你要多久做一次这些操作,因为你列出了非常多的操作。
这是我对你的想法的看法:
- 实现交换方法是微不足道的,如果你已经索引get/set。
- 如果你担心复制时间,那么反转你的列表,这样你就可以在前面有便宜的插入,你需要重写一点逻辑来实现它,但这不会停止使用数组作为后端。
最后需要说明的是,您确定不需要某种自动排序,因为这样会使此操作更容易。
听起来你要找的是堆。
维基百科:堆
堆通常用于管理优先级,并且可以在队列顶部拥有最高优先级的项目,并根据从堆中添加或删除的不同优先级的项目重新排列。
下面是一个泛型集合库,它实现了一个间隔堆:
http://www.itu.dk/research/c5/