利用JavaScript实现栈的数据结构示例代码
前言
本文主要给大家介绍的是关于JavaScript实现栈的数据结构的相关内容,分享出来供大家参考学习,话不多少,来一起看看详细的介绍:
堆栈(英语:stack),也可直接称栈,在计算机科学中,是一种特殊的串列形式的数据结构,它的特殊之处在于只能允许在链接串列或阵列的一端(称为堆叠顶端指标,英语:top)进行加入数据(push)和输出数据(pop)的运算。另外栈也可以用一维数组或连结串列的形式来完成。
由于堆叠数据结构只允许在一端进行操作,因而按照后进先出(LIFO,LastInFirstOut)的原理运作。–维基百科
上面是维基百科对栈的解读。下面我们用JavaScript(ES6)代码对栈的数据结构进行实现
实现一个Stack类
/**
*Stack类
*/
classStack{
constructor(){
this.data=[];//对数据初始化
this.top=0;//初始化栈顶位置
}
//入栈方法
push(){
constargs=[...arguments];
args.forEach(arg=>this.data[this.top++]=arg);
returnthis.top;
}
//出栈方法
pop(){
if(this.top===0)thrownewError('Thestackisalreadyempty!');
constpeek=this.data[--this.top];
this.data=this.data.slice(0,-1);
returnpeek;
}
//返回栈顶元素
peek(){
returnthis.data[this.top-1];
}
//返回栈内元素个数
length(){
returnthis.top;
}
//清除栈内所有元素
clear(){
this.top=0;
returnthis.data=[];
}
//判断栈是否为空
isEmpty(){
returnthis.top===0;
}
}
//实例化
conststack=newStack();
stack.push(1);
stack.push(2,3);
console.log(stack.data);//[1,2,3]
console.log(stack.peek());//3
console.log(stack.pop());//3,nowdatais[1,2]
stack.push(3);
console.log(stack.length());//3
stack.clear();//nowdatais[]
用栈的思想将数字转换为二进制和八进制
/**
*将数字转换为二进制和八进制
*/
constnumConvert=(num,base)=>{
conststack=newStack();
letconverted='';
while(num>0){
stack.push(num%base);
num=Math.floor(num/base);
}
while(stack.length()>0){
converted+=stack.pop();
}
return+converted;
}
console.log(numConvert(10,2));//1010
用栈的思想判断给定字符串或者数字是否是回文
/**
*判断给定字符串或者数字是否是回文
*/
constisPalindrome=words=>{
conststack=newStack();
letwordsCopy='';
words=words.toString();
Array.prototype.forEach.call(words,word=>stack.push(word));
while(stack.length()>0){
wordsCopy+=stack.pop();
}
returnwords===wordsCopy;
}
console.log(isPalindrome('1a121a1'));//true
console.log(isPalindrome(2121));//false
上面就是用JavaScript对栈的数据结构的实现,有些算法可能欠妥,但是仅仅是为了演示JS对栈的实现