数据结构的第二讲.ppt
《数据结构的第二讲.ppt》由会员分享,可在线阅读,更多相关《数据结构的第二讲.ppt(63页珍藏版)》请在三一办公上搜索。
1、第二讲 顺序线性表数组,引例,第二讲 数组,2.1 线性表及顺序线性表2.2 数组基本概念 2.3 ArrayList类,2.1 线性表及顺序线性表,线性表,例1 英文字母表(A,B,C,Z)是一个线性表例2,数据元素,线性表,n个类型相同的数据元素的有限序列,数据元素之间是一对一的关系,即每个数据元素最多有一个直接前驱和一个直接后继。,线性表,定义:n(0)个数据元素的有限序列,记作(a1,ai-1,ai,ai+1,an)其中,ai 是表中数据元素,n 是线性表的长度,n=0时称为空表特点:同一线性表中元素具有相同特性。相邻数据元素之间存在序偶关系。除第一个元素外,其他每一个元素有一个且仅有
2、一个直接前驱。除最后一个元素外,其他每一个元素有一个且仅有一个直接后继。,同一性,有序性,有穷性,将线性表中的元素相继存放在一个连续的存储空间中。顺序线性表,简称线性表用一组地址连续的存储单元依次存储线性表的数据元素。顺序映像,顺序表,存储结构:数组。特点:线性表的顺序存储方式。存取方式:顺序访问,可以随机存取。顺序存储结构示意图,45 89 90 67 40 78,0 1 2 3 4 5,顺序表的存储方式,元素地址计算方法:LOC(a i+1)=LOC(a i)+(i-1)*L LOC(a i)=LOC(a1)+(i-1)*L 其中:L:一个元素占用的存储单元个数LOC(ai):线性表第i个
3、元素的地址特点:实现逻辑上相邻物理地址相邻实现随机存取,顺序存储结构的实现,可以借助于高级程序设计语言中的数组来表示,一维数组的下标与元素在线性表中的序号相对应。,线性表的抽象数据类型定义,ADT List数据元素:D=ai|aiD0,i=1,2,,n,n0,D0为某一数据对象关系:R1|ai,ai-1D,i=2,n基本操作:(1)InitList(&L)操作前提:L为未初始化线性表。操作结果:将L初始化为空表。(2)DestroyList(&L)操作前提:线性表L已存在。操作结果:将L销毁。,线性表的抽象数据类型定义,(3)ClearList(&L)操作前提:线性表L已存在。操作结果:将表L
4、置为空表。(4)EmptyList(L)操作前提:线性表L已存在。操作结果:如果L为空表则返回真,否则返回假。(5)ListLength(L)操作前提:线性表L已存在。操作结果:如果L为空表则返回0,否则返回表中的元素个数。(6)Locate(L,e)操作前提:表L已存在,e为合法元素值。操作结果:如果L中存在元素e,则将“当前指针”指向元素e所在位置并返回真,否则返回假。,线性表的抽象数据类型定义,(7)GetData(L,i)操作前提:表L存在,且i值合法,即1iListLength(L)操作结果:返回线性表L中第i个元素的值。(8)ListInsert(&L,i,e)操作前提:表L已存在
5、,e为合法元素值且1iListLength(L)+1。操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1。(9)ListDelete(&L,i,&e)操作前提:表L已存在且非空,1iListLength(L)。操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1。,2.2 数组基本概念,数组,数组是最通用的数据结构,它出现在几乎所有的编程语言里。在C#语言中使用数组有两种方法:创建 System.Array类型的数组对象,以及创建针对所有数组的抽象的基类型。使用数组的替换方式 ArrayList类。ArrayList是一种像要更多空间来动态生长的数组。对于无法精确知道数组
6、最终大小的情况,或者对于程序生命周期内数组大小可能会发生一点变化的情况,用 ArrayList比用数组更合适。,数组基本概念,数组是可索引的数据的集合。数据既可以是内置的类型,也可以是用户自定义的类型。事实上,把数组数据称为对象大概是最简便的方式。C#语言中的数组实际上就是对象本身,因为它们都来源于 System.Array类。既然数组是 System.Array类的一个声明实例,所以在使用数组时也可以使用此类的所有方法和属性。,数组的声明和初始化,采用下列语法规则对数组进行声明:type array-name;其中这里的类型就是数组元素的数据类型。,一个实例,string names;接下来
7、一行需要实例化数组,还需要确定数组的大小。下面这行就实例化了刚声明的 name数组,并且预留了五个字符串的内存空间:names=new string5;必要时还可以把上述这两条语句合并成为一条语句:string names=new string5;,一个实例,当想要在一条语句中对数组进行声明、例示以及赋值操作时都要花费时间。在 C#语言中可以采用初始化列表的方式来实现:int numbers=new int 1,2,3,4,5;上述这个数的列表被称为是初始化列表。用一对大括号作为界定符,并且每个元素之间用逗号进行分割。当用这种方法来声明数组时,不需要指定元素的个数。编译器会通过初始列表中数据项
8、的数量来推断出此数据。,数组元素的设置和存取访问,存储数组元素既可以采用直接存取访问的方法也可以通过调用 Array类的 SetValue方法。直接存取方式通过赋值语句左侧的索引来引用数组位置:nNames2=Raymond;sSales19=23123;,数组元素的设置和存取访问,SetValue方法则提供了一种更加面向对象的方法来为数组元素赋值。这种方法会取走两个参数:索引数元素的值names.SetValue(Raymond,2);sales.SetValue(23123,19);,数组元素的设置和存取访问,数组元素的访问既可以通过直接存取的方式也可以通过调用 GetValue方法的方式
9、。GetValue方法取走单独一个参数索引。myName=names2;monthSales=sales.GetValue(19);,数组元素的设置和存取访问,为了存取每一个数组元素用 For循环来循环遍历数组是一种通用的方法。程序员在编写循环时常犯的错误即可能是写死循环的上限值(如果数组是动态的,那么这样做就是错误的,因为循环的上限可能会改变),也可能是每次循环重复时调用函数来存取循环的上限:for(int i=0;i=sales.GetUpperBound(0);i+)totalSales=totalSales+salesi;,GetUpperBound可以获取数组的最高下标。GetLow
10、erBound可以获取数组的最低下标。,0表示二维数组的第一维1表示数组的第二维,取回数组元数据的方法和属性,Array类为取回数组元数据提供了几种属性:Length:返回数组所有维数内元素的总数量。GetLength:返回数组指定维数内元素的数量。Rank:返回数组的维数。GetType:返回当前数组实例的类型。,取回数组元数据的方法和属性,Length方法对于计算多维数组中元素的数量以及返回数组中元素的准确编号都是很有用的使用 GetUpperBound方法,要对数值加一GetLength方法统计了数组某一维内元素的数量Rank属性一起可用来在运行时调整数组的大小,而且不必冒丢失数据的风险
11、在无法确定数组类型的情况下,GetType方法可以用来确定数组的数据类型,取回数组元数据的方法和属性,为了确定对象是否是数组,这里创建了一个类型变量 Type,此变量允许用来调用类方法 IsArray。如果对象是一个数组,那么代码返回数组,多维数组,在 C#语言中,尽管数组多于三维的情况是非常少见的,但是数组还是可以达到 32维的。,二维数组的声明,通过提供数组每一维上限值的方式可以声明一个 4行 5列的数组。int,grades=new int 4,5;二维数组经常用来模拟矩阵。声明多维数组也可以不指定维数的上限值。要这样做就要用到逗号来明确数组的维数。double,Sales;,三维数组的
12、声明,在声明不带维数上限的数组的时候,需要稍后对具有这类上限的数组重新确定维数 double,Sales;sales=new double 4,5,6;,用初始化表进行初始化操作,当没有指明数组的上限。初始化带有初始化表的数组的时候,不用说明数组的上限。编译器会根据初始化表中数据计算出每一维的上限值。初始化表本身也像数组的每一行那样用大括号进行标记。数组行内的每一个元素则用逗号进行分割。,传统的数组存取访问方式,存取访问多维数组元素的方法类似于存取一维数组元素的方法可以采用传统的数组存取访问方式 grade=gGrades2,2;gGrades(2,2)=99;,采用 Array类的方法,gr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第二
链接地址:https://www.31ppt.com/p-6578900.html