資料結構(三)之棧
阿新 • • 發佈:2018-11-08
棧是後進先出,先進後出
棧是一種受限制的線性表,只允許一端插入和刪除資料。
棧的實現也有兩種,用陣列實現叫順序棧;用連結串列實現叫鏈式棧。
// 基於陣列實現的順序棧 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 方法 就是壓棧跟彈棧,都可以用陣列或連結串列替代,但比陣列或連結串列少暴露不少介面,棧在特定場景下用起來更簡單。