队列
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
