双向链表的实际应用

Real life use of doubly linked list

什么时候使用双向链表似乎是现实生活中的最佳选择?有人可以建议实际使用它吗?

在许多操作系统中,线程调度程序(选择什么进程需要 运行 的东西)随时维护所有进程的双向链表 运行ning .这使得将进程从一个队列(例如,需要转向 运行 的活动进程列表)移动到另一个队列(例如,被阻塞并等待释放它们的进程列表)变得容易).这里使用双向链表允许这些拼接中的每一个都在 O(1) 时间内重新连接到 运行,并且没有任何内存分配,并且双向链表结构非常适合使用队列实现调度程序(你只需要从前面拉出东西。)

添加到 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

您想从特定点遍历两侧的任何应用程序。

双重linked 列表用于构建MRU/LRU(Most/Least 最近使用)缓存。您可以在 link https://www.geeksforgeeks.org/design-a-data-structure-for-lru-cache/

中找到使用 HashMap 和 DoublyLinkedList 的实现

LRU 缓存的主要应用之一是在使用 most/least 个最近访问的项目的情况下使用它,例如在 android phone 主屏幕的情况下保存最近使用的应用程序。这是一个link解释应用程序

http://www.primarydigit.com/blog/an-application-of-lru-least-recently-used-data-structure-your-phones-home-screen

希望对您有所帮助!

你可以用算法来思考。比如,假设您要存储一些数据,您必须在其中插入一些元素。最好的数据结构是链表,因为它在 O(1) 中完成任务。 接下来,假设您要访问数据中的某些元素。数组将是最好的,因为它需要 O(1) 来访问一个元素。但它在 O(n) 中插入。

现在,在链表中,我们可以维护所有节点的映射,因此这将使访问复杂度为 O(1)。插入的东西已经在 O(1) 中了。 现在剩下的就是删除部分。在数组中,删除是在 O(n) 中完成的,而在链表中,删除也是在 O(n) 中完成的(如果您只有要删除的元素)。

然而,在链表中,如果我们有前一个节点的地址,那么我们可以在 O(1) 中删除所需的节点。到这里,双向链表的使用就来了。

上述数据结构完成了系统中最重要的三件事,即插入、删除和访问 O(1) 中的元素。