顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组
上完成数据的增删查改。
顺序表一般可以分为:
1. 静态顺序表:使用定长数组存储。
2. 动态顺序表:使用动态开辟的数组存储。
在创建顺序表时,需添加它的属性size表示当前表内的元素个数
class MyArrayList{
private int []array;
private int size;
public MyArrayList(){
array=new int[2];//长度为2的顺序表
size=0;//实际元素个数为0
}//MyArrayList的构造方法
public void popFront(int element){
ensureCapacity();//考虑是否进行扩容
for(int i=size;i>=1;i--){
array[i]=array[i-1];
}//size的位置刚好是数组下表加1的位置
array[0]=element;
size++;
}//头插(将数组元素整体后移 将元素放在数组头)
public void pushback(int element){
ensureCapacity();
array[size]=element;
size++;
}//尾插
public void insert(int index,int element){
ensureCapacity();
for(int i=size;i>=index+1;i--){
array[i]=array[i-1];
}
array[index]=element;
size++;
}//在指定下标插入(将制定下标以后的元素统一后移)
public void push(){
array[--size]=0;
}//尾删(--size是先减后使用)
public void pop(){
for(int i=0;i<=size-2;i++)
{
array[i]=array[i+1];
}//除头元素之外元素统一前移
array[--size]=0;
}//头删
public void earse(int index){
for(int i=index;i<=size-2;i++)
{
array[i]=array[i+1];
}
array[--size]=0;
}//删除指定下标
public void print(){
for(int i=0;i<size;i++){
System.out.println(array[i]);
}
}//打印数组
public void ensureCapacity(){
if(size<array.length)
return ;//数组还有空位置
int newCapacity=array.length*2;
int[]newArray=new int[newCapacity];//新建一个数组长度为原数组的二倍
for(int i=0;i<size;i++)
{
newArray[i]=array[i];
}//将原数组的元素移至新数组
this.array=newArray;//原数组指向新数组
}//当数组容量不足时。进行扩容,一般扩容2倍
}
public class LianXi{
public static void main(String[] args){
MyArrayList arr=new MyArrayList();
arr.print();
arr.pushback(1);
arr.pushback(2);
arr.pushback(3);
arr.popFront(10);
arr.popFront(20);
arr.popFront(30);//30 20 10 1 2 3
arr.print();
arr.insert(3,11);//30 20 10 11 1 2 3
arr.print();
arr.earse(2);
arr.print();//30 20 11 2 3
}
}