用JS实现对栈的操作
栈的结构:栈底、栈顶(栈是一种后入先出的结构)lifo(last_in_first_out)
栈的操作:入栈、出栈
栈的方法:
push //栈顶添加元素
pop // 拿出栈顶元素
peek // 查看栈顶元素
isEmpty // 检查栈是否为空
clear // 移除栈的全部元素
size //获取栈的长度
下面通过Js模拟对于栈的操作,对栈有一个比较直观的感受
构造一个栈的结构
函数自带两种功能,一种是函数,一种是构造器
函数内部使用 this,则this指向构造的对象,因此在如下结构中若是用this则是定义一种共有方法或变量
var Stack = function(){
var item = []
// 栈顶添加元素
this.push = function(element){
item.push(element)
}
// 拿出栈顶元素
this.pop = function(){
return item.pop();
}
// 查看栈顶元素
this.peek = function(){
return item[item.length - 1]
}
// 清空栈元素
this.clear = function(){
item = []
}
// 检查栈是否为空
this.isEmpty = function(){
return item.length == 0;
}
// 获取栈的长度
this.size = function(){
return item.length;
}
}
下面在Chrome调试查看对于栈的操作
新建一个html文件,并引用js代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="zhan.js"></script>
</head>
<body>
</body>
</html>
打开chrome调试,通过查看以下内容,可以发现,已经成功的实现了栈的功能
var s = new Stack()
s.push(1)
s.push(3)
s.push(8)
s.push(9)
s.peek() // 9
s.pop() // 9
s.peek() // 8
s.size() // 3
s.isEmpty() // false
s.clear()
s.peek() // undefined 因为栈内元素被清空,因此返回栈顶元素为undefined
代码实践,将十进制数转换为2进制数
var change = function(num){
var stack = new Stack()
while (num > 0) {
let yushu = num % 2
stack .push(yushu)
num = Math.floor(num / 2)
}
let string = ''
while (!stack.is_empty()) {
string += stack.pop()
}
return string;
}
change(1000) // '1111101000'
队列:先进先出 fifo (first_in_first_out)
向数组第一个位置添加元素:
array.unshift() // 返回最新的数组长度
var array = [1,2,3]
var new_arr = array.unshift(4)
console.log(new_arr ) // 4
console.log(array) // [4, 1, 2, 3]
删除数组第一个元素
array.shift() // 返回被删除元素
var array = [1,2,3]
var new_arr = array.shift()
console.log(new_arr ) // 1
console.log(array) // [2, 3]
来源:CSDN
作者:programmer_trip
链接:https://blog.csdn.net/programmer_trip/article/details/103754826