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 相关文章推荐
在VS2008中使用jQuery智能感应的方法
Dec 30 Javascript
javascript的offset、client、scroll使用方法详解
Dec 25 Javascript
js借助ActiveXObject实现创建文件
Sep 29 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
Jul 07 Javascript
jQuery中get方法用法分析
Dec 07 Javascript
JS实现太极旋转思路分析
Dec 09 Javascript
JS生成一维码(条形码)功能示例
Jan 19 Javascript
JavaScript数据结构之链表的实现
Mar 19 Javascript
JS面向对象的程序设计相关知识小结
May 26 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
May 13 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
May 31 Javascript
详解vue 命名视图
Aug 14 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
基于mysql的论坛(6)
2006/10/09 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
Js中sort()方法的用法
2006/11/04 Javascript
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
Json解析的方法小结
2016/06/22 Javascript
javascript回到顶部特效
2016/07/30 Javascript
原生js图片轮播效果实现代码
2016/10/19 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
React项目动态设置title标题的方法示例
2018/09/26 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
python 装饰器的基本使用
2021/01/13 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
小学教师事迹材料
2014/01/13 职场文书
统计系教授推荐信
2014/02/28 职场文书
学风建设演讲稿
2014/09/12 职场文书
一份文言文检讨书
2014/09/13 职场文书
股份转让协议书范本
2015/01/27 职场文书
MySQL 如何限制一张表的记录数
2021/09/14 MySQL