Object-c 實現一個棧

  • 棧釋義

棧是一種線性數據結構,存儲以及查找數據時只能訪問棧的一端。類似於餐廳的盤子,新盤子放到這一疊盤子最上面,取的時候也是從最上面開始。最後放的盤子的也是最先被取走的那個。因此棧稱爲後進先出(Last in First Out )。
下列演示了一系列的棧的操作:
Untitled Diagram-2.png

  • 棧中至少有一個元素的時候才能取出,否則應當給予空棧的提示。只有空間足夠的時候才能再添加一個元素,否則應當給予棧滿的提示。因些根據這些狀態對於棧而言通常操作包括:
  • 棧空判斷
  • 棧滿判斷
  • 彈出棧頂元素
  • 入棧操作
  • 本例使用數組實現一個棧,代碼清單如下:
  • 棧空判斷
 -(BOOL) isEmpty{
        return !self.array.count;
    }
  • 棧滿判斷
-(BOOL) isFull{
    return self.array.count > self.size;
}
  • 彈出棧頂元素且刪除棧頂元素
-(NSObject*) pop{
    if(self.array){
        NSObject* lastObj = self.array.lastObject;
        [self.array removeLastObject];
        return lastObj;
    }
    return nil;
}
  • 入棧操作
-(void)push:(NSObject *)e{
    if (self.array.count < self.size) {
        [self.array addObject:e];
        //NSLog(@"30------入棧元素:%@",e);
    }else{
        NSAssert([self isFull], @"棧滿,不能再入棧");
    }
}
  • 全部代碼如下:
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

/**
 定義一個用作遍歷棧的輸出
 */
typedef void(^StackBlock)(id obj);

@interface Stack : NSObject

-(instancetype) initWithSize:(NSInteger)size;

-(void) push:(NSObject*) e;

-(NSObject*) pop;

-(BOOL) isFull;

-(BOOL) isEmpty;

-(NSInteger) count;
@end

NS_ASSUME_NONNULL_END

#import "Stack.h"

@interface Stack()
@property(nonatomic,strong) NSMutableArray* array;
@property(nonatomic,assign) NSInteger size;
@end

@implementation Stack

-(instancetype) initWithSize:(NSInteger)size{
    self = [super init];
    if (self) {
        self.size = size;
        self.array = [[NSMutableArray alloc] init];
    }
    return self;
}

-(void)push:(NSObject *)e{
    if (self.array.count < self.size) {
        [self.array addObject:e];
        //NSLog(@"30------入棧元素:%@",e);
    }else{
        NSAssert([self isFull], @"棧滿,不能再入棧");
    }
}
-(NSObject*) pop{
    if(self.array){
        NSObject* lastObj = self.array.lastObject;
        [self.array removeLastObject];
        return lastObj;
    }
    return nil;
}

-(BOOL) isEmpty{
    return !self.array.count;
}

-(BOOL) isFull{
    return self.array.count > self.size;
}

-(NSInteger)count{
    return self.array.count;
}

@end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章