javascript编程实现栈的方法详解【经典数据结构】


Posted in Javascript onApril 11, 2017

本文实例讲述了javascript编程实现栈的方法。分享给大家供大家参考,具体如下:

栈是限定仅在表尾进行插入或删除操作的线性表,栈是先进后出的。栈的表尾称为栈顶(top),而表头端称为栈底(bottom)。

和线性表类似,栈也有两种存储表示方法,顺序栈链栈

这里讲一下顺序栈,设置指针top指示栈顶元素在顺序栈中的位置。通常的做法就是以top=0表示空栈。base为栈底指针,top为栈顶指针

如果base为null,则表示栈结构不存在,如果top=base则表示空栈。每当插入一个新的元素,top+1,删除元素,top-1。因此,非空栈中top始终在栈顶元素的下一位置上。

如下图所示

javascript编程实现栈的方法详解【经典数据结构】

JavaScript中自带了数组的push和pop方法,其原理无非就是数组最后继续添加和删除数组最后一个元素。这里我们自己实现一遍栈的操作,代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>JS栈</title>
  </head>
  <body>
    <script type="text/javascript">
    function Stack(count){
      var top=-1;//top头指针
      this.myArray=new Array();
      if(count!=undefined){
        this.count=count;
        this.myArray=new Array(this.count);
      }else{
        this.count=0;
      }
      //入栈
      this.In=function(value){
        if(top==this.count){
          return false;
        }else{
          ++top;
          this.myArray[top]=value;
          return true;
        }
        return false;
      }
      //出栈
      this.Out=function(){
        if(top==-1){
          return false;
        }else{
          var removeValue=this.myArray[top];
          this.myArray[top]=null;
          top--;
          return removeValue;
        }
      }
      this.Clear=function(){
        this.top=-1;
      }
      //遍历栈
      this.tostring=function(){
        for(var i=0;i<this.myArray.length;i++){
          document.write(this.myArray[i]+'<br>');
        }
      }
    }
    Stack(3);
    In(1);
    In(2);
    In(3);
    tostring();//1 2 3
    Out();
    Out();
    tostring();//1 null null
    In(4);
    tostring();//1 4 null
    </script>
  </body>
</html>

首先需要定义头指针

function Stack(count){
 var top=-1;//top头指针
 this.myArray=new Array();
 if(count!=undefined){
  this.count=count;
  this.myArray=new Array(this.count);
 }else{
  this.count=0;
 }

然后是入栈操作

//入栈
this.In=function(value){
  if(top==this.count){
   return false;
  }else{
   ++top;
   this.myArray[top]=value;
   return true;
  }
  return false;
}

出栈操作

//出栈
this.Out=function(){
  if(top==-1){
   return false;
  }else{
   var removeValue=this.myArray[top];
   this.myArray[top]=null;
   top--;
   return removeValue;
  }
}

链栈的操作和链表类似,这里就不做详细介绍了。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
比较全面的event对像在IE与FF中的区别 推荐
Sep 21 Javascript
在浏览器中获取当前执行的脚本文件名的代码
Jul 19 Javascript
js打开新窗口方法整理
Feb 17 Javascript
Javascript缓存API
Jun 14 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
Dec 08 Javascript
Ionic+AngularJS实现登录和注册带验证功能
Feb 09 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
Sep 05 Javascript
Angular2+如何去除url中的#号详解
Dec 20 Javascript
vue toggle做一个点击切换class(实例讲解)
Mar 13 Javascript
Webpack中雪碧图插件使用详解
May 25 Javascript
详解基于electron制作一个node压缩图片的桌面应用
Jan 29 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
Aug 18 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
Apr 11 #Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
Apr 11 #Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
Apr 11 #Javascript
基于vuejs实现一个todolist项目
Apr 11 #Javascript
vue实现todolist单页面应用
Apr 11 #Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
Apr 11 #Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
Apr 11 #Javascript
You might like
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
php函数的常用方法及注意之处小结
2011/07/10 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
JavaScript 事件参考手册
2008/12/24 Javascript
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
python简单鼠标自动点击某区域的实例
2019/06/25 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
python 发送json数据操作实例分析
2019/10/15 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
django正续或者倒序查库实例
2020/05/19 Python
linux面试题参考答案(4)
2013/01/28 面试题
2015年机关党建工作总结
2015/05/22 职场文书
解约证明模板
2015/06/19 职场文书
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android