📜  链表数据结构的应用

📅  最后修改于: 2021-10-23 07:58:54             🧑  作者: Mango

链表是一种线性数据结构,其中元素不存储在连续的内存位置。链表中的元素使用指针链接,如下图所示:

链表在计算机科学中的应用——

  1. 栈和队列的实现
  2. 图的实现:图的邻接表表示是最流行的,它使用链表来存储相邻的顶点。
  3. 动态内存分配:我们使用空闲块的链表。
  4. 维护姓名目录
  5. 对长整数执行算术运算
  6. 通过在链表的节点中存储常量来操作多项式
  7. 表示稀疏矩阵

链表在现实世界中的应用——

  1. 图像查看器– 上一个和下一个图像是链接的,因此可以通过下一个和上一个按钮访问。
  2. Web 浏览器中的上一页和下一页– 我们可以通过按后退和下一页按钮访问在 Web 浏览器中搜索的上一页和下一页 url,因为它们被链接为链表。
  3. 音乐播放器 – 音乐播放器中的歌曲链接到上一首和下一首歌曲。您可以从列表的开头或结尾播放歌曲。

循环链表的应用:

  1. 用于队列的实现。与这个实现不同的是,如果我们使用循环链表,我们不需要维护前后两个指针。我们可以维护一个指向最后一个插入节点的指针,并且 front 总是可以作为 next of last 获得。
  2. 循环列表在应用程序中非常有用,可以重复遍历列表。例如,当 PC 上运行多个应用程序时,操作系统通常会将正在运行的应用程序放在一个列表中,然后循环遍历它们,给每个应用程序一段执行时间,然后让它们等待而 CPU 分配给另一个应用程序。操作系统使用循环列表很方便,这样当它到达列表的末尾时,它可以循环到列表的前面。
  3. 循环双向链表用于实现斐波那契堆等高级数据结构。

一个示例问题:

设计一个有效支持以下操作的数据结构。

  1. getMin : 获取最小值
  2. extractMin :删除最小值
  3. getMax : 获取最大值
  4. extractMax :删除最大值
  5. insert :插入一个项目。可以假设到目前为止插入的项目总是大于最大值。例如,有效的广告订单是 10、12、13、20、50。

双向链表是这里最好的解决方案。我们维护头指针和尾指针,因为插入的项目总是最大的,我们在尾插入。从头部或尾部删除一个项目可以在 O(1) 时间内完成。所以所有操作都需要 O(1) 时间。

最近关于链表的文章

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。