JavaScript栈和队列相关操作与实现方法详解


Posted in Javascript onDecember 07, 2018

本文实例讲述了JavaScript栈和队列相关操作与实现方法。分享给大家供大家参考,具体如下:

一、栈的介绍

栈就是和列表类似的一种数据结构,数据只能在栈顶添加或者删除。栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,成为栈顶。栈具有后进先出的特点,所以任何不在栈顶的元素都无法访问。

后进先出(LIFO,last-in-first-out)的数据结构。

对栈的操作

1.对栈的两种主要操作为将一个元素压入栈和将一个元素弹出栈。

入栈:push();
出栈:pop();

2.预览栈顶的元素peek();

pop()虽然可以访问栈顶元素,但调用后,栈顶元素也从栈中永久性的被删除。peek()方法只返回栈顶元素,并不删除它。

对栈的实现

定义stack类的构造函数:

function Stack(){
 this.dataStore=[];//数组dataStore保存栈内元素,初始化为空数组
 this.top=0;
 //top为栈顶位置,被构造函数初始化为0,表示栈顶对应数组的起始位置0
 this.push=push;
 this.pop=pop;
 this.peek=peek;
}

实现push()方法:

function push(element){
 this.dataStore[this.top++]=element;
}

实现pop()方法:

function pop(element){
 return this.dataStore[--this.top];
 //pop方法与push方法相反,它返回栈顶元素,同时将变量top的值减1
}

实现peek()方法:

function peek(element){
 return this.dataStore[this.top-1];
 //peek方法返回数组的第top-1个位置的元素,即栈顶元素。
}

如果对一个空栈调用peek()方法,结果为undefined,因为栈是空的,栈顶没有任何元素。

实现length()

需要知道栈内存储了多少元素,length()方法通过返回变量top值得方法返回栈内的元素个数。

function length(){
 return this.top();
}

实现clear()

clear()将变量top的值设置为0,清空一个栈:

function clear(){
 this.top=0;
}

总结:Stack类

function stack(){
 this.dataStore=[];
 this.top=0;
 this.push=push;
 this.pop=pop;
 this.peek=peek;
 this.clear=clear;
 this.length=length;
}
function push(element){
 this.dataStore[this.top++]=element;
}
function peek(){
 return this.dataStore[this.top-1];
}
function pop(){
 return this.dataStore[--this.top];
}
function clear(){
 this.top=0;
}
function length(){
 return this.top;
}

二、队列

队列是一种列表,队列智能在队尾插入元素,在队首删除元素。队列用于存储按顺序排列的数据,先进先出。

对队列的操作

队列主要两种操作,入队和出队,入队是在队尾插入新元素,出队是删除队首的元素。另一种是读取队头的元素,peek()

push()在数组末尾添加元素

names=[];
names.push("hling");
names.push("aling");
print(names); //显示hling,aling

shift()删除数组中第一个元素

names.shift();
print(names); //显示aling

定义Queue

function Queue(){
 this.dataStore=[];
 this.enqueue=enqueue;
 this.dequeue=dequeue;
 this.front=front;
 this.back=back;
 this.toString=toString;
 this.empty=empty;
}

enqueue()向队尾添加一个元素

function enqueue(element){
 this.dataStore.push(element);
}

dequeue()向队尾添加一个元素

function dequeue(element){
 return this.dataStore.shift(element);
}

读取队首和队尾的元素

function front(){
 return this.dataStore[0];
}
function back(){
 return this.dataStore[this.dataStore.length-1];
}

toString()显示队列内的所有元素

function toString(){
 var retStr="";
 for(var i=0;i<this.dataStore.length;i++){
  retStr+=this.dataStore[i]+"\n";
 }
 return retStr;

empty()方法盘对队列是否为空

function empty(){
 if(this.dataStore.length==0){
  return true;
 }else{
  return false;
 }
}

**Queue队列的类

function Queue(){
 this.dataStore=[];
 this.enqueue=enqueue;
 this.dequeue=dequeue;
 this.front=front;
 this.back=back;
 this.toString=toString;
 this.empty=empty;
}
function enqueue(element){
 this.dataStore.push(element);
}
function dequeue(element){
 return this.dataStore.shift(element);
}
function front(){
 return this.dataStore[0];
}
function back(){
 return this.dataStore[this.dataStore.length-1];
}
function toString(){
 var retStr="";
 for(var i=0;i<this.dataStore.length;i++){
  retStr+=this.dataStore[i]+"\n";
 }
return retStr;
function empty(){
 if(this.dataStore.length==0){
  return true;
 }else{
  return false;
 }
}

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
解密效果
Jun 23 Javascript
javascript AutoScroller 函数类
May 29 Javascript
JavaScript 对Cookie 操作的封装小结
Dec 31 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
Jan 02 Javascript
js实现图片拖动改变顺序附图
May 13 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 Javascript
基于javascript数组实现图片轮播
May 02 Javascript
微信小程序 window_x64环境搭建
Sep 30 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 Javascript
微信小程序全局变量功能与用法详解
Jan 22 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
Sep 10 Javascript
Vue3.0数据响应式原理详解
Oct 09 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
Dec 07 #Javascript
vue webpack打包后图片路径错误的完美解决方法
Dec 07 #Javascript
详解在create-react-app使用less与antd按需加载
Dec 06 #Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
Dec 06 #Javascript
使用react render props实现倒计时的示例代码
Dec 06 #Javascript
微信小程序冒泡事件及其阻止方法实例分析
Dec 06 #Javascript
谈谈React中的Render Props模式
Dec 06 #Javascript
You might like
PHP 魔术变量和魔术函数详解
2015/02/25 PHP
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
AngularJS 事件发布机制
2018/08/28 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
Python的时间模块datetime详解
2017/04/17 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
Python3实现的旋转矩阵图像算法示例
2019/04/03 Python
详解Python3 pandas.merge用法
2019/09/05 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
Python中pass语句的作用是什么
2016/06/01 面试题
工程部经理岗位职责
2013/12/08 职场文书
打架检讨书范文
2015/01/27 职场文书
第28个世界无烟日活动总结
2015/02/10 职场文书
2015年统战工作总结
2015/05/19 职场文书
安全学习心得体会范文
2016/01/18 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis
Nginx速查手册及常见问题
2022/04/07 Servers