【JavaScript实现数据结构系列】栈

堆栈可以用链表和数组两种方式实现,这里分别给出这两种实现方式。
代码如下:

//数组实现
function Stack(){
   this.items = [];
   this.size = 0;
}
Stack.prototype = {
   constructor:Stack,
   push:function(data){
       this.items[this.size++] = data;
   },
   pop:function(){
       return this.items[--this.size];
   },
   clear:function(){
       this.size = 0;
       this.items = [];
   },
   perk:function(){
       return this.items[this.size-1];
   }
}
//链表实现
    function Stack(){
        this.top = null;
        this.size = 0;
    }
    Stack.prototype = {
        constructor:Stack,
        push:function(data){
            var node = {
                data:data,
                next:null
            };
            node.next = this.top;
            this.top = node;
            this.size++;
        },
        pop:function(){
            if(this.top === null){
                return null;
            }
            var out = this.top;
            this.top = this.top.next;
            if(this.size > 0){
                this.size--;    
            }
            return out.data;
        },
        perk:function(){
            return this.top === null ? null:this.top.data; 
        },
        clear:function(){
            this.top = null;
            this.size = 0;
        }

测试:

var stack = new Stack();
stack.push('k');
stack.push('b');
console.log(stack.perk());//输出b
stack.pop();
console.log(stack.perk());//输出k

栈的应用

例子:数值进制转换
算法思想如下:
(1) 最高位为 n % b,将此位压入栈。
(2) 使用 n/b 代替 n。
(3) 重复步骤 1 和 2,直到 n 等于 0,且没有余数。
(4) 持续将栈内元素弹出,直到栈为空,依次将这些元素排列,就得到转换后数字的字符串形式。

具体代码实现:

function mulBase(num,base){
    var stack = new Stack();
    do{
        stack.push(num % base); 
        num = Math.floor(num / base);
    }while(num>0);
    var result = '';
    while(stack.size > 0){
        result += stack.pop();
    }
    return result;
}
console.log(mulBase(234,2)); //输出11101010

初学者学习笔记,如有不对,还希望高手指点。如有造成误解,还希望多多谅解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,530评论 25 709
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,869评论 0 11
  • 文/彪悍姐 01 老刘和他女友是异地,一个离开家乡出来工作,另一个留在家乡;一个在北方,另一个在南方,他们之间相距...
    彪悍姐阅读 587评论 0 1
  • Hey我觉得在写作业的时候不由自主就开始摸鱼的一定不止我一个人x
    燮理阅读 142评论 0 0
  • 文|石忆 梦醒不知归处,呓语阑珊,魂不在,心憔悴。片片丝丝缕缕,前世今生,谁是谁非。 …… 思绪百转千回,面目哧喈...
    石忆_阅读 427评论 5 28

友情链接更多精彩内容