线性表的概念及基本操作
概念:线性表的链式链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(存储单元可以是连续的,也是可以是不连续的)。
为了表示每个数据元素 ai a i 与其直接后继数据元素 ai+1 a i + 1 之间的逻辑关系,对于数据 ai a i 来说,除了存储其本身的信息之外还需要存储一个指向其后继的信息,这两部分组成数据元素 ai a i 的存储映像称之为结点。
结点:包含两个域:存储数据元素的域成为数据域;存储直接后继存储未知的域称为指针域。指针域存储的信息称之为指针或链。 n n 个结点链接成一个链表叫做线性表的链式存储结构。
结点结构图如下:
| data | next|
抽象数据类型线性表的定义如下:
ADT List {
数据对象:D = { | a1 a 1 ∈ ∈ ElemeSet E l e m e S e t i = 1, 2, ···,n, n>= 0}
数据关系:R1 = { < ai−1 a i − 1 , ai a i > | ai−1 a i − 1 , ai a i ∈ ∈ D, i = 1, 2, ···,n}
基本操作:InitList ( &L )
操作结果:构造一个空的线性表 L L 。
DestroyList ( &L )
初始条件:线性表已经存在。
操作结果:销毁线性表L。ClearList ( &L )
初始条件:线性表 L L 已经存在。
操作结果:将置为空表。ListEmpty ( L )
初始条件:线性表 L L 已经存在。
操作结果:若为空表,则返回 true t r u e ,否则返回 false f a l s e 。ListLength ( L )
初始条件:线性表 L L 已经存在。
操作结果:返回中元素个数。GetElem ( L, i, &e )
初始条件:线性表 L L 已经存在, 。
操作结果:返回 L L 中在位置的元素。LocateElem ( L, e, compare() )
初始条件:线性表 L L 已经存在, 是元素判定函数。
操作结果:若 L L 中存在,则返回 true t r u e ,否则返回 false f a l s e 。PriorElem ( L, cur_e, &pre_e)
初始条件:线性表 L L 已经存在。
操作结果:若是 L L 的数据元素,且不是第一个,则用返回它的前驱,否则失败,& pre−e p r e − e 无定义。NextElem ( L, cur_e, &pre_e)
初始条件:线性表 L L 已经存在。
操作结果:若是 L L 的数据元素,且不是第一个,则用返回它的前驱,否则失败,& pre−e p r e − e 无定义。ListInsert ( &L, i, e)
初始条件:线性表 L L 已经存在, 。
操作结果:在 L L 位置插入元素 e e 。ListDelete ( &L, i, &e)
初始条件:线性表已经存在。
操作结果:在 L L 位置删除元素 e e 。ListTraverse ( L, visit)
初始条件:线性表已经存在。
操作结果:依次对 L L 的每个元素调用函数,一旦失败,则操作失败。} ADT List