ios 简易队列实现

满足一些特殊需求

接口部分(队列支持需求)

#import <Foundation/Foundation.h>

@interface XMQueue : NSObject

///队列追加
- (void)add:(id) obj;

///队列取出
- (id)next;

///返回队列最前端,不删除队列内元素
- (id)first;

///队列内是否还有元素
- (BOOL) isEmpty;

///队列转array
- (NSArray *) arrayCopy;
@end


实现方法

#import "XMQueue.h"

@interface XMQueue()

@property NSMutableArray *array;

@property NSInteger currentIndex;

@end

@implementation XMQueue



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

- (void)add:(id) obj{
    
    if (self.currentIndex >= self.array.count-1) {
        
        NSMutableArray *newArray = [[NSMutableArray alloc] initWithCapacity:self.array.count*2];
        
        for (id obj in self.array) {
            
            [newArray addObject:obj];
            
        }
        
        self.array = newArray;
        
    }
    
    [self.array addObject:obj];

}

- (id)next{
    
    if (![self isEmpty]) {
        id obj = [self.array objectAtIndex:0];
        
        [self.array removeObjectAtIndex:0];

        return obj;
    }else{
        return @"Empty";
    }
    
}
- (id)first{
    if (![self isEmpty]) {
        return self.array[0];
    }else{
        return @"Empty";
    }
}
- (BOOL) isEmpty{
    
    return self.array.count == 0;
    
}

@end



测试

	XMQueue *queue = [[XMQueue alloc] init];
	    
    for (int i = 0; i < 5; i++) {
        [queue add:[NSNumber numberWithInt:i]];
    }
    
    for (NSNumber *number in [queue arrayCopy]) {
        printf("%d,",[number intValue]);
        
    }
    printf("\n");
    [queue add:[queue next]];
    for (NSNumber *number in [queue arrayCopy]) {
        printf("%d,",[number intValue]);
        
    }
    printf("\n");
    [queue add:[queue next]];
    for (NSNumber *number in [queue arrayCopy]) {
        printf("%d,",[number intValue]);
        
    }
    printf("\n");
    [queue add:[queue next]];
    for (NSNumber *number in [queue arrayCopy]) {
        printf("%d,",[number intValue]);
        
    }
    printf("\n");
    [queue add:[queue next]];
    for (NSNumber *number in [queue arrayCopy]) {
        printf("%d,",[number intValue]);
        
    }
    printf("\n");
	[queue add:[queue next]];
    for (NSNumber *number in [queue arrayCopy]) {
        printf("%d,",[number intValue]);
        
    }


结果

在这里插入图片描述

发布了34 篇原创文章 · 获赞 30 · 访问量 8649

猜你喜欢

转载自blog.csdn.net/qq_41586150/article/details/104385727