2 线性表
线性表是由n(n>=0)个具有相同数据类型的数据元素所构成的有限序列。当n=0时,此线性表是空表。
线型表是一种线性结构,线性结构的特征:
1)第一个数据元素没有前驱,这个数据元素也称为开始节点。
2)最后一个数据元素没有后继,这个数据元素也称为终端节点。
3)出第一个和最后一个数据元素之外,其他的数据元素有且仅有一个前驱和后继。
2.1 线性表的抽象数据类型描述
线性表的抽象数据Java接口描述如下:
package adt;
/**
* 线性表的抽象数据类型描述
*
* @author Oner.wv
*
*/
public interface IList {
/**
* 将一个已经存在的表置为空表。
*/
public void clear();
/**
* 判断线性表是否为空。
*/
public boolean isEmpty();
/**
* 返回线性表中的数据元素个数。
*/
public int length();
/**
* 读取并返回线性表中的第i个数据元素的值。0≤ i ≤length()-1。
*
* @throws Exception
*/
public Object get(int i) throws Exception;
/**
* 返回线性表中首次出现指定数据元素的为序号,若线性表中不包含此数据元素,则返回-1
*/
public int indexOf(Object x);
/**
* 在线性表中第i个数据元素之前插入一个值为x的数据元素。0≤ i ≤length()。
* i=0时,在表头插入x;i=length()时,在表尾插入x。
*
* @throws Exception
*/
public void insert(int i, Object x) throws Exception;
/**
* 删除线性表中第i个数据元素。0≤ i ≤length()-1。
*
* @throws Exception
*/
public void remove(int i) throws Exception;
/**
* 输出线性表中各个数据元素。
*/
public void display();
}
2.2 线性表的顺序存储及其实现
2.2.1 线性表的顺序存储
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。线性表的顺序存储示意图:
采用顺序存储结构的线性表简称为“ 顺序表”。顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到:
Loc(ai)=Loc(a0)+i*c 0<=i<=n-1。
Loc(a0)代表a0的存储地址,c代表每个数据元素所占的存储单元。
2.2.2 顺序表类的实现
package sequenceList;
import adt.IList;
/**
* 顺序表类的描述
*
* @author Oner.wv
*
*/
public class SqList implements IList {
private Object[] listElem;
private int curLen;
public SqList(int maxSize) {
curLen = 0;// 设置顺序表的当前长度为0
listElem = new Object[maxSize];// 为顺序表分配maxSize个存储单元
}
@Override
public void clear() {
curLen = 0;
}
@Override
public boolean isEmpty() {
return curLen == 0;
}
@Override
public int length() {
return curLen;
}
@Override
public Object get(int i) throws Exception {
if (i < 0 || i > curLen - 1) {// 判断i是否合法
throw new Exception("第" + i + "个元素不存在");
}
return listElem[i];// 返回顺序表中第i个数据元素
}
@Override
public int indexOf(Object x) {
int j = 0;// j指示顺序表中待比较的数据元素,其初始值指示顺序表中第0个数据元素
while (j < curLen && !listElem[j].equals(x)) {// 依次比较
j++;
}
if (j < curLen) {// 判断j的位置是否位于顺序表中的位置
return j;
} else {
return -1;// 值为x的数据元素在顺序表中不存在
}
}