package com.fcy.dataStruct;
import java.util.Arrays;
public class SequenceList{
private int DEFAULT_SIZE=16;
//保存数组的长度
private int capacity;
//定义一个数组用于保存顺序线性表的元素
private Object[] elementData;
//保存顺序线性表中元素的当前个数
private int size=0;
//以默认数组长度创建空顺序线性表
public SequenceList(){
capacity=DEFAULT_SIZE;
elementData=new Object[capacity];
}
//以一个初始化元素来创建顺序线性表
public SequenceList(T element){
this();
elementData[0]=element;
size++;
}
public SequenceList(T element,int initSize){
capacity=1;
//把capacity设为大于initSize的最小的2的n次方
while(capacitysize-1){
throw new IndexOutOfBoundsException("线性表索引越界");
}
return (T)elementData[i];
}
//查找顺序线性表中指定元素的索引
public int locate(T element){
for(int i=0;isize){
throw new IndexOutOfBoundsException("线性表索引越界!");
}
ensureCapacity(size+1);
//将index处以后的所有元素向后移动一格
System.arraycopy(elementData,index,elementData,index+1,size-index);
elementData[index]=element;
size++;
}
//在线性顺序表开始添加一个元素
public void add(T element){
insert(element,size);
}
//扩充底层数组长度
private void ensureCapacity(int minCapacity){
//如果数组的原有长度小于目前所需长度
if(minCapacity>capacity){
//不断地将capacity*2,直到capacity大于minCapacity为止
while(capacitysize-1){
throw new IndexOutOfBoundsException("线性表索引越界!");
}
T oldValue =(T)elementData[index];
int numMoved=size-index-1;
if(numMoved>0){System.arraycopy(elementData,index+1,elementData,index,numMoved);
}
//清空最后一个元素
elementData[--size]=null;
return oldValue;
}
//删除顺序线性表中最后一个元素
public T remove(){
return delete(size-1);
}
//判断顺序线性表是否为空表
public boolean empty(){
return size==0;
}
//清空线性表
public void clear(){
//将底层数组的所有元素赋为null
Arrays.fill(elementData, null);
size=0;
}
public String toString(){
if(size==0){
return "[]";
}else{
StringBuilder sb=new StringBuilder("[");
for(int i=0;i
写一个小测试类:
package com.fcy.dataStruct;
public class SequenceListTest {
public static void main(String[] args) {
SequenceListlist=new SequenceList();
list.add("aaaa");
list.add("bbbb");
list.add("cccc");
list.insert("dddd",1);
System.out.println(list);
list.delete(2);
System.out.println(list);
System.out.println("cccc在顺序表中的位置:"+list.locate("cccc"));
}
}
运行结果: