版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_JavaScript/article/details/84483724
概念:表头进行插入和删除操作的线性表
核心思想:先进后出
作用:在编程语言的编译器和内存中保存变量、方法调用
操作方法:1)push() 进栈,即向栈里添加元素
2)pop() 出栈,即把元素从栈中删除
3)peak() 查询栈顶元素,即查询栈里最顶部那个元素(最后添加)
4)isEmpty() 判断栈是否为空
5)clear() 清空栈元素
6)size() 查询栈的大小,即栈内元素个数
应用场景:1)进制数的转换; 2)有效字符串的检验; 3)迷宫求解; 4)行编辑程序; 5)二叉树的遍历
栈的理解:可以把栈比作一个储物柜,进栈就是把物品放入储物柜,出栈即取出物品。像一般超市的寄存货柜,你把物品一个个的放进去(进栈),第一个放进去的在最里面,依次堆积,最后一个放进去的在最外面;取物品时候,开柜把商品一个个的取出来(出栈),首先取出的是最外面的一个商品(最后放进去的),然后依次往里,也就是说最后放进去的最先取出,最先放进去的最后取出,即是栈的先进后出的思想。
在实际的开发中,会使用栈的思想去操作数组
实例:使用数组来模拟栈的操作,并实现十进制转二进制
/* jshint esversion: 6 */
/* 定义一个栈类 */
function stack(){
// 栈
let arr = []; //私有属性,只有类里面的方法可以方法
// 查看栈
this.getArr = ()=>{
return arr;
},
// 进栈push()
this.push = (element)=>{
arr.push(element);
},
// 出栈pop()
this.pop = ()=>{
return arr.pop();
},
// 查看栈顶peek()
this.peek = ()=>{
return arr[arr.length-1]; // 倒数第一个元素
},
// 查看栈是否为空isEmpty()
this.isEmpty = ()=>{
return arr.length == 0;
},
// 查看栈元素个数size()
this.size = ()=>{
return arr.length;
},
// 清空栈clear()
this.clear = ()=>{
arr = [];
}
}
/* 十进制转二进制 */
function decimalToBinary(num){
let s = new stack(); //调用上面的stack类
let remainder;
while(num>0){
remainder = num%2; //去2的余数,即0或1
s.push(remainder);
num = Math.floor(num/2); //向下取整,如5÷2=2.5向下取整2
}
return s.getArr().join(''); //把十进制数组转成字符串输出
}
(完)