1.线性表的概念
线性结构;第一个元素(表头)无直接前驱,最后一个元素(表尾)无直接后继,其余元素都有一个直接前驱和直接后继
线性表中数据元素的个数n定义为线性表的长度,当n=0时线性表为空表,数据元素序号的取值范围是【0,n-1】
2.线性表是一个抽象的数学结构并不具有具体的物理形式,元素之间只具有一对一的线性关系,往线性表中存取元素不能像数组那样,需要找到这个元素的前驱和后继
数组中的元素和数组下标一一映射,可以往数组下标中随机存储某个元素,数组中相邻的元素连续存储在内存中
3.线性表的操作
判断大小
是否为空
查找线性表中的元素
插入元素
删除元素
4.线性表的顺序表
顺序存储结构
将线性表存储在一组连续的存储空间中,每一块空间的大小一样,这样已知线性表中任意一个元素的地址就可以知道其他元素的地址,即可以实现线性表的随机存储(若是顺序表中存取的是对象元素,那么顺序表存储的是对象的引用)
例如知道顺序表的起始元素的地址就可以知道顺序表中其他任意元素的存储地址
既然是连续的存储结构就可以用数组来实现顺序表了
在进行添加删除元素的时候需要移动其他元素的位置
5.顺序表的Java语言实现
要实现一个顺序表
首先:定义一个接口类,定义出要实现的顺序表中的方法
//接口类
package com.wzk;
/**
* @author 作者 :peanut.w
* @version 创建时间:2018年2月9日 下午1:44:27 类说明
*/
// list接口
public interface IList {
// 线性表的大小,数据元素个数
public int getSize();
// 判断是否为空
public boolean isEmpty();
// 判断是否存在数据元素e
public boolean contains(Object e);
}
//实现类
package com.wzk;
/**
* @author 作者 :peanut.w
* @version 创建时间:2018年2月9日 下午2:07:55 类说明
*/
public class MyArrayList implements IList {
// 定义顺序表中的基本元素
public final int LEN = 8;// 数组的默认大小
public int size;// 线性表中数据元素的个数
public Object[] elements;// 用来保存数据元素得数组,最重要的一个元素
// 构造函数
public MyArrayList() {
size = 0;
elements = new Object[LEN];
}
// 获取顺序表的大小
@Override
public int getSize() {
// TODO Auto-generated method stub
return size;
}
// 判断顺序表是否为空
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return size == 0;
}
// 遍历数组中的元素,和元素e进行比较
@Override
public boolean contains(Object e) {
// 循环条件,循环终止条件
for (int i = 0; i < size; i++) {
if (elements[i] == e) {
return true;
}
}
return false;
}
// 获取某个元素的位置
public int indexOf(Object e) {
for (int i = 0; i < size; i++) {
if (elements[i] == e) {
return i;
}
}
return -1;
}
// 将元素插入到某个位置
public Object insert(int i, Object e) {
// 先移动元素
for (int j = size; j >= i; j--) {
elements[j] = elements[j + 1];
// 将元素插入
elements[i] = e;
// 更新size
size++;
}
return e;
}
//删除某个元素
public Object delete(Object e){
//找出元素位置
int location=indexOf(e);
elements[location]=null;
for(int j=location;j<size;j++){
elements[j]=elements[j+1];
size--;
}
return e;
}
}