1. 程式人生 > >線性表——順序實現java

線性表——順序實現java

package linelist;
//線性表的順序實現方式 泛型指的是該線性順序表中儲存的資料型別
public class ArrayList<T> 
{
	//設定線性表的預設長度
    final int defaultSize =0;
    //線性表的最大長度
    int maxSize;
    //線性表的當前長度
    int length;
    //儲存線性表的陣列
    Object [] arryList;
    /*
     * 建構函式
     * @param 構建順序表的時候需要把線性表的長度作為引數傳遞進來
     */
    public ArrayList (int size)
    {
    	//初始化線性表
    	initList(size);
    }
    /*
     * 初始化順序表的方法
     * @param size 指定需要建立的順序表的長度
     */
    public void  initList(int size)
    {
    	if (size<0) {
    		//當傳遞過來的線性表長度小於0的時候丟擲異常
			throw new RuntimeException("順序表的長度不能小於0");
		}else {
			this.maxSize =size;
			this.length =0;
			this.arryList =new Object[size];
		}
    	
    }
    /*
     * 獲取表長的方法
     */
    public int getLength()
    {
    	int num=0;
        
    	 
    		for (int i = 0; i < maxSize; i++) {
    			 
				if(arryList[i]!=null)
				{
					num++;
				}
    		}
    		return num;
    	 
     
    	
    }
    /*
     * 按值查詢
     * 返回元素在順序表中的下標
     */
    public int getIndexByValue(Object e)
    {
    	for (int i = 0; i < getLength(); i++) {
			if(e==arryList[i])
			{
				return i;
			}
		}
    	//如果該元素不存在則返回-1
    	return -1;
    	 
    }
    /*
     * 查詢指定下標位置下的元素值
     */
    public Object getValueByIndex(int i)
    {
    	if(i<maxSize&&i>=0)
    	{
    		return arryList[i];
    	}else {
    		//如果輸入下標小於0或者不小於線性表的最大長度則丟擲異常
			throw new RuntimeException("輸入下標有誤");
		}
    	
    }
    /*
     * 在指定下標位置插入元素
     */
    public void insertByIndex(int index,Object elem)
    {
    	Object preTemp,reTemp;
    	if(index>=0&&index<this.getLength()+1)
    	{
	       

    		if(this.getLength()+1<maxSize)
    		{
    	       
    	        
    			//要插入位置上原來的資料
    			preTemp =arryList[index];
    			//插入目標值
    			arryList[index]=elem;
    			//插入位置之後的值集體後移一位
    			for(int i=index+1;i<=this.getLength();i++)
    			{
    				//下面這三行實現前後兩個位置數的交換
    				reTemp=arryList[i];
    				arryList[i]=preTemp;
    				preTemp =reTemp;
    				 
    			}
    				
    		}else {
				throw new RuntimeException("順序表中元素已滿,不能再進行插入!");
			}
    	}else {
			throw new RuntimeException("輸入的順序表下標不對");
		}
    	
    }
    /*
     * 刪除指定位置上資料
     * 
     */
    public void deleteByIndex(int index) {
    	if(index>=0&&index<this.getLength())
    	{
    		for (int i = index; i < arryList.length-1; i++) {
				arryList[i]=arryList[i+1];
			}
    	}else {
			throw new RuntimeException("輸入的下標有誤!");
		}
		
	}
    /*
	 * 修改指定位置的元素為指定資料
	 */
    public void updateElemByIndex(int index,Object elem)
    {
		if (index>=0&&index<this.getLength())
		{
			arryList[index]=elem;
		}else {
			throw new RuntimeException("輸入下標有誤!");
		}
	}
    /*
     * 判空
     */
    public boolean isEmpty()
    {
    	return (getLength()==0)?true:false;
    }
    /*
     * 刪除順序表
     */
    public void destroyList()
    {
    	this.length=0;
    	this.maxSize =0;
    	this.arryList =null;
    }
    //空表的簡單初始化
    public void init(Object...objects)
    {
    	if(isEmpty())
    	{
    		for(int i=0;i<objects.length;i++)
    		{
    			arryList[i]=objects[i];
    		}
    		
    	}else {
			throw new RuntimeException("非空表不能使用這種初始化方法");
		}
    }
}