• 【JavaScript】实现队列Queue


    • 队列只能在队首删除元素(出队),队尾增加元素(入队)
      在这里插入图片描述
    //定义队列
    
    function Queue(){
        this.dataStore = [];
        this.enqueue = enqueue;     //入队
        this.dequeue = dequeue;     //出队
        this.front = front;         //查看队首元素
        this.back = back;           //查看队尾元素
        this.toString = toString;   //显示队列所有元素
        this.clear = clear;         //清空当前队列
        this.empty = empty;         //判断当前队列是否为空
    }
    
    • enqueque:入队操作
    //向队列末尾添加一个元素,直接调用 push 方法即可
    
    function enqueue ( element ) {
        this.dataStore.push( element );
    }
    
    • dequeque:出队操作
    //删除队列首的元素,可以利用 JS 数组中的 shift 方法
    
    function dequeue () {
        if( this.empty() ) return 'This queue is empty';
        else this.dataStore.shift();
    }
    
    • empty:判空操作
    empty:判断队列是否为空
    
    
    //我们通过判断 dataStore 的长度就可知道队列是否为空
    
    function empty(){
        if( this.dataStore.length == 0 ) return true;
        else return false;
    }
    
    • front:查看队首元素
    
    
    //查看队首元素,直接返回数组首个元素即可
    
    function front(){
        if( this.empty() ) return 'This queue is empty';
        else return this.dataStore[0]}
    
    
    • back:查看队尾元素
    //查看队首元素,直接返回数组最后一个元素即可
    
    //读取队列尾的元素
    function back () {
        if( this.empty() ) return 'This queue is empty';
        else return this.dataStore[ this.dataStore.length - 1 ];
    }
    
    • toString:查看队列中所有元素
    //查看对了所有元素,我这里采用数组的 join 方法实现
    
    function toString(){
        return this.dataStore.join(' ');
    }
    
    • clear:清空当前队列
    // 我们直接将 dataStore 指针清空即可
    
    function clear(){
        delete this.dataStore;
        this.dataStore = [];
    }
    
    • 基数排序
    //基数排序
    
    var queues = [];    //定义队列数组
    var nums = [];      //定义数字数组
    
    //选十个0~99的随机数进行排序
    for ( var i = 0 ; i < 10 ; i ++ ){
        queues[i] = new Queue();
        nums[i] = Math.floor( Math.random() * 101 );
    }
    
    //排序之前
    console.log( 'before radix sort: ' + nums );
    
    //基数排序
    distribution( nums , queues , 10 , 1 );
    collect( queues , nums );
    distribution( nums , queues , 10 , 10 );
    collect( queues , nums );
    
    //排序之后
    console.info('after radix sort: ' + nums );
    
    //根据相应的(个位和十位)数值,将数字分配到相应队列
    
    function distribution ( nums , queues , n , digit ) {  //digit表示个位或者十位的值
        for( var i = 0 ; i < n ; i++ ){
            if( digit == 1){
                queues[ nums[i] % 10 ].enqueue( nums[i] );
            }else{
                queues[ Math.floor( nums[i] / 10 ) ].enqueue( nums[i] );
            }
        }
    }
    
    //从队列中收集数字
    
    function collect ( queues , nums ) {
        var i = 0;
        for ( var digit = 0 ; digit < 10 ; digit ++ ){
            while ( !queues[digit].empty() ){
                nums[ i++ ] = queues[digit].front();
                queues[digit].dequeue();
            }
        }
    }
    

    参考链接:
    https://www.jianshu.com/p/1157aaccad36

  • 相关阅读:
    通用权限的思路。带有数据库关系图
    三层架构之我见 —— 不同于您见过的三层架构。
    n级分类的数据结构
    JS经典源码:通用JavaScript脚本函数库
    SQL 复习笔记
    ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI。
    DataSet导出到Excel比较完整的解决方案(二)服务器端生成文件(downmoon)
    DataSet导出到Excel比较完整的解决方案(一)客户端生成文件(downmoon)
    Squid详细配置实用文档
    Awstats分析nginx日志
  • 原文地址:https://www.cnblogs.com/SiriusZHT/p/14310753.html
Copyright © 2020-2023  润新知