数据结构(一)栈

栈是一种后进先出的结构(LIFO)last in first out,入栈与出栈操作的都是栈顶元素

栈的作用是在编程语言的编译器和内存中保存变量方法调用

一、用数组对栈进行结构封装

栈的基本操作

1.push进行压栈操作

2.pop取出栈顶元素

3.peek查看栈顶元素

4.IsEmpty判断栈是否为空

5.size返回栈内元素个数

6.toString将栈内元素转为字符串形式

function Stack() {
            //用来存储栈的数据栈
            this.arr = [];
            //栈底操作
            Stack.prototype.push = function (element) {
                    this.arr.push(element)
                },
                //取出栈顶元素
                Stack.prototype.pop = function () {
                    return this.arr.pop()
                },
                //查看栈顶元素
                Stack.prototype.peek = function () {
                    return this.arr[this.arr.length - 1]
                },
                //判断栈是否为空
                Stack.prototype.IsEmpty = function () {
                    return this.arr.length == 0
                }, //判断栈内元素的个数
                Stack.prototype.size = function () {
                    return this.arr.length
                },//转为字符串形式
                Stack.prototype.toString = function () {
                    var result = ''
                    for (var i = 0; i < this.arr.length; i++) {
                        result += this.arr[i] + ','
                    } return result                }
        }

控制台输出

 在这里值得注意的是我解开了pop方法下面的peek会发生改变因为数组中的pop方法会改变原数组

 

二、二进制十进制互相转换

我们采用正整数转二发就是不断用数字除于2,得到余数,再将商重新作为下一次的除数,最后将余数自下向上输出

function stringTwo(element){
            var stack=new Stack()
            var yushu;
            var stringTwo='';
            while(element>0){
                yushu=element%2
                element=Math.floor(element/2)
                stack.push(yushu)
            }
            while(!stack.IsEmpty()){
                stringTwo+=stack.pop()
            }
            return stringTwo
        }

三、函数调用栈--递归的底层原理

 function fn1(){
            console.log('fn1 finish');
        }
        function fn2(){
            fn1(),
            console.log('fn2 finish');
        }
        fn2()

 

 如果不停递归而不出栈的话会造成栈溢出

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值