第三章 线性表

3.1 抽象数据类型

ADT线性表(List)

  1. Data

    线性表的数据对象集合为 {\(a_1,a_2,……,a_n\)},每个元素的类型均为DataType。其中,除第一个元素\(a_1\)外,每一个元素有且只有一个直接前驱元素,除了最后一个元素\(a_n\)外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。

  1. Operation
    • InitList(*L):初始化操作,建立一个空的线性表L。
    • ListEmpty(L):若线性表为空,返回true,否则返回fa1se·
    • ClearList(*L):将线性表清空。
    • GetElem(*L,i,*e):将线性表L中的第i个位置元素值返回给e。
    • LocateElem(L,e):在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功;否则,返回0表示失败。
    • ListInsert(*L,i,e):在线性表L中的第i个位置插入新元素e。
    • ListDelete(*L,i,*e):删除线性表L中第i个位置元素,并用e返回其值。
    • ListLength(L):返回线性表L的元素个数。

3.2 线性表的顺序存储结构

3.2.1. 顺序存储定义

    线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

3.2.2. 实现方式:一维数组

3.2.3. 属性

  • 存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。
  • 线性表的最大存储容量:数组长度MAXSIZE
  • 线性表的当前长度:length

注意:数据长度与线性表长度的区别

3.3 顺序存储结构的插入与删除

3.3.1 获得元素操作

3.3.2 插入操作

3.3.3 删除操作

3.4 线性表的链式存储结构

3.4.1 线性表链式存储结构定义

  1. 结点 = 数据域(指针或链) + 指针域
  2. 头指针与头节点:
    • 头指针:
    • 头结点:
    • 异同:

3.5 单链表的操作

3.5.1 单链表的读取

  1. 获取第i个数据的算法思路:
    (1)
    (2)
    (3)
    (4)
  2. 代码:

  1. 时间复杂度:

3.5.2 单链表的插入

  1. 获取第i个数据的算法思路:
    (1)
    (2)
    (3)
    (4)
  2. 代码:

  1. 时间复杂度:

3.5.3 单链表的删除

  1. 获取第i个数据的算法思路:
    (1)
    (2)
    (3)
    (4)
  2. 代码:

  1. 时间复杂度:

3.5.4单链表的创建

  1. 算法思路:
    (1)
    (2)
    (3)
    (4)循环:
    ① ;
    ② ;
    ③ (i)   头插法:,
      (ii)尾插法:;
  2. 代码:
/*头插法*/

/*尾插法*/

3.5.5单链表的整表

  1. 算法思路:
    (1)
    (2)
    (3)
    (4)循环:
    ① ;
    ② ;
    ③ ;
  2. 代码:

3.5.6单链表结构与顺序存储结构的优缺点

3.6 静态链表

3.6.1 初始化

3.6.2 插入

3.6.3 删除

3.6.4 优缺点

3.7 循环链表


3.8 双向链表


posted @ 2025-11-04 16:22  骆驼丶浮云  阅读(5)  评论(0)    收藏  举报