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 相关文章推荐
FireFox与IE 下js兼容触发click事件的代码
Nov 20 Javascript
JS日期和时间选择控件升级版(自写)
Aug 02 Javascript
JavaScript Sort 的一个错误用法示例
Mar 20 Javascript
jQuery获取上传文件的名称的正则表达式
May 21 Javascript
在JavaScript中操作时间之setYear()方法的使用
Jun 12 Javascript
JavaScript阻止回车提交表单的方法
Dec 30 Javascript
必备的JS调试技巧汇总
Jul 20 Javascript
Vue.js 60分钟快速入门教程
Mar 28 Javascript
使用jQuery.Pin垂直滚动时固定导航
May 24 jQuery
推荐VSCode 上特别好用的 Vue 插件之vetur
Sep 14 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
Feb 28 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
Sep 26 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 number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
php伪静态之APACHE篇
2014/06/02 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
2020/03/02 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
2020/07/21 Javascript
重命名批处理python脚本
2013/04/05 Python
Python编程之属性和方法实例详解
2015/05/19 Python
Python编程中的文件操作攻略
2015/10/16 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
python版百度语音识别功能
2019/07/09 Python
python 下载文件的多种方法汇总
2020/11/17 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
工伤赔偿协议书范本
2014/04/15 职场文书
单位工作证明格式模板
2014/10/04 职场文书
学生病假条怎么写
2015/08/17 职场文书
党章学习心得体会2016
2016/01/14 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python