Javascript工程师,总会面对一个问题,数据结构和算法会成为自己的短板,不仅是对非科班,甚至一些科班出身的工程师来说也是自己的短板,于是就有了这系列文章。
基础决定深度,前端入门易,上升困难,学习曲线陡,很多时候就是因为缺少这些思维。
今天实现的是最基本的数据结构之一 栈
栈在js中有着非常重要,基本类型会存储在栈中,你可以操作实际的值。
要定义一个栈,首先需要明白,栈的基本结构有哪些,需要遵循哪些规则。
栈是一个线性表,遵循着LIFO原则的有序集合,也就是先进后出,先进入栈的元素,会储存在栈底,后进入的元素会放在栈顶,就像我们小时候见过的粮仓一样,先进入的小麦被放在栈底。并且,栈只有一端是可以操作的,就是栈顶。
function Stack() {
}
首先创建一个函数(对象)表示栈。
let items = [];
然后需要创建一个数组来保存需要保存的元素。
this.push = function(element) {
items.push(element)
}//调用数组的push方法,将元素加入栈
this.pop = function() {
return items.pop();
}//调用数组的pop方法移除栈顶元素并且返回该元素
this.peek = function() {
return items[items.length - 1]
}//调用数组的peek方法,返回栈顶的第一个元素也就是整个栈的最后一个元素。
this.isEmpty = function() {
return items.length == 0;
}//检查栈是不是为空的,返回布尔值
this.size = function() {
return items.length;
}//返回栈的长度
this.clear = function() {
items = [];
}//删除栈中所有的元素
this.print = function() {
console.log(items.toString)
}//打出栈所有的元素
接下来需要给栈定义方法
function Stack() {
let items = [];
this.push = function(element) {
items.push(element)
console.log(this)
}
this.pop = function() {
return items.pop();
}
this.peek = function() {
return items[items.length - 1]
}
this.isEmpty = function() {
return items.length == 0;
}
this.size = function() {
return items.length;
}
this.clear = function() {
items = [];
}
this.print = function() {
console.log(items.toString())
}
}
这样就简单的创建了栈
接下来需要试一下栈的基本功能
let stack = new Stack();定义一个新的对象
console.log(stack.__proto__)//__proto__等于prototype.constructor
栈就这样创建完成了。