前言
本文主要是总结自己关于数据结构栈的学习笔记,栈在我们的日常生活中以及应用开发中非常常见,其典型的特点是:后进先出。
结构特点

思维导图
代码实现
我们使用数组实现栈的结构,栈所具有的方法如图示,代码地址:链接
function Stack(){let items = [];this.size = function(){return items.length}this.push = function(item){items.push(item)}this.pop = function(){let item = items.pop()console.log('pop',item)return item}this.top = function(){let length = items.length;console.log('top',items[length-1])}this.show = function(){console.log(items)}this.clear = function(){items.length = 0}this.isEmpty = function(){console.log(items.length === 0)return items.length === 0}}let newStack = new Stack();newStack.push(12);newStack.show()newStack.top()newStack.pop();newStack.isEmpty();newStack.show()newStack.push(1);newStack.push(5);newStack.isEmpty();newStack.top()newStack.show()newStack.clear();newStack.show()
探讨问题
栈中的数组为什么不用this.items
因为如果用this.items的话,新建实例就可以通过this.items直接改变数组,这样写相当于内部创建了栈的私有变量,只有栈内部才可以访问,实现了数据的安全控制。
方法中的函数都用构造函数有什么缺点
构造函数的缺点就是每次实例化都会重新生成这些方法,而实际上这些方法是通用的,我们可以写在原型链上,节省性能,也更利于维护。
你能想到哪些影响栈中方法的异常case,做异常处理
涉及到的可能有以下的情况需要考虑:
- 压入栈的元素是否有验证要求
- 出栈时,是有有必要判断栈为空
- 判断栈的空间如何,是否已满
