数据结构中的栈、队列和链表应该是最基础的了,还有像是图、树、二叉树、最优二叉树/解等等也很重要,前端也要会数据结构是我没想到的,总结一下用JavaScript实现数据结构中的栈、队列和链表中的双向链表。
面试的时候被问到的数据结构题,当时是脑袋有点蒙的,用纸笔不知道怎么下手,过后自己写了一下其实并不难,尤其是栈和队列,可以直接直接用原生Array的pop()、push()、shift()、unshift()方法来实现,之前做JSON数据的时候还专门记录过这几个方法,真的是猪油蒙了心居然没写出来。
栈、队列
首先是栈和队列的实现,栈的核心思想是“先进后出”,队列的核心思想是“先进先出”,上课那会老师就不停得强调他们的区别,队列就像排队,先进先出;而栈是不讲道理的,先进后出。如果你当销售,先生产的产品堆压在仓库而把最新生产的产品拿来卖,到最后你可能会被老板批成PPT。
先是栈的实现,看一下主要要实现的方法:
- pop():栈顶元素出栈并返回
- push(el):新元素入栈
- peek():返回栈顶元素
- size():返回栈的长度
- isEmpty():返回栈是否为空
- clear():清空栈
- print():打印栈
class Stack {
constructor(...val){
this.values = [...val]
}
pop(){
return this.values.pop()
}
push(val){
this.values.push(val)
}
peek(){
return this.values[this.values.length-1]
}
size(){
return this.values.length
}
isEmpty(){
return this.values.length == 0
}
clear(){
this.values = []
}
print(){
console.log(this.values.toString())
}
}
然后是队列的实现,和栈的实现非常相似:
- dequeue():头元素出列
- enqueue(el):新元素入列
- front():返回队列头
- size():返回队列的长度
- isEmpty():返回是否为空队列
- clear():清空队列
- print():打印队列
class Queue {
constructor(...val){
this.values = [...val]
}
dequeue(){
return this.values.shift()
}
enqueue(val){
this.values.push(val)
}
front