POS数据结构 1.1.2

POS数据结构 1.1.2

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最后发布2019年5月

Pavel Osipov 维护。



  • 作者:
  • Pavel Osipov

数据结构集合

Version

仓库包含iOS SDK中完全不存在的数据结构,或者它们的实现不足。所有这些结构在iOS 5.0应用程序的ARC内存管理代码中都已经过测试。

POSBinaryHeap

二叉堆是基于NSMutableArray实现的。Core Foundation框架中有一个名为CFBinaryHeapRef的数据结构。但是,从CFBinaryHeapRef中移除对象接口非常糟糕。唯一可能的选择是CFBinaryHeapRemoveAllValuesCFBinaryHeapRemoveMinimumValue。因此,创建我的二叉堆有两个原因

  • 使得可以从中移除相等的和相同的对象。
  • 提供Objective-C ARC兼容的实现,而不是纯C实现。

例子

使用POSBinaryHeap实现升序堆排序

- (void)testAscendingHeapSort {
    POSBinaryHeap *heap = [[POSBinaryHeap alloc] initWithOrderingType:POSBinaryHeapOrderingAscending
                                                           comparator:^(NSNumber *l, NSNumber *r) {
        return [l compare:r];
    }];
    [heap addObjectsFromArray:@[@5, @4, @3, @2, @1, @0, @0, @1, @2, @3, @4, @5]];
    NSMutableArray *sortedArray = [NSMutableArray new];
    while ([heap count]) {
        [sortedArray addObject:[heap popTopObject]];
    }
    const BOOL sorted = [sortedArray isEqualToArray:@[@0, @0, @1, @1, @2, @2, @3, @3, @4, @4, @5, @5]];
    STAssertTrue(sorted, @"Ascending heap sort is working.");
}