目录
01 引入: 多项式的表示
方法一:顺序结构直接表示(数组)
方法二:顺序存储结构存储非零项
方法三: 链表结构存储非零项
02 什么是线性表
线性表”:由同类型数据元素构成有序序列的线性结构
- 表中元素个数称为线性表的长度
- 线性表没有元素时,称为空表
- 表起始位置称为表头,表结束位置称表尾
说明:线性表也就是数组的一种特殊储存方式:从头到尾依次储存数据。
2.1 线性表抽象数据类型概述
线性表操作接口描述
public interface IList {
public void clear(); // 将一个已经存在的线性表置成空表
public boolean isEmpty(); // 判断当前线性表中的数据元素个数是否为0,若为0则函数返回true,否则返回false
public int length(); // 求线性表中的数据元素个数并由函数返回其值
public Object get(int i) throws Exception;// 读取到线性表中的第i个数据元素并由函数返回其值。其中i取值范围为:0≤i≤length()-1,如果i值不在此范围则抛出异常
public void insert(int i, Object x) throws Exception;// 在线性表的第i个数据元素之前插入一个值为x的数据元素。其中i取值范围为:0≤i≤length()。如果i值不在此范围则抛出异常,当i=0时表示在表头插入一个数据元素x,当i=length()时表示在表尾插入一个数据元素x
public void remove(int i) throws Exception;// 将线性表中第i个数据元素删除。其中i取值范围为:0≤i≤length()- 1,如果i值不在此范围则抛出异常
public int indexOf(Object x);// 返回线性表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1
public void display();// 输出线性表中的数据元素
}
2.2 线性表顺序存储实现
利用数组的连续存储空间顺序存放线性表的各元素
注:顺序存储中是序号是下标,从 0 开始
public class SeqList implements List{
private Object[] listArray; // 初始化线性表存储空间
private int size; //数组当前长度
private int maxSize; // 数组允许的最大长度
public SeqList(int maxSize) { //初始化
this.size = 0;
this.maxSize = maxSize;
listArray = new Object[maxSize];
}
@Override
public void clear() {
size = 0; // 置当前长度为0
}
@Override
public boolean isEmpty() {
return size == 0; // 判断当前长度是否为0,是则返回true
}
@Override
public int length() {
return size; // 返回数组当前长度
}
@Override
public Object get(int i) throws Exception {
if(i < 0 || i >= size){
throw new Exception("第" + i + "个元素不存在");
}else{
return listArray[i];
}
}
@Override
//在线性表的第i个数据元素之前插入一个值为x的数据元素。其中i取值范围为:0≤i≤length()。
// 如果i值不在此范围则抛出异常,当i=0时表示在表头插入一个数据元素x,当i=length()时表示在表尾插入一个数据元素x
public void insert(int i, Object x) throws Exception {
if(size == maxSize){ // 判断表已满
throw new Exception("顺序表已满");
}
if (i < 0 || i > size){ //这里不能是maxSize 因为线性表必须连续
throw new Exception("插入位置错误");
}
// 插入位置正确,索引为 i-(size-1)数据后移
for(int j = size-1 ; j >= i ; j--){
listArray[j + 1] = listArray[j];
}
listArray[i] =