2019-7-23
class MyArrayList{
private int[] array;//表示线性表
private int size;//表示该线性表已有的数据个数
public MyArrayList(){
//申请空间
array=new int[2];
//将顺序表初始化为0
size=0;
}
//顺序表进行增操作
public void pushBack(int element){
ensureCapacity();
array[size++]=element;
}
public void pushFront(int element){
ensureCapacity();
for(int i=size;i>=1;i--){
array[i]=array[i-1];
}
array[0]=element;
size++;
}
public void insert(int index,int element){
if(index<0 || index>size){
System.err.println("增加的时候下标输入错误!");
return;
}
ensureCapacity();
for(int i=size;i>index;i--){
array[i]=array[i-1];
}
array[index]=element;
size++;
}
//顺序表进行删除操作
public void popBack(){
if(size<=0){
System.err.println("顺序表为空!");
return;
}
size--;
array[size]=0;
}
public void popFront(){
if(size<=0){
System.err.println("顺序表为空!");
return;
}
for(int i=1;i<size-1;i++){
array[i-1]=array[i];
}
array[--size]=0;
}
public void pop(int index){
if(size<=0){
System.err.println("顺序表为空!");
return;
}
if(index<0 || index>=size){
System.err.println("下标越界!");
}
for(int i=index;i<size-2;i++){
array[i+1]=array[i];
}
array[--size]=0;
}
//查看顺序表是否够用,若不够需扩容
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];
}
array=newArray;
}
//打印顺序表
public void print(){
for(int i=0;i<size;i++){
System.out.print(array[i]+" ");
}
System.out.println();
}
//查找指定下标的元素
public static int getE(int index){
if(index<0 || index>=size){
System.out.println("下标错误!");
return -1;
}
return array[index];
}
//找到指定值的元素,若有多个,只打印第一个元素的下标值
public static int getIndex(int element){
for(int i=0;i<size;i++){
if(array[i]==element){
return i;
}
}
return -1;
}
//删除指定值的元素,若有多个,只删除第一个元素的下标值
public static void remove(int element){
int index=getIndex(element);
if(index=-1){
pop(index);
}
}
//删除指定值的所有元素(三种方法)
//1、时间复杂度:O(n^2) 空间复杂度:O(1)
public static void removeAll1(int element){
int index;
while((index=getIndex(element))!=-1){
pop(index);
}
}
//2、时间复杂度:O(n) 空间复杂度:O(n)
public static void removeAll2(int element){
int j=0;
int[] newArray=new int[array.length];
for(int i=0;i<size;i++){
if(array[i]!=element){
newArray[j++]=array[i];
}
}
array=newArray;
size=j;
}
//3、时间复杂度:O(n) 空间复杂度:O(1)
public static void removeAll3(int element){
int j=0;
for(int i=0;i<size;i++){
if(array[i]!=element){
array[j++]=array[i];
}
}
size=j;
}
}
public class TestMyArrayList{
public static void main(String[] args){
MyArrayList array=new MyArrayList();
array.pushBack(1);
array.print();
array.pushBack(2);
array.print();
array.pushBack(3);
array.print();
array.pushFront(4);
array.print();
array.pushFront(5);
array.print();
array.insert(3,6);
array.print();
array.insert(5,7);
array.print();
array.popBack();
array.print();
array.popBack();
array.print();
array.print();
array.popFront();
array.pop(2);
array.print();
array.pop(3);
array.print();
}
}