美文网首页
基于数组实现线性表

基于数组实现线性表

作者: 掌灬纹 | 来源:发表于2019-03-30 19:42 被阅读0次

    所有线性表接口的定义:

    /**

    * 定义列表的接口,所有列表该实现的约定

    * 增删改查

    * @author Administrator

    *

    */

    public interface MyList {

    /**

    * 增加一个元素

    * @param element

    */

    void add(Object element);

    /**

    * 根据值,删除一个元素

    * @param element

    */

    void delete(Object element);

    /**

    * 根据下标删除一个元素

    * @param index

    */

    void delete(int index);

    /**

    * 根据下标更新一个元素

    * @param index

    * @param element

    */

    void update(int index, Object element);

    /**

    * 判断线性表中是否包含该元素

    * 返回布尔型

    * @param element

    * @return

    */

    boolean contains(Object element);

    /**

    * 返回线性表中与该元素相等的值的下标

    * 如果没有返回-1

    * @param element

    * @return

    */

    int index(Object element);

    }

    public class _01MyArrayList implements MyList{

    /**

    * 线性表的定义:

    * 基于数组实现线性表

    * @param args

    */

    private Object[] elements;//基于数组的数据结构

    private int size = 0;//当前线性表中元素个数

    private int capacity = 10;//线性表容量,初值为10

    @Override

    public String toString() {

    StringBuilder sb = new StringBuilder("[");

    for(int i = 0; i < size; i++) {

    sb.append(elements[i] + (i == size - 1?"]":" , "));

    }

    return sb.toString();

    }

    public _01MyArrayList(int capacity) {//自定义线性表容量

    super();

    this.capacity = capacity;

    elements = new Object [capacity];

    }

    public _01MyArrayList() {//默认线性表容量

    super();

    elements = new Object [capacity];

    }

    @Override

    public void add(Object element) {//开空间与拷贝都是耗时的操作

    if(size == capacity) {//扩容,拷贝原数组元素

    capacity += 20;

    Object[] newArr = new Object[capacity];

    for(int i = 0; i < size; i++) {//拷贝

    newArr[i] = elements[i];

    }

    elements = newArr;

    }

    elements[size] = element;

    size++;

    }

    @Override

    public void delete(Object element) {

    int index = index(element);

    if(index >= 0)

    delete(index);

    }

    @Override

    public void delete(int index) {

    //线性表重排,从删除位置依次向前更新,不更改原线性表排序

    for(int i = index; i < size - 1; i++) {

    Object temp = elements[i];

    elements[i] = elements[i+1];

    elements[i+1] = temp;

    }

    elements[size - 1] = null;

    size--;

    }

    @Override

    public void update(int index, Object element) {

    elements[index] = element;

    }

    @Override

    public boolean contains(Object element) {

    return index(element) >= 0;

    }

    @Override

    public int index(Object element) {

    for(int i = 0; i < size; i++) {

    if(elements[i].equals(element))

    return i;

    }

    return -1;

    }

    }

    相关文章

      网友评论

          本文标题:基于数组实现线性表

          本文链接:https://www.haomeiwen.com/subject/ccisbqtx.html