前言
本文主要是总结自己关于数据结构栈的学习笔记,栈在我们的日常生活中以及应用开发中非常常见,其典型的特点是:后进先出。
结构特点
思维导图
代码实现
我们使用数组实现栈的结构,栈所具有的方法如图示,代码地址:链接
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,做异常处理
涉及到的可能有以下的情况需要考虑:
- 压入栈的元素是否有验证要求
- 出栈时,是有有必要判断栈为空
- 判断栈的空间如何,是否已满