Skip to main content

資料結構 : 堆疊 (Stack)

堆疊是一種常見的資料結構,其特性是先進後出,後進先出(Last In - First Out)。像堆東西那樣。

也就像搭電梯,先進去的人最後出來,最後進去的人最先出來。

堆疊應該要有的方法

  1. 把資料加進去(疊上去)。
  2. 把最後進去的資料刪除(移除最後疊上去的資料)。
  3. 回傳最後進去的資料,不刪除。

JavaScript 解法

JS 可用陣列方法來達到這三種效果。

  1. push() : 把資料加進去。
  2. pop() : 把最後進去的資料刪除。
  3. peek() : 回傳最後進去的資料,不刪除。
class Stack {
constructor() {
this.data = [];
}

push(record) {
this.data.push(record);
}

pop() {
return this.data.pop();
}

peek() {
return this.data[this.data.length - 1];
}
}

說明:data.length - 1 : 陣列長度 -1 就是陣列中最後一個元素。

Java 解法

Java 本身就有 Stack 物件可以使用,Stack 物件有以下方法可以達到我們需求:

  1. push() : 把資料加進去最上層(疊上去),回傳該資料。
  2. pop() : 把最後進去的資料刪除。
  3. peek() : 回傳最後進去的資料,不刪除。
public class MyStack {

// 加資料進去,return 其值
private static String mypush(Stack st, String str) {
System.out.println("mypush(" + str + ")");

return (String) st.push(str);
}

// 回傳最後進去的,並刪除它
private static void mypop(Stack st) {
System.out.print("mypop -> ");
String str = (String) st.pop();
System.out.println(str);
}

// 回傳最後進去的值,不刪除
private static void mypeek(Stack st) {
System.out.print("mypeek -> ");
String str = (String) st.peek();
System.out.println(str);
}

public static void main(String[] args) {

Stack st = new Stack();

mypush(st, "1st persion");
System.out.println(" push 1st persion 後 stack: " + st);
System.out.println("===========================");

mypush(st, "2nd persion");
System.out.println(" push 2nd persion 後 stack: " + st);
System.out.println("===========================");

mypop(st);
System.out.println(" mypop 後 stack: " + st);
System.out.println("===========================");

mypeek(st);
System.out.println("peek 後 stack: " + st);
}

}

Java 的 Stack 還有其他方法,詳情請見 Java官網 API 文件

此文同時發佈於鐵人賽