在其他高级语言中如C,java,C++都有栈的数据结构,js也是面向对象的语言,我们可以模拟栈的数据结构
1:这里我们声明一个栈类:
function Stack(){
//底层的数据结构为数组
this.data = [];
//栈顶
this.top = 0;
//压栈
this.push = push;
this.pop = pop;
//查看栈顶元素
this.peek = peek;
//栈的长度
this.length = length;
this.clear = clear;
}
function push(element){
this.data[this.top++] = element;
}
function pop(){
return this.data[--this.top];
}
function peek(){
return this.data[this.top - 1];
}
function clear(){
this.top = 0;
}
function length(){
return this.top;
}
2:栈的应用场景一:数制的转换:
数制转换的算法如下:
(1):最高位为n % b,将此数压入栈中,
(2):使用n / b 代替 n,
(3):重复步骤1,2,知道n =0。
(4):将栈中的数据进行反序就得到结果。
//数制的转换
function transformData(stack,num,jishu){
var top = num % jishu;
stack.push(top);
num = Math.floor(num / jishu);
if(num === 0){
return;
}else{
transformData(stack,num,jishu);
}
}
3:栈中的数据反序:方法
function returnResult(stack,num,jishu){
transformData(stack,num,jishu);
var result = stack.data.reverse();
return result.join("");
}
另外一个应用就是回文的判断:将字符串压入栈中,再依次弹出,如果弹出的字符串跟压栈之前的字符串一样的话就是回文字符串。
利用栈模拟递归过程。
5*4*3*2*1,先将5到1压入栈中,然后使用一个循环将数字挨个连乘,就得到了正确的答案