線性結構(二)--陣列

林堯彬發表於2020-04-04

      1、將陣列轉換成物件導向的陣列

      2、使用線性查詢

      3、使用二分法查詢

一、陣列:

  

public class MyArray {
	//用於儲存資料的陣列
	private int[] elements;
	
	//例項物件時,建立陣列
	public MyArray(){
		elements=new int[0];
	}
	
	//獲取陣列長度的方法
	public int size(){
		return elements.length;
	}
	
	//往陣列的末尾新增一個元素
	public void add(int element){
		//建立一個新陣列
		int[] newArr=new int[elements.length+1];
		//把原陣列的元素賦值到新陣列到
		for (int i = 0; i < elements.length; i++) {
			newArr[i]=elements[i];
		}
		//把新增的元素放入新陣列中
		newArr[elements.length]=element;
		//使用新陣列替換舊陣列
		elements=newArr;
	}
	//列印所有元素到控制檯
	public void show(){
		System.out.println(Arrays.toString(elements));
	}
	//刪除陣列中的元素
	public void delete(int index){
		if(index<0||index>elements.length-1){
			throw new RuntimeException("下標越界!!");
		}
		//建立新陣列
		int[] newarr=new int[elements.length-1];
		for(int i=0;i<newarr.length;i++){
			if(i<index){
				newarr[i]=elements[i];
			}else{
				newarr[i]=elements[i+1];
			}
		  }
		elements=newarr;
		}
	//獲取某個元素
	public int get(int index){
		return elements[index];
	}
	//指定位置插入元素
	public void insert(int index,int elemten){
		if(index<0||index>elements.length-1){
			throw new RuntimeException("插入下標越界");
		}
		int[] newarr=new int[elements.length+1];
		for(int i=0;i<elements.length;i++){
			if(i<index){
				newarr[i]=elements[i];
			}else{
				newarr[i+1]=elements[i];
			}
		}
		newarr[index]=elemten;
		elements=newarr;
	}
	//替換指定位置的元素
	public void set(int index,int element){
		if(index<0||index>elements.length-1){
			throw new RuntimeException();
		}
		elements[index]=element;
	}
	//線性查詢
	public int search(int target){
		//遍歷陣列
		for(int i=0;i<elements.length;i++){
			if(elements[i]==target){
				return i;
			}
		}
		return -1;
	}
	//二分查詢
	public int binarySearch(int target){
		//記錄開始位置
		int begin=0;
		//記錄結束位置
		int end=elements.length-1;
		//記錄中間的位置
		int mid=(begin+end)/2;
		//迴圈查詢
		while(true){
			//什麼情況下沒有這個元素?
			//開始位置在位數之後或或重合,沒有這個元素
			if(begin>=end){
				return -1;
			}
			//判斷中間這個元素是不是要查詢的元素
			if(elements[mid]==target){
				return mid;
			//中間這個元素不是要查的元素
			}else{
				//判斷中間這個元素是不是比目標元素更大
				if(elements[mid]>target){
					//結束位置調到中間位置
					end=mid-1;
				}else{
					//把開始的位置調到中間位置
					begin=mid+1;
				}
				//取出新的中間位置
				mid=(begin+end)/2;
			}
			
		}
	}
	
}

 

轉載於:https://www.cnblogs.com/axu521/p/9958299.html

相關文章