线性表基础概念,线性表的顺序表表示和实现
下面的代码片段我都以完整的C++程序编写了下来,详情请看C++实现顺序表
线性表
线性表(linear list)是最基本、最简单、也是最常用的一种数据结构。线性表是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
-
特征
线性表是具有相同特征的数据元素的一个有限序列。
线性表(linear list)由n(n>=0)个数据元素(结点)a1,a2,…,an组成的有限序列
线性表中元素的个数n(n≥0)称为线性表的长度,n=0时称为空表。
对于非空的线性表或线性结构,特点为:1.存在唯一的一个被称作"第一个"的数据元素;
2.存在唯一的一个被称作"最后一个"的数据元素;
3.除第一个之外,结构中的每个数据元素均只有一个前驱;
4.除最后一个之外,结构中的每个数据元素均只有一个后继。此图更直观的描述它们之间的关系:
线性表是一种典型的线性结构 -
类型定义
抽象数据类型线性表的定义如下:
基本操作具体:(下面是一些常用操作函数名词,函数内容需具体定义)- InitList(&L) (Initialization List)初始
//构造一个空的线性表L - DestroyList(&L) 销毁
//销毁线性表L - ClearList(&L) 清空
//将线性表L重置为空表 - ListEmpty(L)
//判断线性表L是否为空表,若为空表则返回TURE;否则返回FALSE - ListLength(L) 计算长度
//返回线性表L中的数据元素个数 - GetElem(L,i,&e) 获取元素
//条件:1< = i < = ListLength(L)
//用e返回线性表L中第i个数据元素的值 - LocateElem(L,e)
//返回L中第1个值与e相同的元素在L中的位置。若这样的元素不存在,则返回值为0 - PriorElem(L,cue_e,&pre_e) 求前趋
//若cur_e是L的数据元素,且不是第一个,则用pre_e返回他的前趋;否则操作失败,pre_e无意义 - NextElem(L,cur_e,&next_e) 求后继
//若cur_e是L的数据元素,且不是最后一个,则用next_e返回他的后继;否则操作失败,next_e无意义 - ListInsert(&L,i,e) 插入元素
//在第L的第i个位置之前插入新的数据元素e,L的长度加一 - ListDelete(&L,i) 删除元素
//删除L的第i个数据元素,L的长度减一 - ListTraverse(L) 遍历
//对线性表L进行遍历,在遍历过程中对L的每个结点访问一次
线性表的顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
- InitList(&L) (Initialization List)初始
-
线性表的顺序存储
线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。
逻辑位序和物理位序相差1
线性表顺序存储结构占用一片连续的存储结构。知道某个元素的存储位置就可以知道其他元素的存储位置,所以线性表的顺序存储结构是一种随机存取的存储结构。
假设线性表的每个元素占 l 个存储单元,则第 l+1个数据元素的存储位置和第i个数据元素的存储位置之间满足关系: LOC(ai+1)= LOC(ai)+ l
由此,所有数据元素的存储位置均可由第一个数据元素的存储位置得到: