一种遵循后进先出(LIFO,last-in-first-out)的有序列表。仅允许在表的一端进行插入和删除操作,这一端称为栈顶
,把另一端称为栈底
。向一个栈中插入新元素叫作
入栈
,它将新元素放在栈顶。从一个栈中删除一个元素叫作出栈
,它是把栈顶元素删除掉,使其相邻的元素称为新的栈顶元素。
应用:进制转换、实现回文、递归演示等
实现:
class Stack {
constructor() {
this.elements = []
}
// 入栈
push(ele) {
this.elements.push(ele)
}
// 出栈
pop() {
return this.elements.pop()
}
// 返回栈顶元素
peek() {
return this.elements[this.length - 1]
}
get length() {
return this.elements.length
}
// 清空栈内元素
clear() {
this.length = 0
}
}
示例1:进制转换
function mulBase(num,base) {
const s = new Stack()
do {
s.push(num % base)
num = Math.floor(num /= base)
} while (num > 0)
let converted = ''
while(s.length > 0) {
converted += s.pop()
}
return converted
}
// test
const num1 = mulBase(32,2)
console.log(num1) // 100000
const num2 = mulBase(125,8)
console.log(num2) // 175
示例2:判断回文
function isPalindrome(word) {
const s = new Stack()
for (let i = 0; i < word.length; i++) {
s.push(word[i])
}
let rWord = ''
while(s.length > 0) {
rWord += s.pop()
}
if (word === rWord) {
return true
}
return false
}
// test
const str1 = isPalindrome('hello')
console.log(str1) // false
const str2 = isPalindrome('racecar')
console.log(str2) // true
示例3: 递归演示 —— 阶乘函数
function factorial(n) {
if (n === 0) return 1
else return n * factorial(n - 1)
}
// test
const num = factorial(5)
console.log(num) // 120
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。