一、线性表的抽象数据类型表述
线性表的结构简单,长度允许动态增长或搜索;可以对线性表中的任何数据元素进行访问和查找;允许进行数据的插入和删除操作;求线性表中的指定数据的前驱和后继;合并线性表以及拆分线性表中。
Java JDK中有ArrayList和LinkedList两个类很好的实现了顺序存储和链式存储。因此学习数据结构的最好方式是去研究JDK源码。
这里的代码个人作为练习,为了便于理解,很多地方处理的并非十分严谨,仅供参考。转载注明出处,技术讨论 email:
1 packageorg.yohhan.data_structure.api;2
3 /**
4 *@authoryohhan 5 * @date create:2016年1月10日 下午4:05:356 *7 * 线性表的抽象数据类型8 *9 */
10 public interfaceMyList {11 public voidclear();12
13 public booleanisEmpty();14
15 public intlength();16
17 public Object get(int i) throwsException;18
19 public void insert(int i, Object obj) throwsException;20
21 public void remove(int i) throwsException;22
23 public intindexOf(Object obj);24
25 public voiddisplay();26 }
二、线性表的顺序存储实现
1.顺序表的定义:
顺序存储采用一组地址连续的存储单元依次存储线性表占用的各个数据元素的存储结构。
2.顺序表的特点:
1)逻辑上相邻的数据元素,在物理存储位置上也是相邻的。
2)存储密度高,事先需要分配足够应用的存储空间。
3)随机存取,查询速度快,直接访问地址单元中的数据。时间复杂度 O(1)
4)插入删除操作会引起大量的数据移动,时间复杂度O(n)
3.顺序表的结构类描述:
1 packageorg.yohhan.data_structure.linear;2
3 importorg.yohhan.data_structure.api.MyList;4
5 /**
6 *@authoryohhan 7 * @date create:2016年1月10日 下午4:09:158 *9 * 线性表的顺序存储实现10 */
11 public class SqList implementsMyList {12
13 private Object[] listElem; //数组作为线性表的存储空间
14 private int curLen; //线性表的当前长度
15
16 public SqList(intmaxSize) {17 curLen = 0;18 listElem = newObject[maxSize];19 }20
21 @Override22 public voidclear() {23 curLen = 0;24 }25
26 @Override27 public booleanisEmpty() {28 return curLen == 0;29 }30
31 @Override32 public intlength() {33 returncurLen;34 }35
36 @Override37 public Object get(int