搜索正确的数据结构(添加头,交换,删除,...)

时间:2013-01-04 15:43:56

标签: c# data-structures

我正在寻找提供以下内容的数据结构:

  1. 在前面添加元素
  2. 交换两个元素
  3. 删除元素
  4. 当我添加一个元素(不是在最后一个位置)时,其他元素应该滑回(就像在队列中一样)
  5. 访问每个元素
  6. 通用会很好,但不是必需的
  7. 我在MSDN上找到的数据结构无法满足我的要求

    • ListLinkedList不提供互换方式
    • 我可以用ArrayList做到这一点,但是当我在前面位置添加一个元素时,我猜它的效率很低(因为后面的所有元素都必须被复制和读取)
    • HashTable未提供订单
    • QueueStack不提供交换,随机访问,...

    我可以编写自己的数据结构,但我不想重新发明轮子,因为.NET库非常庞大。

    编辑:

    我需要一个提供类似事务的数据结构,例如进程优先级调度程序。第一个条目具有最高优先级,最后一个条目具有最低优先级。有时我必须改变元素的优先级(交换)或完全删除元素(删除)。我最近添加的元素应该具有最高优先级(这就是为什么我将它添加到前面位置)

2 个答案:

答案 0 :(得分:3)

你真的需要弄清楚你打算做这些操作的频率,因为你列出了极少数的操作。

以下是我对您的想法的看法:

  • 如果已编入索引get / set,则实现交换方法是微不足道的。
  • 如果你担心复制时间然后反转你的列表所以你可以在前面有便宜的插入,你需要重写一些逻辑来拉它,但这不会停止使用数组作为后面端。

另外作为最后一点,您确定不需要某种自动排序,因为这样可以使这更容易。

答案 1 :(得分:2)

听起来你正在寻找的是一堆。

Wikipedia: Heap

堆通常用于管理优先级,并且可以在队列顶部具有最高优先级项,并根据添加或从堆中删除不同优先级的项重新排列。

这是一个通用集合库,它具有间隔堆的实现:

http://www.itu.dk/research/c5/