package test;
import java.util.Arrays;
/**
* 线性表的顺序存储结构
*/
public class shunxuList {
private int size=0; //当前的长度
private int length=3;//数组长度
private Object[] data;//数组
public shunxuList(){
data = new Object[length];
}
/**
* 新增元素
* @param obj
* @return
*/
public Object add(Object obj){
//增容判断
ensurecapatiy(size+1);
data[size] = obj;//向数组插入元素
size++;
return obj;
}
//增容判断
private void ensurecapatiy(int size) {
if(size>length){ //增容
data = Arrays.copyOf(data,length*2);
}
}
/**
* 遍历对象
* @return
*/
public void showList(){
for(int i = 0 ; i < size; i++){
System.out.print(data[i]);
}
}
/**
* 根据数组下标获取对应元素
* 顺序结构表的数据是从1开始 但是数组是从0开始
* @param i
* @return
*/
public Object getElement(int i){
//1.判断i 是否下标越界
if(size==0 || i<1 || i>size+1){
return null;
}
//2从data数组中获取元素
return data[i-1];
}
/**
* 任意位置插入算法
* 注意:链表是从1开始进行插入的
* @return
*/
public Object insertList(int i ,Object obj){
//对i位置进行判断如果超出数组范围抛异常或增容处理,这里进行抛异常
if(i<1 || i>length+1){
return null;
}
//在链表中第i位置进行插入操作,即在数组data进行赋值
//判断该位置是否有值 ,没有值直接新增插入操作,有值先将其他位置后移后再插入操作 注意下标越界问题
Object oo = data[i-1];
if(oo == null){
data[i-1] = obj;
size++;
}else{
//其他后面的位置元素后移动
if(size<length){
for(int j = length-1;j>(i-1);j--){
data[j]=data[j-1];
}
data[i-1] = obj;
size++;
}else{
return null;
}
}
return obj;
}
/**
* 删除元素
* @param obj
* @return
*/
public Object delete(Object obj){
int index= 0;
for(int i = 0 ; i <size;i++){
if(data[i].equals(obj)) {
index = i;
data[index] = null;//删除
for(int j = index;j<size;j++){
if(j !=size-1){
data[j] = data[j+1];
}else{
data[size-1]=null;
}
}
size--;
return obj;
}
}
return null;
}
public static void main(String[] args) {
shunxuList list = new shunxuList();
list.add("zhangsan");
list.add("lisi");
list.showList();
// System.out.println(list.size);
// list.delete("lisi");
// list.showList();
// list.delete("zhangsan");
// System.out.println(list.size);
// list.showList();
// Object e = list.getElement(2);
// System.out.println("e:"+e);
Object hello = list.insertList(1, "hello");
System.out.println(hello);
list.showList();
}
}