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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值