数据结构与算法JavaScript描述2 —— 栈Stack

一种遵循后进先出(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 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)