线性表初学笔记

1. 线性表的定义

线性表(List):零个或多个数据元素的有限序列。

线性表元素的个数 n (n >= 0) 定义为线性表的长度。当 n = 0 时,称为空表

2. 线性表的抽象数据类型

注意:

当你传递一个参数给函数时,这个参数会不会在函数内被改动决定了使用什么参数类型。

  • 如果需要被改动,则需要传递指向这个参数的指针
  • 如果不用被改动,可以直接传递这个参数。

3. 线性表的顺序存储结构

3.1 顺序存储定义

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

3.2 顺序存储方式

线性表的每个数据元素的类型都相同,因此可用C语言(或其他语言)的一维数组来实现顺序存储结构,
即把第一个数据元素存到数组下标为 0 的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。

线性表的顺序存储的结构代码:

#define MAXSIZE 20;             // 存储空间初始分配量
typedef int ElemType;           // ElemType 类型根据实际情况而定,示例为 int
typedef struct {
    ElemType date[MAXSIZE];     // 数组,存储数据元素
    int length;                 // 线性表当前长度
} SqList;

描述顺序存储结构需要三个属性:

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

3.3 数组长度与线性表长度的区别

数组长度是存放线性表的存储空间的长度,存储分配后此量一般不变

线性表的长度是线性表中数据元素的个数,随着线性表的插入和删除操作的进行,此量可以变化

在任意时刻,线性表的长度应该小于等于数组的长度。

3.4 地址计算方法

线性表的起始是 1;C语言中数组的起始是 0

因此:线性表的第 i 个元素存储在数组下标为 i - 1 的位置。

用数组存储顺序表意味着要分配固定长度的数组空间,由于线性表中可以进行插入和删除操作,
因此分配的数组空间要大于等于当前线性表的长度。

存储器中的每个存储单元都有自己的编号,这个编号称为地址。

对每个线性表位置的存入或者取出数据,所花费的时间相同,即存取时间性能为 O(1)。
我们通常把具有这一特点的存储结构称为随机存取结构

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

4.1 获得元素操作

若要实现 GetElem 操作,即将线性表 L 中的第 i 个元素返回,只需 i 的数值在数组下标范围内,
将数组第 i - 1 下标的值返回即可。

4.2 插入操作

插入算法的思路:

  1. 如果插入位置不合理,抛出异常;
  2. 如果线性表长度大于等于数组长度,则抛出异常或动态增加容量;
  3. 从最后一个元素开始向前遍历到第 i 个位置,分别将它们都向后移动一个单位;
  4. 将要插入的元素填入位置 i 处;
  5. 表长加 1。
posted @ 2025-09-01 11:55  焯几何分布  阅读(46)  评论(0)    收藏  举报