数据结构
从今天起,来写一些数据结构以及一些算法的知识,我将使用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的二进制
感谢观看