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操作页面表格,元素的一些技巧
Feb 02 Javascript
了解一点js的Eval函数
Jul 26 Javascript
wap图片滚动特效无css3元素纯js脚本编写
Aug 22 Javascript
javascript中基本类型和引用类型的区别分析
May 12 Javascript
JS实现自动定时切换的简洁网页选项卡效果
Oct 13 Javascript
AngularJS 整理一些优化的小技巧
Aug 18 Javascript
jQuery EasyUI之验证框validatebox实例详解
Apr 10 jQuery
JS实现动态添加DOM节点和事件的方法示例
Apr 28 Javascript
Angular实现预加载延迟模块的示例
Oct 12 Javascript
angular 组件通信的几种实现方式
Jul 13 Javascript
基于vue和websocket的多人在线聊天室
Feb 01 Javascript
JS实现省市县三级下拉联动
Apr 10 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获取远程文件的内容和大小
2015/11/03 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
PHP获取ttf格式文件字体名的方法示例
2019/03/06 PHP
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
减少访问DOM的次数提升javascript性能
2014/02/24 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
JavaScript中三种异步上传文件方式
2016/03/06 Javascript
Actionscript与javascript交互实例程序(修改)
2016/09/22 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
详解vue 模版组件的三种用法
2017/07/21 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
Python使用当前时间、随机数产生一个唯一数字的方法
2017/09/18 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
Django通过dwebsocket实现websocket的例子
2019/11/15 Python
在服务器上安装python3.8.2环境的教程详解
2020/04/26 Python
佳能英国官方网站:Canon UK
2017/08/08 全球购物
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
个性发展自我评价
2014/02/11 职场文书
财产公证书格式
2014/04/10 职场文书
我的画教学反思
2014/04/28 职场文书
实习推荐信
2014/05/10 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
素质教育培训心得体会
2016/01/19 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android