java数据结构第二讲 线性表.pptVIP

  • 0
  • 0
  • 约4.57千字
  • 约 33页
  • 2017-06-07 发布于湖北
  • 举报
第2章 线性表 2.1 线性表 2.2 顺序表 2.3 单链表 2.4 循环单链表 2.5 双向链表 2.6 仿真链表 2.7 面向对象的软件设计方法 本章主要知识点: 线性表的定义,顺序存储结构,链式存储结构 顺序表类的设计方法,顺序表插入和删除操作的实现方法,顺序表插入和删除操作的时间复杂度 单链表类的设计方法,单链表插入和删除操作的实现方法,单链表插入和删除操作的时间复杂度,顺序表和单链表的特点对比 循环单链表和循环双向链表的结构和特点 2.1 线性表 2.1.1 线性表的定义 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素; (2)第一个数据元素没有前驱数据元素; (3)最后一个数据元素没有后继数据元素。 则称这样的数据结构为线性结构。 线性表是一种可以在任意位置进行插入和删除数据元素操作的、由n(n ≥ 0)个相同类型数据元素a0, a1, a2, ..., an-1组成的线性结构。 一个有n个数据元素a0, a1, a2, ..., an-1的线性表通常用符号(a0, a1, a2, ..., an-1)表示,其中符号ai(0≤i≤n-1)表示第i个抽象数据元素。空线性表用符号()表示。 数据集合 线性表的数据元素集合可以表示为序列a0, a1, a2, ..., an-1,每个数据元素的数据类型可以是任意的类类型。 操作集合 (1)求当前数据元素个数length() (2)插入数据元素insert(i, obj) (3)删除数据元素delete(i) (4)取数据元素getData(i) (5)线性表是否空isEmpty() 顺序存储结构的线性表称作顺序表。 2.2.1 顺序表存储结构 实现顺序存储结构的方法是使用数组。 对于线性表,数组把线性表的数据元素存储在一块连续地址空间的内存单元中。这样线性表中,逻辑上相邻的数据元素在物理存储地址上也相邻,数据元素间的逻辑上的前驱、后继逻辑关系就表现在数据元素的存储单元的物理前后位置关系上。 顺序表的存储结构如图所示。 其中,a0,a1,a2等表示顺序表中存储的数据元素,listArray表示存储数据元素的数组,maxSize表示数组的最大允许数据元素个数,size表示数组的当前数据元素个数。 2.2.3 顺序表的效率分析 插入和删除是顺序表中时间复杂度最高的成员函数。 插入时,主要的耗时部分是循环移动数据元素部分。 循环移动数据元素的效率和插入的位置i有关,最坏情况是i = 0,需移动size个数据元素;最好情况是i = size,需移动0个数据元素。平均次数为: 类似地,删除时,平均次数为: 2.3.1  单链表的结构    单链表是构成链表的每个结点只有一个指向直接后继结点的指针。  1 单链表的表示方法  单链表中每个结点的结构:   单链表有带头结点结构和不带头结点结构两种。我们把指向单链表的指针称为单链表的头指针。头指针所指的不存放数据元素的第一个结点称作头结点。存放第一个数据元素的结点称作第一个数据元素结点,或称首元结点。 2  带头结点单链表和不带头结点单链表的比较    从线性表的定义可知,线性表要求允许在任意位置进行插入和删除。当选用带头结点的单链表时,插入和删除操作的实现方法比不用带头结点单链表的实现方法简单。    设头指针用head表示,在单链表中任意结点(但不是第一个数据元素结点)前插入一个新结点的方法如图2-6所示。算法实现时,首先把插入位置定位在要插入结点的前一个结点位置,然后把s表示的新结点插入单链表中。   而如果采用带头结点的单链表结构,算法实现时,p指向头结点,改变的是p指针的next指针的值,而头指针head的值不变。因此,算法实现方法比较简单。在带头结点单链表中第一个数据元素结点前插入一个新结点的过程如图所示。 2.3.2 结点类    单链表是由一个一个结点组成的,因此,要设计单链表类,必须先设计结点类。结点类的成员变量有两个:一个是数据元素,另一个是表示下一个结点的对象引用(即指针)。 2.3.3 单链表类    单链表类的成员变量至少要有两个:一个是头指针,另一个是单链表中的数据元素

文档评论(0)

1亿VIP精品文档

相关文档