javascript实现堆栈和简单的应用

堆栈数据结构的实现:

在编程方式上面采用了面向对象编程里面的组合使用构造函数模式和原型模式;
实现原理:这里就不阐述堆栈的基本概念了,学c语言数据结构的时候都学过吧,这里主要纪录一下用js实现的原理;c语言用结构体去实现,在js语言中用面向对象就十分方便了;

  • 用dataStore存储数据;
  • 用top表示栈顶位置,它的值也等于栈的长度;
  • 出栈和入栈方法分别是pop和push;
  • show()方法返回某一个位置的值
  • -
    function Stack(){
        //存放数据
        this.dataStore = [];
        // 纪录栈顶的位置
        this.top = 0;
      }
    Stack.prototype = {
        // 出栈
        push: function(value){
             this.dataStore[this.top ++] = value;
        },
        // 入栈
        pop: function(){
          if (this.top > 0){
            return this.dataStore[-- this.top];
          } else {
            alert("亲:已经到栈顶了,不能弹出栈了");
          }
        },
        // 数组长度
        length: function(){
             return this.top;
        },
        // 展示当前位置的值
        show: function(index){
            if (index <= this.top && index > 0){
                 return this.dataStore[index - 1];
               } else {
                alert("警告:请求输出的值超出栈顶或者小于0");
               }
        }
    }



堆栈实现进制转换

实现原理:
step1: 新建一个堆栈
step2:把值除基数的余数压入栈
step3:更新number值为Math.floor(number / base)
step4:挨个出栈,拼接成字符串形式
代码:

    function convert(number, base){
                var stack2 = new Stack();
                while (number > 0){
                    stack2.push(number % base);
                    number  = Math.floor(number / base);
                }
                var length = stack2.top;
                var str = '';
                for (var i = 0; i < length; i++){
                    str += stack2.pop();
                }
                return str
            }



利用堆栈判断回文

思路:
step1:将字符串顺序遍历压进堆栈
step2:将堆栈依次压出

代码:

  function isPalindrome(str){
              var stack = new Stack();
              var newStr = '';
              for (var i = 0; i < str1.length; i++){
                 stack.push(str1[i]);
              }
              var length = stack.top;
              for (var i = 0; i < length; i++){
                 newStr += stack.pop();
              }
              return newStr === str;
            }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值