【问题标题】:Search algorithm for a sorted double linked list排序双链表的搜索算法
【发布时间】:2010-03-16 04:49:18
【问题描述】:

作为学习练习,我刚刚尝试实现自己的“合并排序”算法。我在 std::list 上做了这个,它显然已经内置了函数 sort() 和 merge()。但是,我计划将它移到我自己制作的链表中,所以实现不是特别重要。

问题在于 std::list 没有访问随机节点的设施,只能访问前/后和单步执行。我原本打算通过这个列表执行一个简单的二分搜索,然后通过几个步骤找到我的答案。

std::list 中已经有内置函数用于执行这些排序,这让我相信有一种同样简单的方法可以按照我想要的方式访问列表。

无论如何,提前感谢您的帮助!

【问题讨论】:

  • 链表非常适合快速插入元素,但排序和搜索就不是那么好了。因此,如果您应该在使用链表时第一次以正确的顺序插入元素。

标签: algorithm linked-list search


【解决方案1】:

链表的工作方式是一次一个地遍历列表中的项目。根据定义,无法访问列表中的“随机”元素。您引用的 Sort 方法实际上通过一次遍历每个节点并将项目放置在正确位置来创建一个全新的列表。

如果您想随机访问数据,则需要以不同的方式存储数据。也许是您要存储的元素数组。

关于链表的更多信息:http://en.wikipedia.org/wiki/Linked_list

【讨论】:

  • 我认为是这种情况,但想知道是否有一些我没有想到的较少提及或访问它们的替代方法。无论如何,很好的答案,谢谢你。
【解决方案2】:

合并排序不需要访问随机元素,只需要访问列表一端的元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2012-03-22
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多