美文网首页
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 栈的实现

    栈释义 栈是一种线性数据结构,存储以及查找数据时只能访问栈的一端。类似于餐厅的盘子,新盘子放到这一叠盘子最上面,取...

  • Object-c 使用栈实现迷宫

    关于本例子中用到的栈结构请参看:https://www.jianshu.com/p/c941b224a69d 迷宫...

  • iOS

    一、Object-c试题总结: 1、Object-c的类可以多继承么?可以实现多个接口么? 答:Object-c的...

  • Object-c 使用栈实现符号匹配

    基本思想: 对于读入的字符串,按顺序依次读取一个字符,如果该字符为左分隔符,则将其存入栈中。如果发现一个右分隔符,...

  • IOS面试题(一)

    Object-c的类可以多重继承么?可以实现多个接口么? Object-c的类不可以多重继承;可以实现多个接口,通...

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • Swift 队列&栈 相关操作

    栈 LIFO(后进先出) 队列 FIFO(先进先出) 队列与栈相互的实现 栈 - 队列实现 队列 - 栈实现 相关...

  • Algorithm小白入门 -- 队列和栈

    队列和栈队列实现栈、栈实现队列单调栈单调队列运用栈去重 1. 队列实现栈、栈实现队列 队列是一种先进先出的数据结构...

  • 堆(heap),栈(stack)与变量

    堆(heap):是指内存中的一块区域,应用中的所有对象都会保存在堆中,而非Object-C 对象一般放在栈里,栈内...

  • 2018-07-09顺序表实现栈

    栈的实现 ——直接用顺序表(列表list)进行 栈结构实现 栈可以用顺序表实现,也可以用链表实现。 栈的操作 St...

网友评论

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

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