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实现学校的校历(asp.net+jquery ui 1.72)
Jan 01 Javascript
在JQuery dialog里的服务器控件 事件失效问题
Dec 08 Javascript
js调用AJAX时Get和post的乱码解决方法
Jun 04 Javascript
jquery彩色投票进度条简单实例演示
Jul 23 Javascript
jQuery解析json数据实例分析
Nov 24 Javascript
node.js 动态执行脚本
Jun 02 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
Jun 02 Javascript
详解Vue微信公众号开发踩坑全记录
Aug 21 Javascript
ejsExcel模板在Vue.js项目中的实际运用
Jan 27 Javascript
微信小程序 checkbox使用实例解析
Sep 09 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
Aug 30 Javascript
微信小程序视频弹幕发送功能的实现
Dec 28 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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
几个php应用技巧
2008/03/27 PHP
国外十大最流行的PHP框架排名
2013/07/04 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
Javascript与flash交互通信基础教程
2008/08/07 Javascript
Tips 带三角可关闭的文字提示
2010/10/06 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
2014/06/05 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
JavaScript Split()方法
2015/12/18 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
判断颜色是否合法的正则表达式(详解)
2017/05/03 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
Python正则表达式分组概念与用法详解
2017/06/24 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
秦兵马俑教学反思
2014/02/07 职场文书
工程项目建议书范文
2014/03/12 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
Windows7下FTP搭建图文教程
2022/08/05 Servers