objective-c中没有nsmutalearrays的泛型堆栈



如果不使用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;
}

最新更新