js栈的实现

一、js栈(数组方式)

class Stack{
    constructor(){
        this.item = [];
    }
    push(element) {//添加栈元素
        this.item.push(element);
    }
    pop(){//删除栈顶元素
        return this.item.pop();
    }
    peek() {//返回栈顶元素
        return this.item[this.item.length-1];
    }
    clear(){//清除栈中得所有元素
        this.item = [];
    }
    isEmpty() {//判断栈是否为空
        return this.item.length === 0;
    }
    size() {//返回栈长度
        return this.item.length;
    }
    toString() {//转化成字符串
        return this.item.toString();
    }
}

二、js栈(对象方式)

class Stack {
    constructor() {
        this.count = 0;
        this.item = {};
    }
    push(element) {//添加栈元素
        this.item[this.count] = element;
        this.count++;
    }
    pop(){//删除栈顶元素
        if (this.isEmpty()) return undefined;
        this.count--;
        const result = this.item[this.count];
        delete this.item[this.count];
        return result;
    }
    peek() {//返回栈顶元素
        if (this.isEmpty()) return undefined;
        return this.item[this.count - 1];
    }
    clear(){//清除栈中得所有元素
        this.count = 0;
        this.item = {};
    }
    isEmpty() {//判断栈是否为空
        return this.count === 0;
    }
    size() {//返回栈长度
        return this.count;
    }
    toString() {//转化成字符串
        if (this.isEmpty()) return '';
        let objString = `${this.item[0]}`;
        for (var i = 1; i < this.count; i++) {
            objString = `${objString},${this.item[i]}`;
        }
        return objString;
    }
}

三、测试,以上代码可直接在浏览器控制台运行

var aaa = new Stack();
aaa.push('ss')
aaa.push('ee')
aaa.push('rr')
console.log(aaa.toString())
console.log('栈顶元素:'+aaa.peek())
console.log('栈当前长度:'+aaa.size())
aaa.pop();
console.log(aaa.toString())
aaa.clear();
console.log(aaa.toString())

四、用途
1.问题
判断字符串中的{}、[]、()三种括号是否匹配

2.示例
输入:’()’ 输出:true
输入:’( ) [ ]{ }’ 输出:true
输入:’{ ]’ 输出:false
输入:’( [ ) ]’ 输出:false
输入:’’{ [ ] }’ 输出:true

3.思路
(1).遍历字符串的每一个字符
(2).如果是左括号直接push入栈
(3).如果是右括号,将栈顶的第一个元素取出来与当前的元素进行对比,如果不匹配,则return false,如果匹配,则出栈
(4).遍历完之后,栈为空则该字符串的括号匹配return true;否则不匹配return false

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录介绍 01.栈由简单数据实现1.1 简单数组代码实现1.2 可能出现问题1.3 性能和局限性 02.栈由动态数...
    杨充211阅读 5,441评论 0 2
  • JavaScript 1 初识JavaScript 1.1 JavaScript 是什么 JavaScript 是...
    SY阅读 1,742评论 0 2
  • 一,JavaScript的书写格式 1.行内脚本:写在HTML标签内部,通过一个属性节点来添加,不推荐使用,例如“...
    刘远舟阅读 3,379评论 0 0
  • 栈 定义 栈是一种“操作受限”的线性表,只允许在一端插入(入栈push)和删除(出栈pop)数据。 栈既可以用数组...
    竹blue阅读 1,904评论 0 0
  • JavaScript ECMAScript(ES):规定了一些基础核心的知识(变量、数据类型、语法规范、操作语句等...
    小K强阅读 3,315评论 0 0