链表介绍
链表与顺序表一样,也属于线性表。
一个线性表是某类数据元素的一个集合,表里同时记录着元素之间的顺序关系。
线性表的数据之间有顺序关系,顺序关系分为两种,一种是物理有序,即数据物理存储的位置顺序与数据之间的顺序关系一致,另一种是逻辑有序,即数据之间的顺序关系是由某种逻辑关系(如指针)来决定的,与物理存储的位置无关。
顺序表是物理有序,而链表是逻辑有序。
一、链表简介
链表(Linked list)是一种线性表,链表中的数据存储在一个个的节点里,节点不一定是连续存储的,在每一个节点中,除了存储数据以外,还会存储下一个节点的位置信息(内存地址),根据此位置信息(链接)可以找到下一个节点。
在链表的每一个节点中,分为不同的存储区域,信息域(元素域)和链接域(引用域)。
信息域用来存储该节点中具体保存的数据。
链接域用来存储指向的节点的位置信息(内存地址)。
链表的“头”指向第一个节点,第一个节点是链表的头节点(首节点),从头节点出发,可以依次找到链表中的所有节点。
节点是分散存储的,每个节点的链接域都可以指向空,将这些节点链接成一个链表,就是从头节点开始,链接域依次指向下一个节点,形成一个链。
二、链表的分类
1. 单向链表
最简单的链表是单向链表。
单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域和一个链接域。链接域指向链表中的下一个节点,而最后一个节点的链接域指向一个空值。
2. 双向链表
双向链表又称双面链表,相对于单向链表,双向链表除了向后的链接域,还有向前的链接域。
每个节点包含三个域,一个信息域和两个链接域。一个链接域指向前一个节点,当此节点为第一个节点时,指向空值,另一个链接域指向下一个节点,当此节点为最后一个节点时,指向空值。
3. 单向循环链表
单向循环链表是将单向链表“首尾相连”。
单向链表中最后一个节点的链接域指向的是空,而单向循环链表中,最后一个节点的链接域指向链表的头节点,形成一个“环形”的链。
三、链表与顺序表的对比
顺序表是物理有序的,顺序表的构建需要申请连续的存储空间,在进行扩容时又需要进行数据的迁移,所以使用起来并不是很灵活。
链表是逻辑有序的,每个节点都可以单独存储,可以充分利用计算机内存空间,实现灵活的内存动态管理。但是,由于链表增加了结点的链接域(指针),空间开销比较大。
顺序表可以根据内存地址的关系(索引)快速读取到任意位置的数据。
链表不能快速地访问到指定数据,必须从头节点开始寻找。
除此之外,因为顺序表和链表的不同结构,对它们进行添加、删除数据等操作的原理不同,耗时也不同。