棧是一種數據先入後出,後入先出的數據結構。java
若是圖所示,將數字 十、1五、六、9 存入棧後,從棧中取到的數據按順序將會是 九、六、1五、10。棧的結構像咱們生活中的箱子,最早放入的物品將會在箱子的最底部,最後放入的數據在最上面,拿物品時也須要從最上面拿起。數組
public class MyStack {
}
複製代碼
底層使用數組存儲數據,也可使用java的泛型替代Object類型。數據結構
private Object[] arr;//存儲數據
private int top;//棧頂的位置
複製代碼
棧頂:整個棧最上面(最後入棧)的元素,也就是數組中最後存入的元素。spa
棧底:整個棧最下面(最早入棧)的元素,也就是數組中最早存入的元素。3d
public MyStack(){
arr = new Object[10];
top = -1;
}
/** * 參數爲數組的初始長度 * @param maxSize */
public MyStack(int maxSize){
arr = new Object[maxSize];
top = -1;
}
複製代碼
底層的操做就是向數組中存入數據,因爲top
變量記棧頂的位置,因此top
的值增長1後即爲最新的棧頂的置。code
public void push(Object value) {
arr[++top] = value;
}
複製代碼
取得棧頂的數據,並將此數據將棧中移除。向棧中壓入數據須要將記錄棧頂的位置的變量top
加1,同理,移除棧頂數據須要將top
減1。cdn
public Object pop(){
return arr[top--];
}
複製代碼
public Object peek(){
return arr[top];
}
複製代碼
public boolean isEmpty(){
return top == -1;
}
複製代碼
top
的值等於數組最後一個元素的位置即爲存滿blog
public boolean isFull(){
return top == arr.length-1;
}
複製代碼
public class MyStack {
private Object[] arr;//存儲數據
private int top;//棧頂的位置
public MyStack() {
arr = new Object[10];
top = -1;
}
/** * 參數爲數組的初始長度 * * @param maxSize */
public MyStack(int maxSize) {
arr = new Object[maxSize];
top = -1;
}
public void push(Object value) {
arr[++top] = value;
}
/** * 彈出棧頂的數據 * @return */
public Object pop(){
return arr[top--];
}
public Object peek(){
return arr[top];
}
public boolean isEmpty(){
return top == -1;
}
public boolean isFull(){
return top == arr.length-1;
}
}
複製代碼
public static void main(String[] args) {
MyStack stack = new MyStack(4);
stack.push("a");
stack.push("b");
stack.push("c");
stack.push("d");
System.out.println("是否爲空:" + stack.isEmpty());
System.out.println("是否存滿:" + stack.isFull());
System.out.println("棧頂:"+stack.peek());
System.out.println("棧頂:"+stack.peek());
//彈出棧中全部數據
while (!stack.isEmpty()){
System.out.println(stack.pop());
}
System.out.println("是否爲空:" + stack.isEmpty());
System.out.println("是否存滿:" + stack.isFull());
}
複製代碼