数据结构——Java实现顺序表

来源:互联网 发布:购物软件可以定制 编辑:程序博客网 时间:2024/05/01 23:13
一边工作,一边复习考南大的MSE,都是Java描述,只能自己动手,丰衣足食
package linear_list;import java.util.Arrays;/** * 顺序表 * @author 芜情 * */public class SqList<E> {private final int capacity = 1000;//顺序表最大容量private int length;//顺序表容量private int size;//顺序表的当前大小(元素的数量)private Object[] items;//顺序表存储空间//无参构造,默认长度为10public SqList() {this(10);}//有参构造,指定顺序表长度public SqList(int length) {if(length < 0){throw new RuntimeException("初始化大小不能小于0");}else if(length > capacity){throw new RuntimeException("初始化大小超过最大容量:"+capacity);}else{this.length = length;this.items = new Object[length];this.size = 0;}}//判断顺序表是否为空public boolean isEmpty(){return this.size == 0;}//返回顺序表当前大小public int size(){return this.size;}//返回顺序表容量public int length(){return this.length;}//判断表容量是否超出预定大小,如果超出将自动扩充容量private void ensureCapacity(int minLength){if(minLength > capacity){throw new RuntimeException("顺序表已达最大容量");}else{int oldLength = items.length;if (minLength > oldLength) {    int newLength= (oldLength * 3)/2 + 1;    if (newLength < minLength){    newLength = minLength;    }items = Arrays.copyOf(items, newLength);}}}//清空顺序表public void clear(){Arrays.fill(items, null);this.length = 10;this.size = 0;}//根据索引查元素@SuppressWarnings("unchecked")public E get(int i){if(i < 0 || i >= size){throw new IndexOutOfBoundsException("顺序表索引越界");}return (E) items[i];}//查询元素第一次出现的索引,如未找到,返回-1public int indexOf(E e){if (e == null) {    for (int i = 0; i < size; i++){    if (items[i]==null){    return i;    }    }} else {    for (int i = 0; i < size; i++){if (e.equals(items[i])){    return i;}    }}return -1;}//在指定位置插入元素public void add(int i,E e){if(i < 0 || i > size){throw new IndexOutOfBoundsException("顺序表索引越界");}ensureCapacity(size+1);System.arraycopy(items, i, items, i+1, size++ - i);items[i] = e;}//末尾增加元素public void add(E e){add(size,e);}//删除指定位置元素@SuppressWarnings("unchecked")public E remove(int i){if(i < 0 || i >= size){throw new IndexOutOfBoundsException("顺序表索引越界");}E oldItem = (E) items[i];System.arraycopy(items, i+1, items, i, size-1-i);items[--size] = null;return oldItem;}//判断元素是否在顺序表中public boolean contains(E e){return indexOf(e) >= 0;}//遍历顺序表public void display(){for(Object item:items){if(item == null){break;}System.out.print(item + "\t");}}}

原创粉丝点击