美文网首页
《数据结构与算法》总结(八)优先级队列

《数据结构与算法》总结(八)优先级队列

作者: 原来是泽镜啊 | 来源:发表于2020-07-13 20:39 被阅读0次
    目录
    • 优先级队列
    • 优先级队列的应用场景举例
    • 优先队列的底层实现
    • 习题
    一 优先级队列

    优先级队列也是个队列,因此也是提供以下接口

    int size(); // 元素的数量
    boolean isEmpty(); // 是否为空 
    void enQueue(E element); // 入队 
    E deQueue(); // 出队
    E front(); // 获取队列的头元素 
    void clear(); // 清空
    
    

    普通的队列是 FIFO 原则,也就是

    优先级队列则是按照优先级高低进行出队,比如将优先级最高的元素作为队头优先出队

    二 优先级队列的应用场景举例

    医院的夜间门诊

    • 队列元素是病人
    • 优先级是病情的严重情况、挂号时间

    操作系统的多任务调度

    • 队列元素是任务
    • 优先级是任务类型

    作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:413038000,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

    推荐阅读

    iOS开发——最新 BAT面试题合集(持续更新中)

    三 优先队列的底层实现

    根据优先队列的特点,很容易想到:可以直接利用二叉堆作为优先队列的底层实现

    可以通过ComparatorComparable 去自定义优先级高低

    • PriorityQueue.m
    @implementation PriorityQueue {
        BinaryHeap *_heap;
    }
    
    - (instancetype)init {
        self = [super init];
        if (self) {
            _heap = [[BinaryHeap alloc] init];
        }
        return self;
    }
    
    - (int)size {
        return _heap.size;
    }
    
    - (BOOL)isEmpty {
        return _heap.isEmpty;
    }
    
    - (void)clear {
        [_heap clear];
    }
    
    - (void)enQueue:(id)element {
        [_heap add:element];
    }
    
    - (id)deQueue {
        return [_heap remove];
    }
    
    - (id)front {
        return _heap.get;
    }
    
    
    • 测试代码
    - (void)test1 {
        PriorityQueue *queue = [[PriorityQueue alloc] init];   
        [queue enQueue:@(2)];
        [queue enQueue:@(10)];
        [queue enQueue:@(5)];
        [queue enQueue:@(15)];
    
        while (!queue.isEmpty) {
            NSLog(@"%@",queue.deQueue);
        }
    }
    
    
    • 打印结果
    2020-03-14 11:23:05.140855+0800 17_PriorityQueue[62348:7767683] 15
    2020-03-14 11:23:05.141015+0800 17_PriorityQueue[62348:7767683] 10
    2020-03-14 11:23:05.141116+0800 17_PriorityQueue[62348:7767683] 5
    2020-03-14 11:23:05.141208+0800 17_PriorityQueue[62348:7767683] 2
    
    
    四 习题

    项目链接地址 - 17_PriorityQueue


    作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:413038000,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

    以下资料在群文件可自行下载!

    推荐阅读

    iOS开发——最新 BAT面试题合集(持续更新中)

    作者:路飞_Luck
    链接:https://www.jianshu.com/p/c3600db997ed
    来源:简书

    相关文章

      网友评论

          本文标题:《数据结构与算法》总结(八)优先级队列

          本文链接:https://www.haomeiwen.com/subject/genxtktx.html