数据结构--栈

数据结构

从今天起,来写一些数据结构以及一些算法的知识,我将使用js代码来进行实现,先来个简单的栈

基本思想

栈在我看来就是后进先出的,很类似与数组的push和pop方法,js中也有很多用到了栈结构,包括函数的运行顺序,以及基本数据的存储都用到了栈,本文只是简单说下栈的特性,并用代码来实现一些基本,包括入栈出栈,查看栈顶元素,检查栈是否为空,清空栈以及查看栈的长度,获取栈大小,以及获取栈的一些操作

上代码

首先我们先弄一个构造函数来创建类,为以后的new提供方便,并且在其设置一个私有变量数组,来存储相应的数据,以及对应的操作改变数据后会进行存储。

var stack = function () {
    var items = [] //私有
    }

接下来就写我们的方法了,先来出栈和入栈,这里可以调用数组的push和pop方法,很便捷,这里说一下怎么用,push往数组后添加一个元素,pop切除数组的最后一个元素,并且返回的是切除的数组的值,注这里就是给我们定义的私有变量items来进行增加元素或者删除数据

 // 入栈 栈顶添加元素
    this.push = (element) => {
        items.push(element)
    }
    // 出栈 栈顶移除元素
    this.pop = () => {
        // 需要返回出栈的值
        return items.pop()
    }

其他的几个操作就和数组的length有关了,

// 查看栈顶元素
    this.peek = () => {
        return items[items.length - 1]
    }
    // 检查栈是否为空
    this.isEmpty = () => {
        return items.length == 0
    }
    // 清空栈
    this.clear = () => {
        items = []
    }
    // 获取栈大小
    this.size = () => {
        return items.length
    }
    // 检查栈
    this.getItems = () => {
        return items
    }

这里运用刚刚生成的栈构造函数来进行十进制转二进制的操作
先生成一个对象,十进制转二进制就是把数取余2再给反过来输出,详细方法可以自行搜索

var stack = new stack()
```javascript

var divBy2 = (number)=> {
    var string2 = ''
    var yushu
    while (number > 0) {
        yushu=number%2
        stack.push(yushu)
        number = Math.floor(number/2)
    }
    while(!stack.isEmpty()){
        string2+=stack.pop()
    }
    return string2
}

这里据一个例子7转为2进制
先是7%2得1,把1入栈,
然后经过循环把7除以2并向下取整转为3
再3%2得1,再把1入栈,
然后经过循环把3除以2并向下取整转为1
再1%2得1,再把1入栈,
此时7已经为0,不再循环,退出while循环
此时栈中有[1,1,1]
然后经过检查栈是否为空逐步将栈顶元素出栈并相加为string2,最后返回这个值就是 111 也就是7的二进制
感谢观看

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值