我們知道棧的原理(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;
}
其實這個過程就是不斷創建數組,複製數組數據的過程,是否發現這樣的效率好低???
其實只要能理解這個過程,而這個過程不那麼傷腦筋,還是…挺簡單的。
總結:
實現了棧的基本功能。