如果不使用nsmutalearrays,如何实现泛型堆栈?
我想是这样的:
@interface Stack {
id *objects;
int allocatedSize;
}
-(void) push:(id) value;
-(id) peek;
-(id) pop;
@end
@implementation Stack
-(void) push:(id) value {
objects = realloc(objects, ++allocatedSize * sizeof id);
objects[allocatedSize - 1] = value;
}
-(id) pop
{
id temp = objects[--allocatedSize];
objects = realloc(objects, allocatedSize * sizeof id);
return temp;
}
-(id) peek
{
return objects[allocatedSize - 1];
}
@end
主要注意事项:这个代码至少是BUGGY。ARC和malloc彼此不能很好地工作,所以在设置值之前要小心清除内存。此外,请添加错误检查,正如我在mobilesafari中所写的那样,没有太多时间进行花哨的代码检查。
您可以使用数组实现堆栈(如果不想使用NSMutableArray
,则使用C数组)。但我想这与使用NSMutableArray没有太大区别。
为了完全避免数组,可以使用链表来实现堆栈。
以下代码说明了基于链表的堆栈:
- (void)push:(id)item
{
Node *newHead = [[Node alloc] init];
newHead.data = item;
newHead.next = self.head;
self.head = newHead;
}
- (id)pop
{
Node *oldHead = head;
self.head = self.head.next;
return oldHead.data;
}