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 相关文章推荐
用cssText批量修改样式
Aug 29 Javascript
能说明你的Javascript技术很烂的五个原因分析
Oct 28 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
May 13 Javascript
jquery查找父元素、子元素(个人经验总结)
Apr 09 Javascript
node.js中的console.trace方法使用说明
Dec 09 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
Oct 10 Javascript
1秒50万字!js实现关键词匹配
Aug 01 Javascript
Javascript快速实现浏览器系统通知
Aug 26 Javascript
vue+webpack实现异步组件加载的方法
Feb 03 Javascript
js调用设备摄像头的方法
Jul 19 Javascript
微信小程序实现签到功能
Oct 31 Javascript
微信小程序点击滚动到指定位置的实现
May 22 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 GeoIP的使用教程
2011/03/09 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
thinkphp常见路径用法分析
2014/12/02 PHP
php实现两个数组相加的方法
2015/02/17 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
js实现的捐赠管理完整实例
2015/01/20 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
Python栈算法的实现与简单应用示例
2017/11/01 Python
Python有序查找算法之二分法实例分析
2017/12/11 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
荷兰家电销售网站:Welhof
2020/12/08 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
Unix如何在一行中运行多个命令
2015/05/29 面试题
茶叶生产计划书
2014/01/10 职场文书
个人简历自我评价范文
2014/02/04 职场文书
捐资助学倡议书
2014/04/15 职场文书
英语系毕业生求职信
2014/07/13 职场文书
机械操作工岗位职责
2014/08/08 职场文书