队列

2024-07-25  本文已影响0人  点滴86

如何理解”队列“

队列这个概念非常好理解。可以把它想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进者先出,这就是典型的“队列”。
栈只支持两个基本操作:入栈push和出栈pop。队列跟栈非常相似,支持的操作也很有限,最基本的操作也是两个:入队enqueue,放一个数据到队列的末尾;出队dequeue,从队列的头部取一个元素。


队列跟栈一样,也是一种操作受限的线性表数据结构。

队列的实现

@interface DMQueue<ObjectType> : NSObject

// 入队列
- (void)enqueue:(ObjectType)aObject;

// 出队列
- (ObjectType)dequeue;

@end

@interface DMQueue ()

@property (nonatomic, strong) NSMutableArray *mArray;

@end

@implementation DMQueue

- (void)enqueue:(id)aObject
{
    [self.mArray addObject:aObject];
}

- (id)dequeue
{
    id aObject = nil;
    if ([self isEmpty] == NO) {
        aObject = [self.mArray objectAtIndex:0];
        [self.mArray removeObjectAtIndex:0];
    }
    return aObject;
}

- (BOOL)isEmpty
{
    BOOL bFlag = NO;
    if ([self.mArray count] == 0) {
        bFlag = YES;
    }
    return bFlag;
}

- (NSMutableArray *)mArray
{
    if (_mArray == nil) {
        _mArray = [[NSMutableArray alloc] init];
    }
    return _mArray;
}

@end

@interface DMQueueDemo : NSObject

@end

@implementation DMQueueDemo

- (void)demo
{
    DMQueue<NSString *> *aQueue = [[DMQueue<NSString *> alloc] init];
    [aQueue enqueue:@"Welcome"];
    [aQueue enqueue:@"To"];
    [aQueue enqueue:@"BeiJing"];
    
    NSLog(@"%@", [aQueue dequeue]);
    NSLog(@"%@", [aQueue dequeue]);
    NSLog(@"%@", [aQueue dequeue]);
}

@end
上一篇 下一篇

猜你喜欢

热点阅读