利用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对栈的实现