自己动手实现一个队列LGQueue

自己动手实现一个队列LGQueue

iOS系统没有提供queue容器,如果想用,需要手动自己来写一个:

.h

//
//  LGQueue.h
//  AntsSportApp
//
//  Created by ligang on 15/3/24.
//  Copyright (c) 2015年 ligang. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface LGQueue : NSObject

@property (nonatomic, strong) NSMutableArray *queue;

@property (nonatomic, readonly) NSInteger count;

- (void)enterQueue:(id)object;
- (id)exitQueue;
- (void)clear;

@end

.m

//
//  LGQueue.m
//  AntsSportApp
//
//  Created by ligang on 15/3/24.
//  Copyright (c) 2015年 ligang. All rights reserved.
//

#import "LGQueue.h"

@implementation LGQueue

- (id)init
{
    if ( self = [super init] ) {

        self.queue = [[NSMutableArray alloc] init];
        _count = 0;

    }
    return self;
}

- (void)enterQueue:(id)object
{
    [self.queue addObject:object];
    _count = self.queue.count;
}

- (id)exitQueue
{
    if ( self.queue.count == 0 )  return nil;

    id object = [self.queue objectAtIndex:0];
    [self.queue removeObjectAtIndex:0];
    _count = self.queue.count;

    return object;

}

- (void)clear
{
    [self.queue removeAllObjects];
    _count = 0;
}

@end

本文出处刚刚在线:http://www.superqq.com/blog/2015/03/24/zi-ji-dong-shou-chuang-jian-%5B%3F%5D-ge-dui-lie-lgqueue/

时间: 2024-10-10 16:58:43

自己动手实现一个队列LGQueue的相关文章

死磕 java线程系列之自己动手写一个线程池

欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写的线程池如何测试? 简介 线程池是Java并发编程中经常使用到的技术,那么自己如何动手写一个线程池呢?本文彤哥将手把手带你写一个可用的线程池. 属性分析 线程池,顾名思义它首先是一个"池",这个池里面放的是线程,线程是用来执行任务的. 首先,线程池中的线程应该是有类别的,有的是核心线程,有

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型

import java.util.Stack; /**  * 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.  * @author user  *  *思路:队列是先入先出,栈是先入后出,可以将数据压入第一个栈后,在弹出来压入第二个栈,弹得时候直接从第二个栈弹出,弹出后又将  *第二个栈中的所有数据弹出重新压入的一个栈  */ public class Solution {     Stack<Integer> stack1 = new Stack<

使用两个栈实现一个队列

使用两个栈Stack1和Stack2来实现一个队列.其中一个栈作为主存放数据的,另外一个栈作为临时存放数据的栈.具体操作如下: enqueue: 栈Stack1的入栈操作. dequeue:将Stack1中的元素一个一个地全部依次出栈,并且在Stack1出栈的同时把出栈的元素作为参数对Stack2进行入栈操作.这步完成之后,执行Stack2出栈操作,这时就将原先在Stack1中最先入栈的元素弹出.最后再将Stack2中的元素一个一个地全部依次出栈,填到Stack1中. 实现代码如下: /** *

用两个栈模拟实现一个队列

题目:如何用两个栈模拟实现一个队列?  如果这两个堆栈的容量分别是m和n(m>n),你的方法能保证的队列容量是多少?(这里讨论的是顺序栈,如果是链式栈的话完全没有必要考虑空间) 分析:栈的特点是“后进先出(LIFO)”,而队列的特点是“先进先出(FIFO)”.用两个栈模拟实现一个队列的基本思路是:用一个栈作为存储空间,另一个栈作为输出缓冲区,把元素按顺序压入两栈(模拟的队列),并按此顺序出队并输出即可. 如下图,用容量为m的栈作为存储空间,容量为n的栈作为输出缓冲区,一开始先将n个元素压入(pu

用两个栈实现一个队列

用两个栈实现一个队列的功能 解析: 假设两个栈A和B,且都为空. 可以认为栈A提供入队列的功能,栈B提供出队列的功能. 入队列:入栈A. 出队列: 如果栈B不为空,直接弹出栈B的数据. 如果栈B为空,则依次弹出栈A的数据,放入栈B中,再弹出栈B的数据. 代码如下: #include<iostream> #include<stack> using namespace std; template<class T> struct MyQueue { void push(T &

剑指 | 7-利用两个栈构建一个队列

题目描述:http://ac.jobdu.com/problem.php?pid=1512 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解析: 定义2个栈s1, s2 1. 开始时,将元素push进s1 2. front()或pop()时,将s1的数据,出栈,顺序压入s2; 此时发现 s2 的出栈顺序即队列的出队列顺序. 3. 再次push时,仍然 push 进 s1 4. front()或pop()时,如果 s2 为空,则将 s1 的所有数据压入 s2

如何用两个栈实现一个队列

在数据结构中,我们都学习过队列和栈,我们知道栈的基本特征是后进先出,这个当然也很好理解,用一句歇后语给大家通俗得解释一下,就是: 砌墙的砖瓦--后来居上.很容易明白,就是后面来的反倒在最上面,当然你取的话,是不是得从最上面开始取呀,很容易明白的.再来说说队列,队列的特征是先进先出,就是说先来的先走,生活中的例子就是排队买票,这个大家都很熟悉了,就是先买到票的人先走,后买到票的人后走. 接下来就进入我们今天的主题,即如何用栈来实现队列? 在这里我们可以通过两个栈来操作.第一个栈中存放入队列的元素,

两个栈实现一个队列

问题描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解法分析: 首先题目要求用两个栈实现一个队列,那么就要先分析为什么这么做.队列的特点就像排队的"先到先得"一样,即先入队的就先出队:而栈则正好相反,特点是"后进先出",那么问题来了怎么用"后进先出"的得到"先进先出"? 传说中最简单通用但效率不高的方法(其实我还真没想到这么做)是,入队的时候用stack1来存储,当出队的时候,先把

web前端面试系列 - 数据结构(两个栈模拟一个队列)

一. 用两个栈模拟一个队列 思路一: 1. 一个栈s1作为数据存储,另一个栈s2,作为临时数据存储. 2. 入队时将数据压人s1 3. 出队时将s1弹出,并压人s2,然后弹出s2中的顶部数据,最后再将剩余数据弹出s2,并压人s1. 思路二: 1. 一个栈s1作为数据存储,另一个栈s2,作为临时数据存储. 2. 入队时,判断s1, 是否为空,如果不为空,则将数据直接压入s1, 如果为空,则将s2中的数据全部倒入s1,在将数据压人s1. 3. 出队时,判断s2, 是否为空,如果不为空,则直接弹出s2