线性表01

1、线性表:由零个或多个数据元素组成的有限序列。

当元素个数为零时,是一个空表。

需强调的地方:首先它是一个序列,也就是说元素之间是有个先来后到的。若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。

2、数学语言定义:若将线性表记为(a1,a2,a3,…,ai-1,ai,ai+1,…an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。

3、数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作总称。

4、在c语言中,按照取值的不同,数据类型可以分为两类:原子类型与结构类型。

原子类型:不可以再分解的基本类型,例如整型、浮点型、字符型等。

结构类型:由若干个类型组合而成,是可以再分解的,例如整型数组是由若干个整型数据组成的。

5、抽象:是指抽取出事物具有的普遍性的本质。它要求抽出问题的特征而忽略非本质的细节,是对具体事物的一个概括。抽象是一种思考问题的方式,它隐藏了繁杂的细节。

6、我们对已有的数据类型进行抽象,就有了抽象数据类型。

7、抽象数据类型是指一个数学模型及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。比如1+1=2这样一个操作,在不同cpu的处理上可能不一样,但由于其定义的数学特性相同,所以在计算机编程者看来,它们都是相同的。

8、抽象的意义在于数据类型的数学抽象特性。而且,抽象数据类型不仅仅指那些已经定义并实现的数据类型,还可以是计算机编程者在设计软件程序时自己定义的数据类型。

9、描述抽象数据类型的标准格式:

ADT 抽象数据类型名

Data

数据元素之间逻辑关系的定义

Operation

操作

endADT

10、总结线性表的抽象数据类型的定义:

ADT 线性表(List)

Data

线性表的数据对象集合为{a1,a2,......,an},每个元素的类型均为DataType。其中除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个后继元素,数据元素之间的关系是一对一的关系。

Operation

InitList(*L):初始化操作,建立一个空的线性表L。

ListEmpty(L):判断线性表是否为空表,若线性表为空,返回true,否则返回false。

ClearList(*L):将线性表清空。

GetElem(L,i,*e):将线性表L中的第i个位置元素值返回给e。

LocateElem(L,e):在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功;否则,返回0表示失败。

ListInsert(*L,i,e):在线性表L中第i个位置插入新元素e。

ListDelete(*L,i,*e):删除线性表L中第i个位置元素,并用e返回其值。

ListLength(L):返回线性表L中的元素个数。

endADT

11、线性表的顺序存储结构指的是用一段地址连续的存储单元依次存储线性表的数据元素。

12、物理上的存储方式事实上就是在内存中找个初始地址,然后通过占位的形式,把一定的内存空间给占了,然后把相同数据类型的数据元素依次放在这块空地上。

13、顺序存储结构的特性:如果某一元素的位置是空的,也不会有其他元素占上去。

14、顺序存储结构封装需要三个属性:

(1)存储空间的起始位置,数组data,它的存储位置就是线性表存储空间的存储位置。

(2)线性表的最大存储容量:数组的长度MaxSize。

(3)线性表的当前长度:length

注:数组的长度与线性表的当前长度需要区分一下:数组的长度是存放线性表的存储空间的总长度,一般初始化后不变。而线性表的当前长度是线性表中元素的个数,是会变化的。

15、在线性表中回归从1开始的计算方法。

16、假设ElemType占用的是c个存储单元(字节),那么线性表中第i+1个数据元素和第i个数据元素的存储位置的关系是:

Loc(ai+1)=Loc(ai)+c。(Loc表示获得存储位置的函数)

17、所以对于第i个数据元素ai的存储位置可以由a1推算得出:

Loc(ai)=Loc(a1)+(i-1)*c。

通过这个公式,我们可以随时计算出线性表中任意位置的地址,不管它是第一个还是最后一个,都是相同的时间。那么它的存储时间性能当然就为O(1)。我们通常称之为随机存储结构。

猜你喜欢

转载自blog.csdn.net/weixin_42617472/article/details/82965784
今日推荐