线性表的顺序存储问题

问题描述:用顺序结构来实现线性表的基本操作,即设计顺序表

涉及变量:listElem:Object[] 型数组,用于存放线性表中的元素

                 curlen:int型变量,表的实际长度,即存放元素的个数

                IList:interface,线性表的基本操作接口

                sqlList:顺序表类

涉及教材:《数据结构——Java语言描述(第2版)》 清华大学出版社

线性表,由n个数据元素构成的有序序列,除开始结点和终端结点外的每个结点都有且仅有一个前驱和后继

顺序存储,用一组地址连续的存储单元依次存放线性表中的各个数据元素的存储方式

顺序表,即使用顺序存储方式实现的线性表

顺序表上逻辑结构与物理结构相对应,即在逻辑上相邻的数据元素在物理存储位置上也相邻

存储密度大,可随机存取,但不便于插入和删除操作

以下先介绍线性表的基本操作,求长度,判空,置空,陈列各元素,增删改查

//教材上例题没有 改 的算法,此处是我自己添加上去的

接口是用来存放接下来该做什么的方法

可以用多个类实现同一个接口

用本题来举例,既可以用顺序存储来实现线性表,也可以用链式存储来实现

以下是线性表接口的代码:

为了方便,此处算法实现的均为对第i个元素的操作

需知第i个元素和第i号元素有所不同

由于数组中存放的元素下标从0开始,即第1个元素下标为0

根据不同的需求实现的方法上有细微的不同

思路:用顺序结构存储,则需要申请一个数组来存放数据元素,由于不能预测将存放的何种类型的元素,使用Object类来实现

且顺序表需预先申请空间,直到表满之前,表的申请元素个数与实际元素个数不等,则需要一个实际长度curlen来记录

在构造方法内将两者初始化

代码如下:

接下来是求长度,判空,置空,陈列各元素

求长度,即求实际元素个数,返回curlen即可

判空,当其中存储的实际元素个数为0时,该表为空表

置空,将其中存储的实际元素个数设置为0即可,这个地方我一开始十分纠结,因为我将curlen赋值为0,但listElem数组的部分位置上依旧存在元素,但在我们接下来的操作中,用一系列跟curlen相关的条件来限制我们使用到这些元素的可能,当我们不可能使用到这些有数值的元素时,其有值与否毫无意义

陈列各元素,即将从下标为0的位置开始描述每个元素的值

增删改查,比较常见的操作

增,即插入元素,此处是在第i个位置前插入某个元素,即在将下标为i的位置赋值为指定的某个元素,而将原来在i及之后的位置的元素后移一位

注意:1.先判满,若表已满,则无法插入,抛出异常

           2. i 的位置是否合法,0<=i<=curlen

           3.插入成功后,将curlen的值增加1

 

删,即删除元素,将第i个元素删除,并将其后的每个元素前移一位

注意:1.先判空,空表无法进行删除

           2.判断i是否合法,0<i<=curlen

           3.删除成功后,curlen的值减少1

改,更改第i个元素上的值为指定值,直接赋值即可

注意:第i个元素第i号元素

 

查,查找有两种方式,按值查找和按位查找,此处的位我是查找第i个元素,而非第i号元素

以上是对线性表的顺序存储的一些想法,希望对各位有所帮助

190113 Rewivy

猜你喜欢

转载自www.cnblogs.com/rewivy/p/10263611.html