在现实生活场景中,何时使用双向链表似乎是最佳选择?有人可以建议实际使用吗?
答案 0 :(得分:16)
添加到templatetypedef的答案。
您考虑使用以下应用程序:
- A music player which has next and prev buttons.
- Represent a deck of cards in a game.
- The browser cache which allows you to hit the BACK-FORWARD pages.
- Applications that have a Most Recently Used list (a linked list of file names)
- Undo-Redo functionality
您想要从特定点遍历双方的任何应用程序。
答案 1 :(得分:7)
在许多操作系统中,线程调度程序(选择哪些进程需要在哪些时间运行的东西)维护一个双向链接的列表,其中包含随时运行的所有进程。这使得将进程从一个队列(例如,需要转向运行的活动进程列表)移动到另一个队列(例如,被阻止并等待释放它们的进程列表)变得容易。这里使用双链表允许这些拼接和重新连接中的每一个在时间O(1)中运行并且没有任何内存分配,并且双链表结构适用于使用队列实现调度程序(仅限于您需要从前面拉出东西。)
答案 2 :(得分:0)
双链表用于构造MRU / LRU(最近使用的最多/最少)缓存。您可以在链接https://www.geeksforgeeks.org/design-a-data-structure-for-lru-cache/
中使用HashMap和DoublyLinkedList找到实现。LRU缓存的主要应用之一是在使用最近/最近访问的项的情况下使用它,例如在android手机主屏幕上保存最近使用的应用的情况下。这是解释应用程序的链接
希望这会有所帮助!
答案 3 :(得分:0)
您可以从算法上进行思考。像,假设您要存储一些数据,并且必须在其中插入一些元素。最好的数据结构将是链表,因为它执行O(1)中的任务。 接下来,假设您要访问数据中的某些元素。为此,数组将是最佳选择,因为它需要O(1)来访问元素。但这会插入O(n)。
现在,在链接列表中,我们可以维护所有节点的映射,因此这将使访问对象成为O(1)。插入的东西已经在O(1)中。 现在剩下的就是删除部分。在数组中,删除是在O(n)中完成的,在链接列表中,删除也是在O(n)中进行的(如果您只有要删除的元素)。
但是,在链接列表中,如果我们具有前一个节点的地址,则可以删除O(1)中的所需节点。这里是双向链表的使用。
上述数据结构在系统中完成了三个最重要的任务,即插入,删除和访问O(1)中的元素。