基本概念

栈:先进后出,后进先出。
image.png
栈是一种操作受限线性表。仅允许在一端插入和删除数据。

数组/链表可以替代栈,但数组和链表暴露太多接口,操作上灵活自由,也就更容易出错。

如何实现栈

栈可以用数组,也可以用链表实现:

  • 数组实现的栈,叫作顺序栈。
  • 链表实现的栈,叫作链式栈。

这里使用数组来实现一个顺序栈:

  1. // 基于数组实现的顺序栈
  2. public class ArrayStack {
  3. private String[] items; // 数组
  4. private int count; // 栈中元素个数
  5. private int n; //栈的大小
  6. // 初始化数组,申请一个大小为n的数组空间
  7. public ArrayStack(int n) {
  8. this.items = new String[n];
  9. this.n = n;
  10. this.count = 0;
  11. }
  12. // 入栈操作
  13. public boolean push(String item) {
  14. // 数组空间不够了,直接返回false,入栈失败。
  15. if (count == n) return false;
  16. // 将item放到下标为count的位置,并且count加一
  17. items[count] = item;
  18. ++count;
  19. return true;
  20. }
  21. // 出栈操作
  22. public String pop() {
  23. // 栈为空,则直接返回null
  24. if (count == 0) return null;
  25. // 返回下标为count-1的数组元素,并且栈中元素个数count减一
  26. String tmp = items[count-1];
  27. --count;
  28. return tmp;
  29. }
  30. }