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 相关文章推荐
List the Stored Procedures in a SQL Server database
Jun 20 Javascript
JavaScript 设计模式学习 Singleton
Jul 27 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
Mar 28 Javascript
setInterval与clearInterval的使用示例代码
Jan 28 Javascript
javascript模拟枚举的简单实例
Mar 06 Javascript
浅谈 javascript 事件处理
Jan 04 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
Jun 05 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
Jan 04 Javascript
JS中setTimeout和setInterval的最大延时值详解
Feb 13 Javascript
微信小程序 支付功能(前端)的实现
May 24 Javascript
JavaScript实现简单评论功能
Aug 17 Javascript
Angular 封装并发布组件的方法示例
Apr 19 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自动加载的两种实现方法
2010/06/21 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
javascript json 新手入门文档
2009/12/03 Javascript
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
python 保存float类型的小数的位数方法
2018/10/17 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
python脚本和网页有何区别
2020/07/02 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
波兰香水和化妆品购物网站:Notino.pl
2017/11/07 全球购物
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
餐厅总厨求职信
2014/03/04 职场文书
贷款承诺书范文
2014/05/19 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
刑事申诉状范文
2015/05/20 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
html实现随机点名器的示例代码
2021/04/02 Javascript
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android