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

目录
  • 优先级队列
  • 优先级队列的应用场景举例
  • 优先队列的底层实现
  • 习题
一 优先级队列

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

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
来源:简书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值