Skip to content

线性表

线性表的定义

线性表为 n (n0) 个数据元素的有限序列。记为

L=(a1,a2,,ai,,an)

其中 L 为表名,ai 为表中的元素,是不可再分的源自数据,亦称为结点或记录。 n 是表中元素的个数,称为表长。当 n=0 时,称为空表。
线性表中的第一个元素称为 表头(head),最后一个元素称为 表尾(tail)。

线性表的特点

  1. 有穷性:线性表中元素个数有限。
  2. 有序性:线性表中元素有序,即元素之间存在一对一的前驱后继关系。
  • 表中相邻的两个元素 ai,ai+1 构成序对,aiai+1 的直接前趋,ai+1ai 的直接后继。
  • 存在唯一的第一个元素(表头)和最后一个元素(表尾)。
  1. 相同性:线性表中的元素类型相同。

顺序表

  1. 既可以顺序访问,也可以随机访问(即通过下标访问)。
  2. 通过数组实现,可以是静态数组或动态数组。
  3. 数组的大小要大于等于线性表的长度。
  4. i 个元素存储在第 i1 个物理位置上,即数组下标为 i1 的位置。

设顺序表的起始存储位置为 LOC(1),第 i 个元素的存储位置为 LOC(i),则有:

LOC(i)=LOC(1)+(i1)×sizeof(DataType)

顺序表的性能

操作时间复杂度空间复杂度操作时间复杂度空间复杂度
初始化initListO(1)O(1)清空clearListO(1)O(1)
求长度lengthO(1)O(1)取值getElemO(1)O(1)
插入insertO(n)O(1)删除deleteO(n)O(1)
查找searchO(n)O(1)复制copyListO(n)O(n)

单链表

单链表是一种链式存储结构,由一系列结点组成。每个结点包括两部分:数据域data和指针域link。数据域存储数据元素,指针域存储下一个结点的地址。 链表中的最后一个节点没有后继,其指针域为 NULL

单链表的特点

  1. 表中的数据元素的逻辑顺序和物理顺序不一定相同。
  2. 单链表的长度可以动态变化。
  3. 遍历和查找只能从头指针指示的第一个结点开始,逐个结点依次查找。
  • 即不能随机访问,只能顺序访问。
  1. 插入和删除操作只需修改指针域,不需要移动结点。
  2. 由于链接表的每个结点带有指针域,所以占用的存储空间比顺序表大。

头节点:链表中第一个结点称为头节点,它是头指针指向的结点。头节点不存储数据,只是为了方便操作而引入的。 尾结点:链表中最后一个结点称为尾结点,为了方便插入到尾部而建立,其指针域为 NULL

单链表的性能

操作时间复杂度空间复杂度操作时间复杂度空间复杂度
初始化initListO(1)O(1)清空clearListO(n)O(1)
求长度lengthO(n)O(1)取值getElemO(n)O(1)
插入insertO(n)O(1)删除deleteO(n)O(1)
查找searchO(n)O(1)复制copyListO(n)O(n)

循环链表

循环链表是一种特殊的单链表,其尾结点指向首结点,形成一个环。

可以带头结点,也可以不带头结点。 若带头结点,遍历到头节点的时候需要跳过。

双向链表

拥有两个指针域lLinkrLink,分别指向前驱和后继。

顺序表和单链表的比较

存储方面

  1. 顺序表的存储密度高,存储密度为 1,而链表的存储密度小于 1
  2. 顺序表的存储空间是静态分配的,链表的存储空间是动态分配的。

存取方面

  1. 顺序表支持随机存取,时间复杂度为 O(1),而链表只支持顺序存取,时间复杂度为 O(n)
  2. 插入和删除操作,顺序表的时间复杂度为 O(n),链表的时间复杂度为 O(1)

安全方面

在顺序表的情形,只要知道数组的名字和下标,就可以访问任何元素。
而在单链表中如果找不到结点的地址,结点所保护的数据就是安全的。 故单链表的安全保密性比顺序表好。

数据结构与算法设计复习笔记