线性表
什么是线性表
线性表是一种最简单的线性结构。
什么是线性结构?简单地说,线性结构是一个数据元素的有序(次序)集合。它有四个基本特征:
在数据元素的非空有限集中,
- ①存在惟一的一个被称做”第一个”的数据元素;
- ②存在惟一的一个被称做”最后一个”的数据元素;
- ③除第一个之外,集合中的每个数据元素均只有一个前驱;
- ④除最后一个之外,集合中的每个数据元素均只有一个后继。
这里的”有序”仅指在数据元素之间存在一个”领先”或”落后”的次序关系,而非指数据元素”值”的大小可比性。比较典型的线性结构:线性表、栈、队列、串等。
2.1 线性表的类型定义
2.1.1 线性表的定义
线性表(linear_list)是n个数据元素的有限序列,记作(a1, a2, …, ai, …, an)。
线性表的数学模型(形式定义):
含有n个数据元素的线性表是一个数据结构
LinearList=(A, R)
其中:
A={ai| ai∈ElemType , 1≤i≤n, n≥0}
R={r}
r={<ai, ai+1> | 1≤i≤n -1}
说明:
①线性表的数据元素可以是各种类型(整、实、记录类型等)
typedef int ElemType;
typedef char ElemType;
等;
②同一线性表中的数据元素必须具有相同的特性,属同一类型;
③关系r是一个有序偶对的集合,即对于非空的线性表(a1, a2, …, ai-1, ai, ai+1, …, an), ai-1 领先于ai,表示了数据元素之间的相邻关系,称ai-1是ai的直接前驱,ai是ai-1的直接后继;
④序列中数据元素的个数 n 定义为线性表的表长,n=0 时的线性表被称为空表;
⑤称i为数据元素在线性表中的位序。
2.1.2 线性表的抽象数据类型
ADT List {
Data:
一个线性表L定义为L=(a1,a2,…,an),当L=( )时定义为一个空表。
Operation:
InitList(& L) //初始化线性表L,即把它设置为一个空表
DestroyList(&L) //销毁顺序线性表L
ClearList (& L) //将L重置为空表
ListEmpty(L) //判断L是否为空,若空则返回true,否则返回false
ListLength (L) //返回L中数据元素的个数
GetElem(L, pos) //返回线性表第pos个数据元素的值
LocateElem(&L,e,compare());
//返回L中第1个与e满足关系compare()的数据元素的位序。若这样的数据元素不存在,则返回0
ListInsert (&L, pos, e)
//在L的pos位置插入e,线性表L长度加1
ListDelete (&L, pos)
//删除L的第pos个数据元素
ListTraverse(L, visit( ))
//遍历线性表L,依次对L的每个数据元素调用函数visit( )
CreateList(&L, n, visit ())
//创建有n个元素的线