? ? ? ?Stack是一種運算受限的線性表,其特點在于僅允許在表的一端(即表尾)進行插入和刪除操作。這一端被稱為棧頂,而相對的另一端則稱為棧底。向一個棧插入新元素的操作稱為進棧或入棧,它將新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素的操作稱為出棧或退棧,它將棧頂元素刪除掉,使其下面的相鄰元素成為新的棧頂元素。由于棧的插入和刪除運算僅在棧頂一端進行,后進棧的元素必定先出棧,因此棧也被稱為后進先出表(Last In First Out,簡稱LIFO)。
? ? ? 棧結構的示意圖如下:
?
? ? ? ?下列為Stack的一些常用方法:?
? ??
? ? ? ?push()方法通常稱之為壓棧,也就是將元素放入棧內使用也非常簡單:
?//實例化一個棧
Stack<Integer> stack = new Stack<>();
//進行壓棧
stack.push(10);
? ? 通過這種方法我們就將10放入棧中同時也會有一個返回值可以用也可以不同?。
? ?pop()將棧頂元素出棧并返回,這就非常容易理解了,簡單理解就是返回棧頂元素并將棧頂元素移除棧頂位置。
System.out.println(stack.pop());
? ?此時輸出結果就是10,如果我們此時再一次進行pop()操作那么將會報錯因為此時棧中已經沒有元素了:
?
? ? 此時編譯器會出現空棧錯誤。
peek()與pop()的區別就是peek()只是瞄一眼并不將棧頂元素移除,如果我們進行上述操作:
System.out.println(stack.peek());
System.out.println(stack.peek());
System.out.println(stack.peek());
? ? ?輸出結果都是10,因為在訪問的時候我們并沒有將棧頂元素進行移除,因此·我們可以無限次的訪問棧頂元素(前提是棧頂得有元素)。
? ? empty()就非常簡單了判斷棧是否為空,如果為空返回true反之返回false。
? 如果我們此時開始訪問將會返回一個false因為此時棧內已經有一個元素10,因此不為空返回false。?
?