什么是栈?

栈是基础数据结构,栈是一种遵循后进先出原则的有序集合,添加新元素的一端称为栈顶,另一端称为栈底。操作栈的元素时,只能从栈顶操作(添加、移除、取值)。

image.png

实现功能

JavaScript 中没有栈,但是可以通过 Array 实现栈的所有功能

  • push () 入栈
  • pop () 出栈
  • top () 获取栈顶值
  • size () 获取栈的元素个数
  • clear () 清空栈

应用场景

  • 十进制转二进制
  • 判断字符串的括号是否有效
  • 函数调用堆栈
  • 二叉树前序遍历(迭代方式)

代码实现

通过数组实现:

  1. const stack = [];
  2. stack.push(1);
  3. stack.push(2);
  4. const item1 = stack.pop();
  5. const item2 = stack.pop();

通过类模拟实现:

  1. class Stack {
  2. constructor() {
  3. this.data = {};
  4. this.count = 0;
  5. }
  6. /**
  7. * 入栈
  8. */
  9. push(item) {
  10. this.data[this.count++] = item;
  11. return item;
  12. }
  13. /**
  14. * 出栈
  15. */
  16. pop() {
  17. if (this.count > 0) {
  18. const item = this.data[this.count - 1];
  19. delete this.data[--this.count];
  20. return item;
  21. } else {
  22. return -1;
  23. }
  24. }
  25. /**
  26. * 获取栈顶值
  27. */
  28. top() {
  29. if (this.count > 0) {
  30. return this.data[this.count - 1];
  31. } else {
  32. return -1;
  33. }
  34. }
  35. /**
  36. * 获取栈的元素个数
  37. */
  38. size() {
  39. return this.count;
  40. }
  41. /**
  42. * 清空栈
  43. */
  44. clear() {
  45. this.data = {};
  46. this.count = 0;
  47. }
  48. }
  49. const stack = new Stack();
  50. stack.push('a');
  51. stack.push('b');
  52. stack.push('c');
  53. stack.pop();