本文共 2164 字,大约阅读时间需要 7 分钟。
Objective-C实现优先队列算法
下面是一个简单的Objective-C实现优先队列算法的示例代码:
@import Foundation
@interface PriorityQueueNode : NSObject@property NSInteger value;@property NSInteger priority;@end
@implementation PriorityQueueNode
@implementation PriorityQueue
(id)initWithObject:(id)object{self = [super init];if (self) {[self enqueue:object];}return self;}
(void)enqueue:(id)object{PriorityQueueNode *node = [[PriorityQueueNode alloc] initWithObject:object];node.priority = [objectPriority]; // 根据具体需求设置优先级[self _enqueue:node];}
(id)dequeue{return [self _dequeue];}
(void)_enqueue:(PriorityQueueNode *)node{if (self.isEmpty) {[self enqueueNode:node];return;}
if (node.priority < self.head.priority) {[self enqueueNode:node];return;}
[self enqueueNode:node];}
(void)enqueueNode:(PriorityQueueNode *)node{[self->_nodes insertObject:node atIndex:0];}
(id)_dequeue{if (self.isEmpty) {return nil;}
id resultObject = nil;NSInteger minPriority = INT_MAX;NSInteger index = -1;
for (int i = 0; i < self->_nodes.count; i++) {PriorityQueueNode *node = [self->_nodes objectAtIndex:i];if (node.priority < minPriority) {minPriority = node.priority;index = i;}}
if (index != -1) {resultObject = [self->_nodes objectAtIndex:index];[self->_nodes removeObjectAtIndex:index];}
return resultObject;}
(BOOL)isEmpty{return self->_nodes.count == 0;}
(void)enqueue:(id)object withPriority:(NSInteger)priority{PriorityQueueNode *node = [[PriorityQueueNode alloc] initWithObject:object];node.priority = priority;[self _enqueue:node];}
(void)addElements{[self enqueue:@"A" withPriority:1];[self enqueue:@"B" withPriority:2];[self enqueue:@"C" withPriority:3];[self enqueue:@"D" withPriority:4];}
(void)printAllElements{for (id obj in self) {NSLog(@"%@\n", obj);}}
(void)printPriorityQueue{NSLog(@"Priority Queue: ");for (int i = 0; i < self->_nodes.count; i++) {PriorityQueueNode *node = [self->_nodes objectAtIndex:i];NSLog(@"Index %d: Value: %@, Priority: %d", i, node.value, node.priority);}NSLog(@"------------------");}
(void)removeAllElements{[self->_nodes removeAllObjects];}
(void)isEmptyCheck{if (self.isEmpty) {NSLog(@"PriorityQueue is empty");} else {NSLog(@"PriorityQueue is not empty");}}
// 其他相关方法...
转载地址:http://udifk.baihongyu.com/