简单的Stack实现

简单的 Stack 实现

数组实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Stack {
constructor(size = 10) {
this.arr = [] // 栈
this.size = size // 最大长度
this.top = -1 // 栈顶
}

push(elem) {
if (this.top == this.size) {
this.size *= 2
}
this.arr[++this.top] = elem
return true
}

pop() {
let elem = this.arr[this.top--]
return elem
}

peekTop() {
if (this.top == -1) {
console.log("stack is empty")
return
}
return this.arr[this.top]
}

print() {
let str = ""
for (let i = 0; i <= this.top; i++) {
str += this.arr[i] + " "
}
console.log(str)
}
}
var stack = new Stack()
stack.push(1)
stack.push(2)
stack.pop()
console.log(stack.peekTop())

链式实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Node {
constructor(data = -1, next = null) {
this.data = data
this.next = next
}
}
class Stack {
constructor() {
this.top = null // 栈顶
this.elems = 0 // 成员个数
}

push(elem) {
this.top = new Node(elem, this.top)
this.elems++
}

pop() {
if (this.elems == 0) {
console.log("stack is empty")
return
}
let current = this.top
let elem = current.data
this.top = this.top.next
this.elems--
current = null
return elem
}

peekTop() {
return this.top.data
}
}

结果:

1