100天iOS数据结构与算法实战 Day10 – 队列

本文介绍了iOS中非循环缓冲区队列的实现,探讨了进出队列的时间复杂度,提出并实现了优化策略,以避免数组元素移动,降低出队操作的时间复杂度。通过移动索引和适时清理多余空间,达到O(1)的出队效率。
摘要由CSDN通过智能技术生成

先进先出,俗称FIFO。

我们来大致描述下进出队列的情况。

640.gif有几个注意的地方。

1:如果队列里没有元素将返回nil ,可以给一个错误提示信息。2:进队列的时间复杂度是O(1),因为随着数组的增加不会影响时间复杂度,只是在最后面添加。但是如果这个数组的容量占满了,那么我们得重新调整数组容量来获取更多的空间,这个操作是重新创建新的内存,然后再copy,这个时间复杂度是O(n) 。3:我们假设iOS的数组不是circular buffer来实现,我们考虑下这个情况,注意后面说的数组都是非circular buffer结构实现的。那么队列从头部出队列,后面元素内存要移位操作。这个是一个时间复杂度为O(n)操作。所以我们不能在数组中删除第一个元素,因为删除后,一般数组的机制为了填充前面的空隙后面的元素会前移,所以我们只是返回要出队的元素。

先看没有优化前的队列的代码

进队的代码

 
  1. - (void)enqueue:(id)object

  2. {

  3.  

  4.    if (object != nil) {

  5.        [self.queueArray addObject:object];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值