数据结构-链表
链表可以数是一种最为基础的数据结构,链表有一组元素以一种特定的顺序组合或链接在一起,在维护数据的集合时很有用。这一点同我们常用到的数组很相似。然而,链表在很多情况下比数组更有优势。特别是在执行插入和删除操作时链表拥有更高的效率。链表需要动态地开辟存储空间,也就是存储空间是在程序运行时分配的,由于在很多应用中数据的大小在编译时不能确定,因此动态分配空间的特性也是链表的一个有点。
本章内容包括:
单链表
最简单的链表。元素之间由一个单独的指针链接。这种结构的链表允许从第一个元素开始变量到最后一个元素。
双向链表
这种形式的链表元素之间通过两个指针链接。双向链表可以正向遍历,也可以反向遍历。
循序链表
这种形式的链表最后一个元素的指针指向链表的首元素,而不是设置为NULL.这种结构的链表允许循环遍历。
一些链表的应用包括:
邮件列表:
这种应用常在电子邮件程序中看到。因为无法预测一个邮件列表到底多长。可以发件人需要在发送邮件之前先建立一个地址链表。
滚动列表
图形用户界面中常见能看到这种组件。通常在滚动列表中与每个条目相关的数据并不现实出来。一种管理这种“隐藏”数据的方式是维护一个链表,链表中每个元素保存一个在滚动列表中出现的条目数据。
多项式计算
数学中的一个重要组成部分。但对于大多数编程语言来说并没有将其作为原生的数据类型加以支持。如果让链表中的每个元素存储多项式中的一项。那么链表对于表示一个多项式就是非常有用的。例如
内存管理(本章将会讲到)
内存管理是操作系统中的一项重要的任务。操作系统必须决定如何为系统中运行的进程分配和回收存储空间。链表能够用来跟踪可供分配的内存片段信息。
LISP
在人工智能领域中一种非常重要的编程语言。LISP是LIST Processor的简写。在进行符号处理时大量使用链表。
文件的链式分配
为了消除磁盘上的外部碎片而采用的一种文件分配方式,但只适合于顺序访问。文件按照块的方式进行组织,每一块都包含一个指向文件下一块数据的指针。
其他的数据结构
有一些数据结构的实现需要依赖链表,它们是栈,队列、集合、哈希表和图。这些数据结构都将在本书中出现。