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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容