线性表是最基本的数据结构,可用顺序存储和链式存储结构来表示。
首先创建一个接口,包含线性表的操作。
public interface Ilist
{
// 线性表置空操作
public void clear();
// 判断线性表是否为空操作
public boolean isEmpty();
// 获取线性表中元素的长度操作
public int length();
// 获取指定位置上面的元素操作
public Object get(int i);
// 在指定位置上面插入元素的操作
public void insert(int i, Object x);
// 删除指定位置上面的元素的操作
public void remove(int i);
// 查找指定元素的位置首次出现的位置操作
public int indexOf(Object x);
// 显示线性表中的内容操作
public void display();
};
首先介绍其顺序实现
代码如下
package Linear_table;
public class Sqlist implements Ilist //线性表顺序存储
{
private Object[] listElem; //存储线性表元素
private int curlen; //记录表的长度
public Sqlist(int maxsize)
{
listElem = new Object[maxsize];
curlen = 0;
}
@Override
public void clear() {
// 清零就是直接将表的长度置为0
curlen = 0;
}
@Override
public boolean isEmpty() {
return curlen==0;
}
@Override
public int length() {
// 直接返回表的长度
return curlen;
}
@Override
public Object get(int i) {
// 首先要判断索引是否合法
if(i<0 || i>=curlen) //线性表的的元素为 listElem[0] 到 listElem[curlen-1]
{
System.out.println("超出索引");
return null;
}
else return listElem[i];
}
@Override
public void insert(int i, Object x) {
// 先判断是否有地方插入(表是否有空位)
if(curlen == listElem.length)
{
System.out.println("表已满");
return;
}
//再判断插入位置是否合理,i==curlen 时代表插入表尾,是合法的
if(i<0||i>curlen)
{
System.out.println("插入位置不合法");
return;
}
//将元素依次后移,为插入的元素留出位置
for(int j = curlen;j>i;j--)
{
listElem[j] = listElem[j-1];
}
//插入元素
listElem[i] = x;
//插入元素后,线性表长度加1
curlen++;
}
@Override
public void remove(int i) {
//线性表的元素为listElem[0] 到listElem[curlen-1]
if(i<0 || i>curlen-1)
System.out.println("删除位置不合法");
//将元素依次向前覆盖
for(int j = i;j<curlen-1;j++)
{
listElem[j] = listElem[j+1];
}
//删除后长度减1
curlen--;
}
@Override
public int indexOf(Object x) {
// 用j来记录元素所在位置,从0开始找
int j=0;
//比较用equals(),不能用==
while(j<curlen && !listElem