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 相关文章推荐
javascript基本语法分析说明
Jun 15 Javascript
JavaScript 异步方法队列链实现代码分析
Jun 05 Javascript
jquery如何根据值设置默认的选中项
Mar 17 Javascript
JavaScript中的Primitive对象封装介绍
Dec 31 Javascript
Node.js Streams文件读写操作详解
Jul 04 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
Aug 02 Javascript
概述javascript在Google IE中的调试技巧
Nov 24 Javascript
vue 中swiper的使用教程
May 22 Javascript
jsonp跨域获取数据的基础教程
Jul 01 Javascript
jQuery中使用validate插件校验表单功能
May 24 jQuery
如何区分vue中的v-show 与 v-if
Sep 08 Javascript
Vue+Flask实现图片传输功能
Apr 01 Vue.js
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
PHP获取二叉树镜像的方法
2018/01/17 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
JS实现简易计算器
2020/02/14 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
Python version 2.7 required, which was not found in the registry
2014/08/26 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
python中sys.argv函数精简概括
2018/07/08 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
超简单使用Python换脸实例
2019/03/27 Python
python的debug实用工具 pdb详解
2019/07/12 Python
用Python配平化学方程式的方法
2019/07/20 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
简述安装Slackware Linux系统的过程
2012/05/08 面试题
后勤自我鉴定
2013/10/13 职场文书
医学生自我鉴定范文
2013/11/08 职场文书
冰淇淋开店创业计划书
2014/02/01 职场文书
计算机专业职业规划
2014/02/28 职场文书
校园活动策划方案
2014/06/13 职场文书
如何写辞职书
2015/02/26 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
Golang 遍历二叉树
2022/04/19 Golang