双向链表的实际应用
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解释应用程序
希望对您有所帮助!
你可以用算法来思考。比如,假设您要存储一些数据,您必须在其中插入一些元素。最好的数据结构是链表,因为它在 O(1) 中完成任务。
接下来,假设您要访问数据中的某些元素。数组将是最好的,因为它需要 O(1) 来访问一个元素。但它在 O(n) 中插入。
现在,在链表中,我们可以维护所有节点的映射,因此这将使访问复杂度为 O(1)。插入的东西已经在 O(1) 中了。
现在剩下的就是删除部分。在数组中,删除是在 O(n) 中完成的,而在链表中,删除也是在 O(n) 中完成的(如果您只有要删除的元素)。
然而,在链表中,如果我们有前一个节点的地址,那么我们可以在 O(1) 中删除所需的节点。到这里,双向链表的使用就来了。
上述数据结构完成了系统中最重要的三件事,即插入、删除和访问 O(1) 中的元素。
什么时候使用双向链表似乎是现实生活中的最佳选择?有人可以建议实际使用它吗?
在许多操作系统中,线程调度程序(选择什么进程需要 运行 的东西)随时维护所有进程的双向链表 运行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解释应用程序
希望对您有所帮助!
你可以用算法来思考。比如,假设您要存储一些数据,您必须在其中插入一些元素。最好的数据结构是链表,因为它在 O(1) 中完成任务。 接下来,假设您要访问数据中的某些元素。数组将是最好的,因为它需要 O(1) 来访问一个元素。但它在 O(n) 中插入。
现在,在链表中,我们可以维护所有节点的映射,因此这将使访问复杂度为 O(1)。插入的东西已经在 O(1) 中了。 现在剩下的就是删除部分。在数组中,删除是在 O(n) 中完成的,而在链表中,删除也是在 O(n) 中完成的(如果您只有要删除的元素)。
然而,在链表中,如果我们有前一个节点的地址,那么我们可以在 O(1) 中删除所需的节点。到这里,双向链表的使用就来了。
上述数据结构完成了系统中最重要的三件事,即插入、删除和访问 O(1) 中的元素。