2012-03-21 3 views
-3

nsmutablearraysを使用せずに汎用スタックを実装するにはどうすればよいですか?nsmutablearraysのないobjective-cの汎用スタック?

+0

これまでに試してみたことや気にしていたことは何ですか? –

+1

質問は本当にあります: "あなたはnsmutablearraysを使わずに汎用スタックをどのように実装しますか?"それともあなたの誰かがあなたのためにすべての仕事をしたのですか?少し努力してください。 –

+1

これにNSMutableArrayを使用すると何が問題になりますか? –

答えて

1

@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 

MAJOR NOTICE:

次のコードは、リンクされたリストに基づくスタックの説明図である このコードは、少なくともBUGGYです。 ARCとmallocはうまく動作しませんので、値を設定する前にメモリをクリアするように注意してください。また、私はモバイルサファリでこれを書いたので、エラーチェックを追加してください。空想のコードチェックに時間がかかりませんでした。

0

arraysNSMutableArrayを使用しない場合はC配列)を使用してスタックを実装できます。しかし、これはNSMutableArrayを使用することとはそれほど違いはないと思います。

アレイを完全に回避するには、linked listsを使用してスタックを実装できます。私が思うだろう。このような何か

- (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; 
} 
関連する問題