博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
消息队列和堆栈
阅读量:5363 次
发布时间:2019-06-15

本文共 1754 字,大约阅读时间需要 5 分钟。

一、上下文执行栈

堆栈是一种支持后进先出LIFO)的操作受限制的线性表,只允许在栈顶进行插入删除操作。

执行上下文栈

创建一个数组来模拟堆栈。

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

pop:在数组末尾删除最后一个元素,并返回这个元素的值。

var arrStack = [];console.log("入栈");for (var i = 0; i < 5; i++) {  var temp = i + 1;  arrStack.push(temp);//入栈  console.log(arrStack);//当前数据栈}console.log('出栈,先进后出。');/*  出栈过程arrStack.length是变化的,每移除一个元素,arrStack.length就会减1,所以需要将其赋值给一个变量*/var len = arrStack.length;for (var i = 0; i < len; i++) {  console.log(arrStack);//当前数据栈    arrStack.pop();//出栈,在栈顶删除}

数组模拟堆栈

二、消息队列

队列是一种支持先进先出FIFO的操作受限制的线性表,只允许在表的前端(队头)进行删除操作,在表的后端(队尾)进行插入操作。消息队列

创建一个数组来模拟队列。

shift:在数组开头删除第一个元素,并返回这个元素的值;

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

var arrQueue = [];console.log("入队");for (var i = 0; i < 5; i++) {  var temp = i + 1;  arrQueue.unshift(temp);//在队尾,也就是数组开头入队  console.log(arrQueue);//当前数据队}console.log('出队,先进先出。');/*  出队过程arrQueue.length是变化的,每移除一个元素,arrQueue.length就会减1,所以需要将其赋值给一个变量*/var len = arrQueue.length;for (var i = 0; i < len; i++) {  console.log(arrQueue);//当前数据队    arrQueue.pop();//出队,在队头,也就是数组末尾删除}

消息队列

三、push()和unshift()的性能测试

push()和unshift()都能给数组添加元素,push()在数组末尾添加元素,unshift()在数组开头添加元素。unshift()效率较低,因为每添加一个新元素,就要把现有元素向下挪一个位置。到底差异多大,看看下面的例子就知道了。

var arrTest = [];var startTime = +new Date(); //+new Date()相当于new Date().valueOf(),返回当前时间的毫秒数// push性能测试 for (var i = 0 ; i < 100000 ; i++) {   arrTest.push(i); }var endTime = +new Date();console.log("调用push方法往数组中添加个元素耗时"+(endTime-startTime)+"毫秒"); startTime = +new Date(); arrTest = []; // unshift性能测试 for (var i = 0 ; i < 100000 ; i++) {   arrTest.unshift(i); }endTime = +new Date();console.log("调用unshift方法往数组中添加个元素耗时"+(endTime-startTime)+"毫秒");

平时要慎用unshift(),尤其是对大型数组。

pushunshift

如果一定要实现unshift的效果,可以借助reverse,把经过push添加的数组元素反转,即可。reverse方法的性能很高,可以放心使用。

转载于:https://www.cnblogs.com/camille666/p/js_stack_queue.html

你可能感兴趣的文章
软件开发工作模型
查看>>
Java基础之字符串匹配大全
查看>>
面向对象
查看>>
lintcode83- Single Number II- midium
查看>>
移动端 响应式、自适应、适配 实现方法分析(和其他基础知识拓展)
查看>>
使用vue的v-model自定义 checkbox组件
查看>>
[工具] Sublime Text 使用指南
查看>>
Web服务器的原理
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
HAL层三类函数及其作用
查看>>
web@h,c小总结
查看>>
Data Structure 基本概念
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
Python之旅Day14 JQuery部分
查看>>
core--线程池
查看>>
他山之石:加载图片的一个小问题
查看>>
shell - 常识
查看>>
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
PKUWC2018 5/6
查看>>