public class LineList {
private int[] array;
private int index;//已用空间最大下标
//初始化线性表
public void initList()
{
array = new int[10];//十个单位
index = -1;//已用空间最大下标
}
//初始化线性表
public void initList(int n)
{
array = new int[n];//n个单位
index = -1;
}
//销毁线性表
public void destroyList()
{
array = null;//将指针 指向空 java会自动释放其所对应的空间
index = -1;
}
//清空线性表
public void clearList()
{
index = -1;
}
//判断线性表是否为空
public boolean isEmpty()
{
return index == -1;
}
//输出线性表中元素的个数
public int length()
{
return index+1;
}
//获取特定下标的元素
public int getEle(int index)
{
if(index > this.index)//当指定的下标超过最大下标 抛出越界错误
throw new ArrayIndexOutOfBoundsException();
else//如果没有 则输出对应下标的元素
return array[index];
}
//定位元素下标
public int locateEle(int e)
{
for(int i=0; i<=index;i++)//遍历数组 返回遇到的与目标元素相同的第一个元素的下标
if(e == array[i])
return i;
return -1;//如果数组中没有目标元素则返回 0
}
//插入元素 默认插入在末尾
public void insert(int e)
{
if(index + 1 < array.length)//当插入一个元素后 数组的长度没有越界 则直接在index后一位插入
{
array[index+1] = e;
index++;
}
else//如果越界 则扩大数组 10个单位 完成复杂原数组并将新元素插入 最后一位
{
int[] newArray = new int[array.length+10];//新建
for(int i=0; i<array.length; i++)//遍历 复制
{
newArray[i] = array[i];
}
newArray[array.length] = e;//赋值
array = newArray;//将指针指向新数组
index++;//元素最大下标加一
}
}
//在指定位置 插入元素
public void insert(int e, int index)
{
if(index > this.index)//当指定的位置超过元素最大下标 则按末尾插入操作
insert(e);
else if(this.index+1 >= array.length)//当插入一个元素会超过数组最大长度 则扩容
{
int[] newArray = new int[array.length+10];//创建新数组
boolean flag = true;//插入 标志
for(int i=0,j=0; i<array.length; i++,j++)
{
if(i==index && flag)//当达到 指定的位置时则将元素 e 插入该位置
{
newArray[j] = e;
flag = false;
i--;
}
newArray[j] = array[i];
}
array = newArray;//将数组指针 指向 新数组
this.index++;//最大元素下标加一
}else// 当插入一个元素 没有超过数组的最大长度时
{
for(int i=this.index;i>=index;i++)//将指定位置以后的元素向后移一个位置
array[i+1] = array[i];
array[index] = e;
this.index++;
}
}
//删除指定位置的元素
public void delete(int index)
{
if(index < 0 || index > this.index)//当指定的位置 超过最大元素下标 或者 为负数 则抛出越界异常
throw new ArrayIndexOutOfBoundsException();
for(int i=index;i<this.index;i++)//将指定位置以后的元素向前移动一个位置
{
array[i] = array[i+1];
}
this.index--;//最大元素下标减一
}
//更新元素
public void updata(int e,int index)
{
if(index < 0 || index > this.index)//当指定的位置 超过最大元素下标 或者 为负数 则抛出越界异常
throw new ArrayIndexOutOfBoundsException();
array[index] = e;
}
//输出数组中的所有元素
public void outPut()
{
for(int i=0; i<=index; i++)
{
System.out.print(array[i]+" ");
}
System.out.println();
}
}
数据结构---数组实现线性表(Java实现)
最新推荐文章于 2024-04-15 15:36:19 发布