js实现栈

栈就是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题。栈是一种高
效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现。

栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用。

特点

由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元
素,必须先拿掉上面的元素。

方法

对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。
入栈使用 push() 方法;
出栈使用 pop() 方法;
peek() 方法则只返回栈顶元素,而不删除它;
clear() 方法清除栈内所有元素;

属性

top:记录栈顶的位置,方便数据的插入和弹出
length:记录栈内元素的个数
enpty:表示栈内是否含有元素

//实现栈
var Stack = function () {
    this.top = 0;
    this.stackDate = [];
}

Stack.prototype = {
    //弹出栈顶的元素
    pop: function () {
        var temp = this.stackDate[this.top - 1];
        this.stackDate.splice(--this.top);        
        return temp
    },
    //增加元素
    push: function (element) {
        this.stackDate[this.top++] = element;        
    },
    //显示栈顶的元素
    peek: function () {
        return this.stackDate[this.top - 1];
    },
    //清空
    clear: function () {
        this.top = 0;
        this.stackDate = [];
    },
    getLength: function () {
        return this.top;
    },
};

数制之间的相互转换(此算法只针对基数为 2~9 的情况)

//进制的转换
var mulBase = function (num, base) {
    var s = new Stack();
    do {
        s.push(num % base);
        num = Math.floor(num /= base);
    } while (num > 0);
    var convert = '';
    while (s.getLength()) {
        convert += s.pop();
    }
    return convert;
};

判断是否是回文

回文是指这样一种现象:一个单词、短语或数字,从前往后写和从后往前写都是一样的。
比如,单词“dad”、“racecar”就是回文;如果忽略空格和标点符号,下面这个句子也是回
文,“A man, a plan, a canal: Panama”;数字 1001 也是回文

//回文字符串
var huiwen = function (str) {
    var s = new Stack();
    for (let index = 0; index < str.length; index++) {
        s.push(str[index]);
    }

    var rStr = '';
    while (s.getLength()) {
        rStr += s.pop();
    }
    if (rStr == str) {
        return true;
    } else {
        return false;
    }
}

判断符号是否匹配

//判断括号是否匹配
var pipei = function (str) {
    var s = new Stack();
    for (let index = 0; index < str.length; index++) {
        if (str[index] == '(') {
            s.push('(');
        }
        if (str[index] == ')') {
            s.pop();
        }
    }
    if (s.getLength() == 0) {
        return true;
    } else {
        return false;
    }
}

//判断大小括号是否匹配
var pipei = function (str) {
    var s = new Stack();
    for (let index = 0; index < str.length; index++) {
        switch (str[index]) {
            case '(':
                s.push('(');
                break;
            case '[':
                s.push('[');
                break;
            case '{':
                s.push('{');
                break;
            case ')':
                if (s.peek() == '(') {
                    s.pop();
                } else {
                    return false;
                }
                break;
            case ']':
                if (s.peek() == '[') {
                    s.pop();
                } else {
                    return false;
                }
                break;
            case '}':
                if (s.peek() == '{') {
                    s.pop();
                } else {
                    return false;
                }
                break;
            default:
                break;
        }
    }
    if (s.getLength() == 0) {
        return true;
    } else {
        return false;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值