1. 程式人生 > >資料結構(三)之棧

資料結構(三)之棧

棧是後進先出,先進後出
棧是一種受限制的線性表,只允許一端插入和刪除資料。
棧的實現也有兩種,用陣列實現叫順序棧;用連結串列實現叫鏈式棧。

// 基於陣列實現的順序棧
public class ArrayStack {
  private String[] items;  // 陣列
  private int count;       // 棧中元素個數
  private int n;           // 棧的大小

  // 初始化陣列,申請一個大小為 n 的陣列空間
  public ArrayStack(int n) {
    this.items = new String[n];
    this.n = n;
    this.count = 0;
  }

  // 入棧操作
  public boolean push(String item) {
    // 陣列空間不夠了,直接返回 false,入棧失敗。
    if (count == n) return false;
    // 將 item 放到下標為 count 的位置,並且 count 加一
    items[count] = item;
    ++count;
    return true;
  }
  
  // 出棧操作
  public String pop() {
    // 棧為空,則直接返回 null
    if (count == 0) return null;
    // 返回下標為 count-1 的陣列元素,並且棧中元素個數 count 減一
    String tmp = items[count-1];
    --count;
    return tmp;
  }
}

函式呼叫棧舉例:

int main() {
   int a = 1; 
   int ret = 0;
   int res = 0;
   ret = add(3, 5);
   res = a + ret;
   printf("%d", res);
   reuturn 0;
}

int add(int x, int y) {
   int sum = 0;
   sum = x + y;
   return sum;
}

以下截了王爭老師的一個棧應用的例子

總結:其實棧只有push 跟pop 方法 就是壓棧跟彈棧,都可以用陣列或連結串列替代,但比陣列或連結串列少暴露不少介面,棧在特定場景下用起來更簡單。