栈是一种后进先出的结构(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()
如果不停递归而不出栈的话会造成栈溢出