数据结构——线性表的Java实现

线性表的存储结构

线性表:零个或多个数据元素的有限序列。

元素 - 线性表中每一个节点包含一个元素。

索引:表中的每一个元素都有一个确定的位置,称为元素的索引。



在jdk中其实已经有提供线性表的实现——ArrayList,现在我们来自己实现一个ArrayList.

首先定义一个元素类Elem

public class Elem {

    public int id;

    public String name;

    public String toString() {
        return "[" + id + "," + name + "]";
    }
}

一个表应该有的基本操作(为防止和jdk冲突,表名前加了个前缀):

public interface ZList {
    
    //向表中添加一个元素
    void add(Elem e);

    //删除表中位于position处的元素
    void delete(int position);

    //返回表中位于position处的元素
    void get(Elem e);
    
    //获取表中元素的数量
    int length();
}

作为线性表,内部的元素结构我们可以采用数组来实现:

    private Elem[] datas;

    private final int maxLength;

    private int length;

    public ArrayList(int maxLength) {
        this.maxLength = maxLength;
        datas = new Elem[maxLength];
    }


线性表的插入

好了,目前为止,线性表的基本存储结构已经完成,我们来看线性表的插入操作。


将元素插入第i个元素的前面,所有第i个之后的元素都需要向后移动一个单元。

public void insert(Elem e, int index) {
        if (length < maxLength && index <= length) { //表有上限

            for (int i = length; i > index; i--) {
                datas[i] = datas[i - 1];
            }
            datas[index] = e;
            length++;
        } else {
            LogUtil.d(TAG, "ArrayList is full, can not insert");
        }
    }


线性表的删除

删除第i个元素,所有第i个的后续元素都需要向前移动一个单元。

public void delete(int index) {

        if (index < length) {
            for (int i = index; i < length - 1; i++) {
                datas[i] = datas[i + 1];
            }
            datas[length - 1] = null;
            length--;
        } else {
            LogUtil.d(TAG, "ArrayList is empty, can not delete");

        }
    }


好了,现在线性表的基本操作方法就做完了,至于get方法,直接返回数组对应的游标即可。

猜你喜欢

转载自blog.csdn.net/zzerosk/article/details/80039825
今日推荐