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 相关文章推荐
jquery trigger伪造a标签的click事件取代window.open方法
Jun 23 Javascript
JavaScript基础语法、dom操作树及document对象
Dec 02 Javascript
jQuery中mouseover事件用法实例
Dec 26 Javascript
易操作的jQuery表单提示插件
Dec 01 Javascript
ES6记录异步函数的执行时间详解
Aug 31 Javascript
js给table赋值的实例代码
Oct 13 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
Apr 12 Javascript
Angular 4.x中表单Reactive Forms详解
Apr 25 Javascript
详解如何写出一个利于扩展的vue路由配置
May 16 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
Nov 09 Javascript
javascript实现点击星星小游戏
Dec 24 Javascript
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
Apr 11 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
Oracle Faq(Oracle的版本)
2006/10/09 PHP
PHP 文件上传全攻略
2010/04/28 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
PHP7多线程搭建教程
2017/04/21 PHP
在laravel中使用Symfony的Crawler组件分析HTML
2017/06/19 PHP
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
select下拉框插件jquery.editable-select详解
2017/01/22 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
常见的python正则用法实例讲解
2016/06/21 Python
opencv python 图像去噪的实现方法
2018/08/31 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
简述synchronized和java.util.concurrent.locks.Lock的异同
2014/12/08 面试题
材料物理专业大学毕业生求职信
2013/10/15 职场文书
应届生法律求职信
2013/10/22 职场文书
幼儿教师自我鉴定
2013/11/02 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
2019财务转正述职报告
2019/06/27 职场文书
详解Javascript实践中的命令模式
2021/05/05 Javascript
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python
MySQL数据库查询之多表查询总结
2022/08/05 MySQL