Java实现线性表(顺序表)

来源:互联网 发布:java. base64decode 编辑:程序博客网 时间:2024/06/05 20:19

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。线性表可通过一维数组来实现其顺序存储结构,即把第一个数据元素存放到数组下标为0的位置中,接着把线性表相邻的元素存储到数组中相邻的位置。

顺序存储结构的优缺点:

优点:1. 无需为表中元素之间的逻辑关系而增加额外的存储空间

   2. 可以快速地存取表中任意位置的元素

缺点:1. 插入和删除需要移动大量元素

顺序存储结构需要三个属性:

1. 存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。

2. 线性表的最大存储容量: 来决定数组的长度。在任意时刻,线性表的长度都应小于等于数组的长度。

3. 线性表的当前长度。

public class ArrayList<E> {private Object[] data; // 保存线性表数据的数组private int capacity; // 线性表目前的容量private int size; // 线性表的元素个数/** * 初始化未声明大小,声明为10 */public ArrayList() {this(10);}/** * 初始化线性表,声明数组的大小 * @param initSize 线性表的初始化大小 */public ArrayList(int initSize) {if (initSize >= 0) {data = new Object[initSize];capacity = initSize;size = 0;} else {throw new RuntimeException("初始化大小不能小于0: " + initSize);}}/** * 判断当前线性表是否为空  * @return */public boolean isEmpty() {if (size > 0) {return false;} else {return true;}}/** * 返回当前线性表的大小 * @return */public int capacity() {return size;}/** * 清空当前线性表 */public void empty() {data = null;capacity = 0;size = 0;}/** * 末位添加新元素  * @param e 元素e */public boolean add(E e) {validatecp();data[size] = e;size++;return true;}/** * 判断是否超出容量,即size是否超出capacity,如果超出则扩容 */private void validatecp() {if (size == capacity) {capacity *= 2;Object[] temp = new Object[capacity];for (int i = 0; i < size; i++) {temp[i] = data[i];}data = temp;}}/** * 判断下标是否在正常范围内  * @param index 接收的下标参数 */private void validateindex(int index) {if (index < 0 || index > size) {throw new RuntimeException("无效的下标: " + index);}}/** * 取得某个位置元素  * @param index 下标参数 * @return */public E getElement(int index) {validateindex(index);return (E) data[index];}/** * 在指定的位置插入元素  * @param index 元素的插入位置 * @param e 元素 * @return */public boolean insert(int index, E e) {validateindex(index);validatecp();for (int i = size; i > index; i--) {data[i] = data[i - 1];}data[index] = e;size++;return true;}/** * 删除指定位置的元素  * @param index 待删除元素下标 * @return */public boolean delete(int index) {validateindex(index);for (int i = index; i < size; i++) {data[i] = data[i + 1];}data[size - 1] = null;size--;return true;}@Overridepublic String toString() {String str = "[ ";for (Object e : data) {if (e != null) {str = str + e + " ";}}str = str + "]";return str;}}



0 0
原创粉丝点击