Java 练习顺序的增删简单操作

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();
		
	}
}
发布了78 篇原创文章 · 获赞 4 · 访问量 4181

猜你喜欢

转载自blog.csdn.net/weixin_43580746/article/details/97005493