数据结构集合
仓库包含iOS SDK中完全不存在的数据结构,或者它们的实现不足。所有这些结构在iOS 5.0应用程序的ARC内存管理代码中都已经过测试。
POSBinaryHeap
二叉堆是基于NSMutableArray
实现的。Core Foundation框架中有一个名为CFBinaryHeapRef
的数据结构。但是,从CFBinaryHeapRef
中移除对象接口非常糟糕。唯一可能的选择是CFBinaryHeapRemoveAllValues
和CFBinaryHeapRemoveMinimumValue
。因此,创建我的二叉堆有两个原因
- 使得可以从中移除相等的和相同的对象。
- 提供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.");
}