线性表的定义和特点
线性表是具有相同特性的数据元素的一个有限序列
(a1,a2,..ai-1,ai,ai+1,...an)
a1:线性起点
ai-1为ai的直接前驱,ai+1为ai的直接后驱
an为线性终点,当n=0时称为空表
- 线性表
同一线性表中的元素必定具有相同特性,数据元素间的关系时线性关系
- 线性表的逻辑特征是:
- 在非空的线性表,有且仅有一个开始节点a1,它没有直接前趋,而仅有一个直接后继a2
- 有仅有一个终端结点an,它没有直接后继,而仅有一个直接前趋an-1
- 其余的内部结点ai(2≤i≤n-1)都有且仅有一个直接前趋ai-1和一个直接后继ai+1
线性表是一种典型的线性结构
线性表的类型定义
- 抽象数据类型线性表的定义如下:
基本操作
- InitList(&L)
- 操作结果:构造一个空的线性表L
- DestroyList(&L)
- 初始条件:线性表L已经存在
- 操作结果:销毁线性表L
- ClearList(&L)
- 初始条件:线性表L已经存在
- 操作结果:将线性表L重置为空表
- ListEmpty(L)
- 初始条件:线性表L已经存在
- 操作结果: 若线性表L为空表,则返回TURE,否则返回FALSE
- ListLength(L)
- 初始条件:线性表L已经存在
- 操作结果:返回线性表L中的数据元素个数
- GetElem(L,i.&e)
- 初始条件:线性表L已经存在,1≤i≤ListLength(L)
- 操作结果:用e返回线性表L中第i个数据元素的值
- LocateElem(L,e,compare())
- 初始条件:线性表L已经存在,compare()是数据元素判定函数
- 操作结果:返回L中第1个与e满足compare()的数据元素的位序。若这样的数据元素不存在则返回值为0
- PriorElem(L,cur_e,&pre_e)
- 初始条件:线性表L已经存在
- 操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无意义
- NextElem(L,cur_e,&next_e)
- 初始条件:线性表L已经存在
- 操作结果:若cur_e是L的数据元素,且不是第最后一个,则用next_e返回它的后继,否则操作失败,next_e无意义
- Listlnsert(&L,i,e)
- 初始条件:线性表L已经存在,1≤i≤ListLength(L)+1
- 操作结果:在L的第i个位置之前插入新的数据元素e,L的长度加一
- ListDelete(&L,i,&e)
- 初始条件:线性表L已经存在,1≤i≤ListLength(L)
- 操作结果: 删除L的第i个数据元素,并用e返回其值,L的长度减一
- ListTraverse(&L,visited())
- 初始条件:线性表L已经存在
- 操作结果:依次对线性表中每个元素调用visited()
线性表的存储结构
- 在计算机内,线性表有两种基本的存储结构:
顺序存储结构和链式存储结构
线性表的顺序存储表示
线性表的顺序表又称为顺序存储结构或顺序映像
顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。
线性表:(a1,a2,...,ai-1,ai,ai+1,...,an)
线形表顺序存储结构占用一片连续的存储空间。知道某个元素的存储位置就可以计算其他元素的存储位置