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 相关文章推荐
js操纵跨frame的三级联动select下拉选项实例介绍
May 19 Javascript
JavaScript实现找出字符串中第一个不重复的字符
Sep 03 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
May 13 Javascript
JS实现跟随鼠标的链接文字提示框效果
Aug 06 Javascript
bootstrap table 多选框分页保留示例代码
Mar 08 Javascript
JS实现无缝循环marquee滚动效果
May 22 Javascript
Vue中建立全局引用或者全局命令的方法
Aug 21 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
Dec 01 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
Aug 20 Javascript
JavaScript中的this妙用实例分析
May 09 Javascript
JS监听Esc 键触发事键
Apr 14 Javascript
JavaScript 对象创建的3种方法
Nov 17 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
php表单转换textarea换行符的方法
2010/09/10 PHP
php中批量替换文件名的实现代码
2011/07/20 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
zend framework重定向方法小结
2016/05/28 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
js 可拖动列表实现代码
2011/12/13 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
Python装饰器用法示例小结
2018/02/11 Python
更新修改后的Python模块方法
2019/03/03 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
介绍一下Linux中的链接
2016/06/05 面试题
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL
Mysql文件存储图文详解
2021/06/01 MySQL
css 边框添加四个角的实现代码
2021/10/16 HTML / CSS