手擼 ? Stack

我們知道棧的原理(Stack)即:就像小時候玩的子彈槍一樣,最先壓入的最後纔打出來。
作用: 判斷符號是否違法,存儲計算指令…
而它的底層原理是由數組實現的(鏈表也可以實現),即用新數組存儲變化後的值,在賦值給原來的數組即可 :
構造方法:


	private int [] old ;
	
	public MyStack()
	{
		// 設置默認棧的大小
		this.old = new int[0];
	}
	
 public void push(int element)
	{
		int[] newArry = new int[old.length+1];
		//將原來的數組元素賦值給新的數組
		for(int i=0;i<old.length;i++)
		{
			newArry[i]=old[i];
		}
		//將push的值放入新數組
		newArry[old.length] = element;
		//將新數組的值賦給old數組
		old = newArry;
	}
//彈出棧頂元素
	public int pop()
	{
		//先判斷棧是否爲空
		if(old.length==0)
		{
			throw new RuntimeException("stack is empty!");
		}
		int  topNum = old[old.length-1];
		//將棧頂元素在數組中刪除
		int newArry[] = new int[old.length-1];
		
		for(int i=0;i<old.length-1;i++)
		{
			newArry[i]=old[i];
		}
		//將新數組的值賦給old數組
		old = newArry;
		//返回棧頂元素
		return topNum;
	}
//查看棧頂元素
	public int peek()
	{
		//先判斷棧是否爲空
		if(old.length==0)
		{
			throw new RuntimeException("stack is empty!");
		}
		//將棧頂元素返回即可
		return old[old.length-1];
	}
	//判斷棧是否爲空
	public boolean isEmpty()
	{
		return old.length==0;
	}

其實這個過程就是不斷創建數組,複製數組數據的過程,是否發現這樣的效率好低???
其實只要能理解這個過程,而這個過程不那麼傷腦筋,還是…挺簡單的。
總結:
實現了棧的基本功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章