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宝典学习笔记(下)
Jan 10 Javascript
仿jQuery的siblings效果的js代码
Aug 09 Javascript
jquery序列化表单以及回调函数的使用示例
Jul 02 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
Dec 29 Javascript
jQuery遍历json中多个map的方法
Feb 12 Javascript
JavaScript访问字符串中单个字符的两种方法
Jul 03 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
Nov 25 Javascript
javascript实现方法调用与方法触发小结
Mar 26 Javascript
Vue监听数据对象变化源码
Mar 09 Javascript
bootstrap suggest搜索建议插件使用详解
Mar 25 Javascript
vue.js开发环境搭建教程
May 04 Javascript
详解为生产环境编译Angular2应用的方法
Dec 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
laravel框架关于搜索功能的实现
2018/03/15 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
nodejs实用示例 缩址还原
2010/12/28 NodeJs
window.dialogArguments 使用说明
2011/04/11 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
深入学习nodejs中的async模块的使用方法
2017/07/12 NodeJs
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
2017/10/12 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
vue中注册自定义的全局js方法
2019/11/15 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
python多线程扫描端口示例
2014/01/16 Python
python中的sort方法使用详解
2014/07/25 Python
解决Python requests 报错方法集锦
2017/03/19 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
详解Python time库的使用
2019/10/10 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
C#实现启动一个进程
2016/10/01 面试题
客服文员岗位职责
2013/11/29 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
解放思想演讲稿
2014/09/11 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
聋哑人盗窃罪辩护词
2015/05/21 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server