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 简便实现页面元素数据验证功能
Mar 24 Javascript
js 实现无干扰阴影效果 简单好用(附文件下载)
Dec 27 Javascript
利用JS判断用户是否上网(连接网络)
Dec 23 Javascript
跟我学习javascript的循环
Nov 18 Javascript
有关jQuery中parent()和siblings()的小问题
Jun 01 Javascript
js图片放大镜效果实现方法详解
Oct 28 Javascript
Vue如何从1.0迁移到2.0
Oct 19 Javascript
three.js中文文档学习之通过模块导入
Nov 20 Javascript
vue-cli V3.0版本的使用详解
Oct 24 Javascript
React如何解决fetch跨域请求时session失效问题
Nov 02 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
Nov 09 Javascript
JS class语法糖的深入剖析
Jul 07 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超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
Node.js编码规范
2014/07/14 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
js获取页面description的方法
2015/05/21 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
Js面试算法详解
2018/04/08 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
Python合并字典键值并去除重复元素的实例
2016/12/18 Python
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
python线程信号量semaphore使用解析
2019/11/30 Python
NumPy统计函数的实现方法
2020/01/21 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
大一新生学期自我评价
2014/04/09 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
股份合作协议书
2014/09/10 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android