Chapter201顺序表
内容来自: 数据结构教程: Java语言描述/李春葆,李筱驰主编.
1、线性表的顺序存储结构——顺序表
public class SqListClass<E> {
//顺序表泛型类
final int initcapacity = 10; //顺序表的初始容量(常量)
public E[] data; //存放顺序表中的元素
public int size; //存放顺序表的长度
private int capacity; //存放顺序表的容量
public SqListClass() {
//构造方法,实现data和length的初始化
data = (E[]) new Object[initcapacity]; //强制转换为E类型数组
capacity = initcapacity;
size = 0;
}
//线性表的基本运算算法
}
2、线性表的基本运算算法在顺序表中的实现
private void updateCapacity(int newcapacity) {
//改变顺序表的容量为newcapacity
E[] newdata = (E[]) new Object[newcapacity];
for (int i = 0; i < data.length; i++) //复制原来的元素
newdata[i] = data[i];
capacity = newcapacity; //设置新容量
data = newdata; //仍由data标识数组
}
2.1 整体建立顺序表
public void createList(E[] a) {
//由a整体建立顺序表
size = 0;
for (int i = 0; i < a.length; i++) {
if (size == capacity) //出现上溢出时
updateCapacity(2 * size); //扩大容量
data[size] = a[i];
size++; //添加的元素个数增加1
}
}
2.2 顺序表的基本运算算法
- 将元素e添加到线性表的末尾
public void add(E e) {
//在线性表的末尾添加一个元素e
if (size == capacity) //当顺序表空间满时倍增容量
updateCapacity(2 * size);
data[size] = e;
size++; //长度增1
}
- 求线性表的长度
public int size() {
//求线性表的长度
return size;
}
- 设置线性表的长度
public void setSize(int nlen) {
//设置线性表的长度
if (nlen < 0 || nlen > size)
throw new IllegalArgumentException("设置长度:n不在有效范围内");
size = nlen;
}
- 求线性表中序号为i的元素
public E getElem(int i) {
//返回线性表中序号为i的元素
if (i < 0 || i > size - 1)
throw new IllegalArgumentException("查找:位置i不在有效范围内");
return (E) data[i];
}
- 设置线性表中序号为i的元素值
public void setElem(int i, E e) {
//设置序号为i的元素为e
if (i < 0 || i > size - 1)
throw new IllegalArgumentException("设置:位置i不在有效范围内");
data[i] = e;
}
- 求线性表中第一个值为e的元素的序号
public int getGo(E e) {
//查找第一个值为e的元素的序号
int i = 0;
while (i < size && !data[i].equals(e)) //查找元素e
i++;
if (i > size)
return -1; //未找到时返回-1
else
return i; //找到后返回其序号
}
- 将线性表中序号为i和序号为j的元素交换
public void swap(int i, int j){
//交换data[i]和data[j]
E tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
- 在线性表中插入e作为第i个元素
public void insert(int i, E e){
//在线性表中的序号为i的位置上插入元素e
if (i < 0 || i > size - 1) //参数错误抛出异常
throw new IllegalArgumentException("插入:位置i不在有效范围内");
if(size == capacity)