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 相关文章推荐
jQuery循环滚动展示代码 可应用到文字和图片上
May 11 Javascript
前台js对象在后台转化java对象的问题探讨
Dec 20 Javascript
利用JS判断用户是否上网(连接网络)
Dec 23 Javascript
jQuery实现数秒后自动提交form的方法
Mar 05 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
Apr 07 Javascript
分享JavaScript与Java中MD5使用两个例子
Dec 23 Javascript
jquery制做精致的倒计时特效
Jun 13 Javascript
jQuery插件扩展extend的简单实现原理
Jun 24 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
Mar 05 Javascript
JS闭包原理与应用经典示例
Dec 20 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
Nov 06 Javascript
VSCode launch.json配置详细教程
Jun 18 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 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
php操作excel文件 基于phpexcel
2010/07/02 PHP
php记录日志的实现代码
2011/08/08 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
Yii学习总结之安装配置
2015/02/22 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
实例讲解php将字符串输出到HTML
2019/01/27 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
JS实现简单日历特效
2020/01/03 Javascript
详解Python的Django框架中的中间件
2015/07/24 Python
python黑魔法之参数传递
2016/02/12 Python
python的exec、eval使用分析
2017/12/11 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
python实现桌面壁纸切换功能
2019/01/21 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
私有程序集与共享程序集有什么区别
2013/04/05 面试题
家长通知书教师评语
2014/04/17 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书