美文网首页
object-c 栈的实现

object-c 栈的实现

作者: 劉胡來 | 来源:发表于2020-05-10 19:58 被阅读0次
    • 栈释义

    栈是一种线性数据结构,存储以及查找数据时只能访问栈的一端。类似于餐厅的盘子,新盘子放到这一叠盘子最上面,取的时候也是从最上面开始。最后放的盘子的也是最先被取走的那个。因此栈称为后进先出(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
    
    

    相关文章

      网友评论

          本文标题:object-c 栈的实现

          本文链接:https://www.haomeiwen.com/subject/cslsnhtx.html