本文引自【数据结构(C语言版)严蔚敏 吴伟民】
2.1 线性表的类型定义
线性表(Linear List)
线性表(Linear List)是由同类型数据元素构成的有限序列。在数学上,它表示为: L ={a1, a2, a3, …, an}
其中{a1, a2, a3, …, an} 是数据元素,( n ) 为线性表的长度。当 ( n = 0 ) 时,线性表为空表。
-
举个例子:
假设有一个线性表 L = [10, 20, 30, 40, 50]10 的直接后继是 20,10 没有直接前驱。
20 的直接前驱是 10,直接后继是 30。
30 的直接前驱是 20,直接后继是 40。
40 的直接前驱是 30,直接后继是 50。
50 的直接前驱是 40,50 没有直接后继。 -
线性表具有以下特点:
- 唯一的第一个元素,只有一个无前驱元素。
- 唯一的最后一个元素,只有一个无后继元素。
- 除第一个元素和最后一个元素外,每个元素有且只有一个前驱和一个后继。
2.2 线性表的顺序表示和实现
线性表(Sequential List)是用一段连续的存储单元依次存储线性表的数据元素,简称顺序表。假设线性表的每个元素需占用个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。
-
则线性表中第i+1个数据元素的存储位置 LOC(ai+1) 和第 i 个数据元素的存储位置 LOC(ai) 之间满足下列关系:
LOC(ai)= LOC(ai) + L -
一般来说,线性表的第 i 个数据元素 ai 的存储位置为
LOC(ai)=LOC(a1) + (i-1) x LLOC(a1)是线性表的第一个数据元素的存储位置 , 通常称做线性表的起始位置或基地址。
-
顺序表的结构
#define MAXSIZE 100 // 最大长度 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; //ElemType *data; 数组指针data指示线性表的基地址 int length; } SqList;
-
顺序表的基本操作
1. 初始化顺序表 void InitList(SqList *L) { L->length = 0; } 2. 插入元素 bool ListInsert(SqList *L, int i, ElemType e) { if (i < 1 || i > L->length + 1) // 检查插入位置合法性 return false; if (L->length == MAXSIZE) // 检查表是否已满 return false; for (int k = L->length - 1; k >= i - 1; k--) // 移动元素 L->data[k + 1] = L->data[k]; L->data[i - 1] = e; // 插入元素 L->length++; return true; } 3. 删除元素 bool ListDelete