image.png

  • 线也是一种线性结构
  • 相比数组,栈对应的操作是数组的子集
  • 只能从一端添加元素,也只能从一端取出元素
  • 这一端称为栈顶

image.png

栈的应用

  • 无处不在的Undo操作(撤销)
  • 程序调用的系统栈

image.png
image.png

  • 括号匹配

image.png

  1. package com.hoho.datastruture.stack;
  2. import com.hoho.datastruture.array.Array;
  3. /**
  4. * @author tlc
  5. */
  6. public class ArrayStack<E> implements Stack<E> {
  7. Array<E> array;
  8. public ArrayStack(int capacity) {
  9. this.array = new Array<>(capacity);
  10. }
  11. public ArrayStack() {
  12. array = new Array<>();
  13. }
  14. @Override
  15. public int getSize() {
  16. return array.getSize();
  17. }
  18. @Override
  19. public boolean isEmpty() {
  20. return array.isEmpty();
  21. }
  22. public int getCapacity() {
  23. return array.getCapacity();
  24. }
  25. @Override
  26. public void push(E e) {
  27. array.addLast(e);
  28. }
  29. @Override
  30. public E pop() {
  31. return array.removeLast();
  32. }
  33. @Override
  34. public E peek() {
  35. return array.getLast();
  36. }
  37. @Override
  38. public String toString() {
  39. StringBuilder res = new StringBuilder();
  40. res.append("Stack:");
  41. res.append('[');
  42. for (int i = 0; i < array.getSize(); i++) {
  43. res.append(array.get(i));
  44. if (i != array.getSize() - 1) {
  45. res.append(", ");
  46. }
  47. }
  48. res.append("] top");
  49. return res.toString();
  50. }
  51. }