数据结构-栈结构

栈是一种只能从表的一端存取数据且遵循 "先进后出" 原则的线性存储结构

  • 其限制是仅允许在表的一端进行插入和删除运算。这一端称为栈顶,另一端称为栈底。
  • LIFO(last in first out) 表示后进先出的元素,第一个弹出栈空间。
  • 向一个栈插入新元素又称为进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
  • 从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

js实现栈结构

   // js 实现 栈结构
    function Stack() {
        // 栈中属性
        this.items = []

        // 压栈
        Stack.prototype.push = function(element) {
            this.items.push(element)
        }

        // 出栈
        Stack.prototype.pop = function() {
            return this.items.pop()
        }

        // 查看栈顶元素
        Stack.prototype.peek = function() {
            return this.items[this.items.length - 1]
        }

        // 查看栈是否是空的
        Stack.prototype.isEmpty = function() {
            return this.items.length === 0
        }

        // 获取栈的元素个数
        Stack.prototype.size = function() {
            return this.items.length
        }

        // 把栈结构内容以字符串形式返回
        Stack.prototype.toString = function() {
            var str = ''
            for (var i = 0; i < this.items.length; i++) {
                str += this.items[i] + ' '
            }
            return str
        }
    }

    // 测试栈
    var s = new Stack()

    s.push(10)
    s.push(20)
    s.push(30)
    console.log(s.toString()); // 10 20 30
    s.pop()
    console.log(s.toString()); // 10 20
    console.log(s.peek()); //20
    console.log(s.isEmpty()); // false
    console.log(s.size()); //2

栈的应用 (10进制转2进制)

原理:
假如我们要计算100转换为二进制是多少

被除数 除数 余数
100 2 0
50 2 0
25 2 1
12 2 0
6 2 0
3 2 1
1 2 1

二进制就是余数 从小往上拼接即: 1100100

代码

    // 十进制转二进制
    function des2bin(decNumber) {
        // 定义栈结构
        var stack = new Stack();

        // 循环操作
        // 循环条件 被除数大于0
        while (decNumber > 0) {
            // 把余数 放入栈中
            stack.push(decNumber % 2);
            // 获取整除后的结果 , 作为下一次运算的被除数
            decNumber = Math.floor(decNumber / 2);
        }
        // 从栈中取出0 和 1
        var str = "";
        while (!stack.isEmpty()) {
            str += stack.pop();
        }
        return str;
    }
    console.log(des2bin(100)); // 1100100

你可能感兴趣的:(数据结构-栈结构)