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 相关文章推荐
javascript 广告后加载,加载完页面再加载广告
Nov 25 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
Jan 25 Javascript
jquery中获取id值方法小结
Sep 22 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
Dec 26 Javascript
如何正确使用javascript 来进行我们的程序开发
Jun 23 Javascript
JavaScript替换当前页面的方法
Apr 03 Javascript
jQuery超赞的评分插件(8款)
Aug 20 Javascript
jQuery根据ID、CLASS、等获取对象的实例
Dec 04 Javascript
原生JS改变透明度实现轮播效果
Mar 24 Javascript
解决vue接口数据赋值给data没有反应的问题
Aug 27 Javascript
详解React之key的使用和实践
Sep 29 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
Jul 20 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版
2006/10/09 PHP
第五节--克隆
2006/11/16 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
VUE 3D轮播图封装实现方法
2018/07/03 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
python使用pil生成图片验证码的方法
2015/05/08 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
python实现人人自动回复、抢沙发功能
2018/06/08 Python
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
公司会计岗位职责
2014/02/13 职场文书
会计人员演讲稿
2014/09/11 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
2016年春节问候语
2015/11/11 职场文书
2019秋季运动会口号
2019/06/25 职场文书
详解python网络进程
2021/06/15 Python