数据结构——线性表的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方法,直接返回数组对应的游标即可。

 

posted @ 2018-05-10 19:57  ZeroZiano  阅读(1239)  评论(0)    收藏  举报