线性表是最基本的一种数据结构,它是表示一组相同类型数据的有限序列,你可以把它与数组进行参考,但是它并不是数组,线性表是一种表结构,它能够支持数据的插入、删除、更新、查询等,同时数组可以随意存放在数组中任意位置,而线性表只能依次有序排列,不能出现空隙,因此,我们需要进一步的设计。
顺序表
将数据依次存储在连续的整块物理空间中,这种存储结构称为顺序存储结构,而以这种方式实现的线性表,我们称为顺序表。
同样的,表中的每一个个体都被称为元素,元素左边的元素(上一个元素),称为前驱,同理,右边的元素(后一个元素)称为后驱。
我们设计线性表的目标就是为了去更好地管理我们的数据,也就是说,我们可以基于数组,来进行封装,实现增删改查!既然要存储一组数据,那么很容易联想到我们之前学过的数组,数组就能够容纳一组同类型的数据。
目标:以数组为底层,编写以下抽象类的具体实现
/*** 线性表抽象类* @param <E> 存储的元素(Element)类型*/public abstract class AbstractList<E> {/*** 获取表的长度* @return 顺序表的长度*/public abstract int size();/*** 添加一个元素* @param e 元素* @param index 要添加的位置(索引)*/public abstract void add(E e, int index);/*** 移除指定位置的元素* @param index 位置* @return 移除的元素*/public abstract E remove(int index);/*** 获取指定位置的元素* @param index 位置* @return 元素*/public abstract E get(int index);}
实现如下:
public abstract class LinearList<E> {public abstract int getSize();public abstract void add(E e, int index);public abstract E remove(int index)throws Exception;public abstract E get(int index) throws Exception ;protected E[] e;protected int max;}class MyList extends LinearList<Integer>{public MyList(){max = 0;}public int getSize(){return max;}@Overridepublic void add(Integer integer, int index) {Integer[] newArr = new Integer[max + 1];if(e == null) {newArr[index - 1] = integer;this.e = newArr;}for(i = 0;i < e.length;i++){newArr[i] = e[i];}newArr[index] = integer;}public Integer remove(int index) throws Exception{if(index > max || index < 0) throw new Exception("Out of Bound");Integer ret = e[index];for(int i = index - 1;i < e.length - 1; i++){if(i < max) e[i] = e[i+1];}max--;return ret;}public Integer get(int index) throws Exception {if(index > max || index < 0) throw new Exception("Out of Bound");return e[index];}}
