什么是java棧?
剛開始我也不知道什么是java棧,只知道棧是LIFO(后進先出),隊列是FIFO(先進先出),其實棧就是java的一種數據結構,用java的基礎數據類型構造的一種數據結構。
而棧的底層是通過數組實現的。沒啥了不起,它就是一個java類,這個類里面寫了一些入棧,出棧的方法,而底層是用了數組來存放數據而已。來看看代碼就明白了
package com.ch.interfacemanager.test; public class SqStack { private Object[] stackElem;//數組就是棧的本質 private int top; //top棧頂,其實就是一個數組下標 public SqStack(int maxSize) { stackElem=new Object[maxSize]; top=0; } //清空 public void clear() { top=0; } //是否為空 public boolean isEmpty() { return top==0; } //元素個數(也就是棧的大小) public int length() { return top; } //棧頂 public Object peek() { if(!isEmpty()) return stackElem[top-1]; else return null; } //入棧 public void push(Object x) throws Exception { if(top==stackElem.length) { throw new Exception("棧已滿!"); } else { stackElem[top++]=x; } } //出棧 public Object pop() throws Exception { if(top==0) { throw new Exception("棧為空!"); } else return stackElem[--top]; //刪除然后返回現在的棧頂 } //打印(從棧頂到棧底) public void display() { for(int i=length()-1; i>=0; i--) { System.out.print(stackElem[i]+" "); } System.out.println(); } //jiancha public void showArry(){ System.out.println("數組長度: "+stackElem.length); System.out.print("全部元素: "); for(int i=stackElem.length-1; i>=0; i--) { System.out.print(stackElem[i]+" "); } System.out.println(); } public static void main(String[] args) throws Exception { SqStack sqStack=new SqStack(6); sqStack.push(3); sqStack.push(6); sqStack.push(9); sqStack.push(1);
System.out.print("打印輸出: "); sqStack.display(); int top=(int)sqStack.peek(); System.out.println("棧頂: "+top); sqStack.pop(); System.out.print("彈出棧頂,打印輸出: "); sqStack.display(); System.out.println("數組實際情況: "); sqStack.showArry(); } }
輸出:
打印輸出: 1 9 6 3
棧頂: 1
彈出棧頂,打印輸出: 9 6 3
數組實際情況:
數組長度: 6
全部元素: null null 1 9 6 3
事實證明:
1.數組的長度初始化后是不變的。
2.棧是通過top記錄下標的方式來控制棧的大小。
3.一旦元素入棧數據就一直存在數組當中,出棧操作僅僅是改變top下標值從而達到控制棧的大小。實際元素並沒有從數組中刪除掉。
1.棧
棧相對於開放的數組而言,是訪問受限的
棧只允許訪問一個數據項,即最后插入的數據項,移除這個數據項后才能訪問倒數第二個數據項
棧的特點:先進后出