基础数据结构之队列和栈

  1. 十进制转二进制
    <script>
        //基于Number.prototype.toString([radix])
        let num=18279;
        console.log(num.toString(2));
    </script>
  1. 栈——十进制转二进制
    <script>
        class Stack{
            container=[];
            enter(value){
                this.container.unshift(value);
            }
            leave(){
                return this.container.shift();
            }
            size(){
                return this.container.length;
            }
            value(){
                //克隆一份的目的是为了防止,外部的操作修改内部的container
                return this.container.slice(0);
            }
        }
        Number.prototype.decimal2binary=function decimal2binary(){
            let decimal=this,
            sk=new Stack;
            if(decimal===0) return '0';
            while(decimal>0){
                //n是商,m是余数
                let n=Math.floor(decimal/2),
                    m=decimal%2;
                sk.enter(m);
                decimal=n;
            }            
            return sk.value().join('');            
        };
        let num=1893;
        console.log(num.decimal2binary());
    </script>
  1. 优先级队列
    <script>
        class Queue{
            container=[];
            enter(element,priority=0){
                let obj={
                    element,
                    priority
                }
                if(priority===0){
                    this.container.push(obj);
                    return;
                }
                let flag=false;
                for(let i=this.container.length-1;i>=0;i--){
                    let item=this.container[i];
                    if(item.priority>=priority){
                        this.container.splice(i-1,0,obj);
                        flag=true;
                        break;
                    }
                }
                !flag?this.container.push(obj):null;
            }
            leave(){
                return this.container.shift();
            }
            size(){
                return this.container.length;
            }
            value(){
                return this.container.slice(0);
            }
        }
    </script>
  1. 队列——击鼓传花
    <script>
        class Queue{
            container=[];
            enter(element){
                this.container.push(element); 
            }
            leave(){
                return this.container.shift();
            }
            size(){
                return this.container.length;
            }
            value(){
                return this.container.slice(0);
            }
        }
        function game(n,m){
            let qe=new Queue;
            for(let i=0;i<n;i++){
                qe.enter(i+1);
            }
            while(qe.size()>1){
                for(let i=0;i<m-1;i++){
                //未中的拿出来放到队列的末尾
                qe.enter(qe.leave());
            }
            //中的直接移除
            qe.leave();
            }
          return qe.value().toString();
        }
        //8个人、5个数
        console.log(game(8,5));
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值