Javascript与数据结构之栈结构

栈结构

基础知识

  • 相关特性
    栈结构是一种特殊的数组,普通的数组可以在任意位置插入和删除元素,但是栈结构不可以,栈结构每次仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对的,把另一端称为栈底。进栈与出栈遵循LIFO(last in first out),后进入的元素最先出栈。类似于自动托盘,最后放上的托盘,往往先拿出去使用。
    生活中类似于栈的:
    处理邮件:最新到的最先处理的
    家中取碗
    栈在程序中的使用:函数调用栈
    举例:函数A调用B,B中又调用C,C中又调用D
    在执行过程中,会先将A压入栈,A没有执行完所以不会出栈,在A中调用B,便会将B压入栈顶,并执行B函数,当B调用C时,又将C压入栈顶,执行函数C,当C调用D时,又将D压入栈顶,执行函数D。直到D函数执行完毕后将函数D弹出,继续执行在栈顶的C函数。然后再执行B函数以及A函数。
  • 专业术语
    进栈:把新元素放到栈顶元素的上面,使之成为新的栈顶元素(又称入栈或压栈)
    出栈:把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈结构的实现

function Stack () {
            //相关属性
            this.item = [];
            //相关方法
            //1.将元素压入栈
            Stack.prototype.push = function (element) {
                this.item.push(element);
            }
            //2.从栈中取出元素
            Stack.prototype.pop = function() {
                return this.item.pop();
            }
            //3.查看一下栈顶元素
            Stack.prototype.peek = function () {
                return this.item[this.item.length - 1];
            }
            //4.判断栈是否为空
            Stack.prototype.isEmpty = function () {
                return this.item.length == 0;
            }
            //5.查看栈元素的个数
            Stack.prototype.size = function () {
                return this.item.length;
            }
            //toString方法
            Stack.prototype.toString = function () {
                var resultString = ''
                this.item.forEach(value => {
                    resultString += value + ' ';
                })
                return resultString;
            }

        }

栈的应用

十进制转二进制
算法:将十进制数字和二整除(二进制是满二进一),直到结果是零为止。如将100转成二进制算法如下

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

余数得从后往前读,那么100转成二进制为:1100100
代码实现:

function decToBinary (decNumber) {
            var stack = new Stack();
            while(decNumber > 0){
                stack.push(decNumber % 2);
                //向下取整
                decNumber = Math.floor(decNumber / 2);
            }
            var binaryString = '';
            while(!stack.isEmpty()){
                binaryString += stack.pop();
            }
            return binaryString;

        }
发布了2 篇原创文章 · 获赞 0 · 访问量 34

猜你喜欢

转载自blog.csdn.net/xiaofangmin/article/details/104464993