手机版

JavaScript数组在数据结构中实现队列和堆栈

时间:2021-10-29 来源:互联网 编辑:宝哥软件园 浏览:

一、队列和栈简介。

1.1、队列的基本概念。

队列:是支持FIFO的集合,即先插入的数据先取出!

如下图所示:

1.2、栈的基本概念。

栈:是支持LIFO的集合,也就是后面插入的数据先取出!

如下图所示:

第二,在JavaScript中实现队列和堆栈。

在JavaScript中,队列和数组主要是通过数组实现的。js数组提供了以下方法,这些方法可以让我们很容易地实现队列和堆栈:

shift:从数组中删除第一个元素,并返回该元素的值。

unshift:在数组的开头添加一个或多个元素,并返回新长度。

push:在数组末尾添加元素,并返回新长度。

pop:从数组中删除最后一个元素,并返回该元素的值。

2.1、实现排队。

脚本类型='text/javascript'//创建一个数组来模拟队列var a=new Array();console . log(a);//unshift:在数组的开头添加一个或多个元素,并返回新的长度console . log(' enqueue ');a . unshift()console . log(a);//-a . unshift();console . log(a);///,a . unshift();console . log(a);///,a . unshift();console . log(a);///,console . log(‘出队,先进先出’);console . log(a);//pop:从数组中删除最后一个元素,返回这个元素的值a . pop();//-console . log(a);a . pop();//-console . log(a);a . pop();//-console . log(a);a . pop();//-console . log(a);谷歌浏览器控制台中/script输出的效果如下图所示:

2.2.实现堆栈。

脚本类型='text/javascript'//创建一个数组来模拟堆栈var a=new Array();console . log(a);//push:在数组末尾添加一个或多个元素,并返回新的length console . log(' stack ');a . push()console . log(a);//-a . push();console . log(a);///,a . push();console . log(a);///,a . push();console . log(a);///,console.log ('stack,LIFO ');console . log(a);//pop:从数组中删除最后一个元素,返回这个元素的值a . pop();//-console . log(a);a . pop();//-console . log(a);a . pop();//-console . log(a);a . pop();//-console . log(a);谷歌浏览器控制台中/script输出的效果如下图所示:

2.3.推送法和非推送法的性能测试。

的push和unshift方法都可以向当前数组添加元素。不同的是,push是在末尾添加的,unshift是在开头添加的。从原理上可以知道,卸船效率低。原因是每次它添加一个元素时,都必须将现有元素下移一个位置。但是效率差有多大呢?让我们简单测试一下。

脚本类型=' text/JavaScript '/* about ' var s=new date();'在代码中。技能描述解释如下:=该操作员不存在;相当于。value of();新日期()等同于新日期()。valueOf()//results,返回当前时间提醒的毫秒数(新的Date());警报(新日期);var s=新日期();alert(s . valueof());alert(s . GetTime());*/var arr=[];var startTime=新日期();//新日期()等同于新日期()。valueOf(),并返回当前时间的毫秒数。//推送性能测试(var I=;我;I){ arr . push(I);} var end time=new Date();Console.log('调用push方法向数组添加元素需要'(endTime-startTime)'毫秒');开始时间=新日期();arr=[];//unshut性能测试(var I=;我;I){ arr . unshift(I);}endTime=新日期();console . log(‘通过调用unshift方法向数组中添加元素需要’(endTime-startTime)‘毫秒’);/script分别执行了10万次推送和解除推送操作,在Google浏览器中运行了一次,结果如下图所示:

因此,unshift比push慢100倍左右!因此,我们应该始终小心使用unshift,尤其是对于大型阵列。如果一定要达到解除偏移的效果,可以使用Array的反转方法,可以反转一个Array。先用push添加要放入数组的元素,然后再进行反向,达到不同步的效果。例如:

脚本类型='text/javascript'//创建一个数组来模拟堆栈var a=new Array();//使用push方法在数组末尾添加元素a . push(). push();a . push();a . push();Console.log('数组反转前数组中元素的顺序');console . log(a);///,//array有一个叫reverse的方法,可以反转一个数组。先用push把要放入数组的元素加起来,然后反向一次,就达到了a.reverse()的效果;//使用reverse方法反转数组console.log('数组反转后数组中元素的顺序');console . log(a);谷歌浏览器控制台中/script输出的效果如下图所示:

从运行结果来看,数组元素的顺序颠倒了。

2.4.反向法性能测试。

反向的表现如何?让我们再测试一次:

脚本类型='text/javascript'var arr=[ ],s=new Date对于(var I=;我;I){ arr . push(I);}//调用reverse方法反转数组arr.reverse()中元素的顺序;Console.log('调用reverse方法以反转数组中元素的顺序需要时间:“(新的Date-s)'毫秒');谷歌浏览器控制台中/script输出的效果如下图所示:

从运行结果可以看出,反向法的性能极高,可以放心使用。

以上是javascript中数组实现的队列和栈的总结,简单测试了大数组操作中push、unshift和reverse的性能。

以上是边肖介绍的JavaScript数组实现数据结构中的队列和栈。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

版权声明:JavaScript数组在数据结构中实现队列和堆栈是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。