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 相关文章推荐
filemanage功能中用到的common.js
Apr 08 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
Apr 02 Javascript
基于jQuery的图片大小自动适应实现代码
Nov 17 Javascript
常规表格多表头查询示例
Feb 21 Javascript
js操作输入框提示信息且响应鼠标事件
Mar 25 Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
Aug 25 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
Aug 15 Javascript
js利用clipboardData实现截屏粘贴功能
Oct 12 Javascript
vue-resource + json-server模拟数据的方法
Nov 02 Javascript
推荐10款扩展Web表单的JS插件
Dec 25 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
Sep 13 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
php集成动态口令认证
2016/07/21 PHP
PHP简单遍历对象示例
2016/09/28 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
javascript 变量作用域 代码分析
2009/06/26 Javascript
ie focus bug 解决方法
2009/09/03 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
浅谈JavaScript的闭包函数
2016/12/08 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
python调用百度REST API实现语音识别
2018/08/30 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
Myprotein瑞典官方网站:畅销欧洲英国运动营养品牌
2018/01/22 全球购物
大学生两会学习心得体会
2014/03/10 职场文书
老师对学生的评语
2014/04/18 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
护理专业自我评价
2015/03/11 职场文书
2015年底工作总结范文
2015/05/15 职场文书
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫