一、线性表的定义
线性表:零个或多个数据元素的有限序列。
这个定义主要涉及到两点:
1、线性表是一个序列,元素之间是有顺序的。
2、线性表的元素是有限的。
在线性表中,一个数据元素可以由若干个数据项组成。
线性表中的数据元素必须是相同类型的。
二、线性表的抽象数据类型
ADT 线性表(List)Data 线性表的数据对象集合为{a1,a2,……,an},每一个元素的类型为DataType。其中,除第一个元素a1外,每一个元素都只有一个前驱元素,除了最后一个元素an外,每一个元素都只有一个后继元素。数据元素之间的关系是一对一的关系. OperationInitList(*L); 初始化操作,建立一个空的线性表L。ListEmpty(L); 若线性表为空,返回ture,否则返回flase 。CLearList(*L); 清空线性表GetElam(L,i,*e); 将线性表的第i个元素值返回给e。LocateElam(L,e); 在线性表中查找与e相等的元素。ListInsert(*L,i,e); 在线性表第i个位置插入新元素e。ListDelete(*L,i, *e);删除线性表中第i个元素的值,并用e返回该值。ListLength(L); 返回线性表L的元素个数。
ADT 线性表(List)
Data
线性表的数据对象集合为{a1,a2,……,an},每一个元素的类型为DataType。其中,除第一个元素a1外,每一个元素都只有一个前驱元素,除了最后一个元素an外,每一个元素都只有一个后继元素。数据元素之间的关系是一对一的关系.
Operation
InitList(*L); 初始化操作,建立一个空的线性表L。
ListEmpty(L); 若线性表为空,返回ture,否则返回flase 。
CLearList(*L); 清空线性表
GetElam(L,i,*e); 将线性表的第i个元素值返回给e。
LocateElam(L,e); 在线性表中查找与e相等的元素。
ListInsert(*L,i,e); 在线性表第i个位置插入新元素e。
ListDelete(*L,i, *e);删除线性表中第i个元素的值,并用e返回该值。
ListLength(L); 返回线性表L的元素个数。
endADT
上述线性表的抽线数据结构所提及的操作是最基本的。对于更复杂的操作,可以用这些基本操作的组合来实现。
三、线性表的顺序存储结构
线性表的顺序存储结构,指的是一段地址连续的存储单元依次存储线性表的数据元素。
1、顺序存储方式
在C语言中,是用线性表的一维数组来实现顺序存储结构的。
2、数据长度与线性表的长度的区别
数组的长度是存放线性表的存储空间的长度。
线性表的长度是线性表中数据元素的个数,随着插入和删除操作的进行,这个量是变化的。
在任意时刻,线性表的长度应该小于等于数组的长度。
3、地址计算方法
线性表是从1开始数的,数组却是从0开始第一个下标的。
存储器中每一个数据单元都有自己的编号,这个编号称为地址。
如何计算数组中元素的地址。
假设该数组中的元素占用的存储单元为c个,那么线性表中第i+1个数据元素的存储位置和第i个元素的存储位置满足以下的关系:
LOC(a i+1)=LOC(a i)+c。
第i个元素的地址可以由a1推算出。
LOC(a i)=LOC(a 1)+(i-1)*c