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 相关文章推荐
基于Asp.net与Javascript控制的日期控件
May 22 Javascript
javascript event 事件解析
Jan 31 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
Jan 24 Javascript
原生JavaScript实现连连看游戏(附源码)
Nov 05 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
Jun 03 Javascript
浅谈Javascript中substr和substring的区别
Sep 30 Javascript
在Ubuntu系统上安装Node.JS的教程
Oct 15 Javascript
jquery实现模拟百分比进度条渐变效果代码
Oct 29 Javascript
vue和iview实现Scroll 数据无限滚动功能
Oct 31 Javascript
js实现上下左右键盘控制div移动
Jan 16 Javascript
解决新建一个vue项目过程中遇到的问题
Oct 22 Javascript
js异步接口并发数量控制的方法示例
Nov 22 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表单敏感字符过滤类
2014/12/08 PHP
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
bootstrap table小案例
2016/10/21 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
Python编程中的反模式实例分析
2014/12/08 Python
python交互式图形编程实例(一)
2017/11/17 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
python退出循环的方法
2020/06/18 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
实习教师自我鉴定
2013/12/09 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
商场经理竞聘演讲稿
2014/01/01 职场文书
初级会计求职信范文
2014/02/15 职场文书
教师年度考核评语
2014/04/28 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
社区六一儿童节活动总结
2015/02/11 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis