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 相关文章推荐
Document对象内容集合(比较全)
Sep 06 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
Mar 29 Javascript
JS截取字符串常用方法详细整理
Oct 28 Javascript
使用JS读取XML文件的方法
Nov 25 Javascript
node.js中EJS 模板快速入门教程
May 08 Javascript
js实现图片懒加载效果
Jul 17 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
Aug 22 Javascript
React Native中Navigator的使用方法示例
Oct 13 Javascript
Js面试算法详解
Apr 08 Javascript
微信小程序实现预览图片功能
Oct 22 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
Oct 02 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
Aug 11 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
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
php常用文件操作函数汇总
2014/11/22 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
图片连续滚动代码[兼容IE/firefox]
2009/06/11 Javascript
html数组字符串拼接的最快方法
2009/09/16 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
opencv python 图像去噪的实现方法
2018/08/31 Python
Python列表删除元素del、pop()和remove()的区别小结
2019/09/11 Python
python3 mmh3安装及使用方法
2019/10/09 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
银行个人求职自荐信范文
2013/12/16 职场文书
商场经理竞聘演讲稿
2014/01/01 职场文书
工商管理专业职业生涯规划
2014/01/01 职场文书
商务日语专业毕业生自荐信
2014/03/27 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
《小小的船》教学反思
2016/02/18 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js