資料結構(三)——線性結構之棧
阿新 • • 發佈:2018-12-31
1.棧是限定僅在表頭進行插入和刪除操作的線性表。
棧相當於一個箱子,然後往箱子裡一層一層的放東西,最先放的最後取,先進後出。
入口的一端為棧頂,另一端稱作棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
2.對棧的操作
棧我們可以想像成一個數組,每次插入插入在陣列的最後一位,取也從最後一位來取。
棧主要的操作有以下幾個:
(1)入棧(也成壓棧);
(2)出棧;
(3)檢視棧頂元素;
(4)判斷棧是否為空。
package cn.kimtian.array.stack; import java.util.Arrays; /** * 對棧的操作 * 由於棧有先進後出的特性 * 所以我們考慮若 每次為陣列增加元素,加在陣列的最後一位,每次取資料也從陣列的最後一位取。 * 就保證了先進後出。實現了棧的特性。 * * @author kimtian */ public class MyStack { /** * 棧的底層我們使用陣列來儲存資料 */ int[] elements; public MyStack() { elements = new int[0]; } /** * 壓入元素方法 * * @param element 入棧資料 */ public void pushStack(int element) { // 建立一個新的陣列 int[] newArr = new int[elements.length + 1]; // 把原陣列中的元素複製到新的陣列中 for (int i = 0; i < elements.length; i++) { newArr[i] = elements[i]; } // 把新增的元素放入新陣列中 newArr[elements.length] = element; // 使用新陣列替換老陣列 elements = newArr; } /** * 取出棧頂元素 */ public int popStack() { // 棧是空的 if (elements.length == 0) { throw new RuntimeException("stack is empty!"); } // 取出陣列的最後一個元素 int element = elements[elements.length - 1]; // 建立一個新的陣列 int[] newArr = new int[elements.length - 1]; // 把原陣列中除了最後元素的其他元素都放入新陣列中 for (int i = 0; i < newArr.length; i++) { newArr[i] = elements[i]; } // 使用新陣列替換老陣列 elements = newArr; // 返回棧頂元素 return element; } /** * 檢視棧頂元素 */ public int peekStack() { // 棧是空的 if (elements.length == 0) { throw new RuntimeException("stack is empty!"); } // 取出陣列的最後一個元素 int element = elements[elements.length - 1]; return element; } /** * 判斷棧是否為空 */ public boolean isStackEmpty() { return elements.length == 0; } }