数据结构 02 队列

队列

先进先出(LIFO: First In First Out)

# -.- coding:utf-8 -.-
from __future__ import print_function


def checker(func):

    def wrapper(self, *args, **kwargs):
        if self.empty():
            return self.items
        return func(self, *args, **kwargs)

    return wrapper


class Queue(object):

    """队列: 有序, 先进先出"""

    def __init__(self):
        self.items = []

    def size(self):
        """获取队列元素总数."""
        return len(self.items)

    def empty(self):
        """队列为空则返回: True ; 队列非空返回: False"""
        return not self.size()

    def append(self, item):
        """在队列的最末端增加一个元素."""
        self.items.append(item)
        return self.items

    @checker
    def peek(self):
        """在队列的最左处获取一个元素, 不做移除动作."""
        return self.items[0]

    @checker
    def get(self):
        """在队列的最左处获取一个元素, 并移除该元素."""
        return self.items.pop(0)

    def __iter__(self):
        """让队列支持迭代"""
        return self

    def __next__(self):
        """Python3: 让队列支持for循环"""
        if not self.empty():
            return self.get()
        raise StopIteration

    def next(self):
        """Python2: 让队列支持for循环"""
        return self.__next__()

    def __str__(self):
        """让队列支持print打印结果"""
        return "{}".format(self.items)


if __name__ == '__main__':
    # 创建一个队列对象.
    queue = Queue()

    # 为队列对象增加几个元素
    queue.append('a')
    queue.append('b')
    queue.append('c')
    queue.append('d')
    queue.append('e')

    # 查看队列对象
    print("查看队列对象: ", queue)

    # 获取队列对象的一个元素
    print("获取队列对象的一个元素: ", queue.get())

    # 查看队列对象
    print("查看队列对象: ", queue)

    # 遍历队列对象
    for enum, i in enumerate(queue):
        print("遍历第{}个元素: ".format(enum), i)

    # 输出结果
    # 查看队列对象:  ['a', 'b', 'c', 'd', 'e']
    # 获取队列对象的一个元素:  a
    # 查看队列对象:  ['b', 'c', 'd', 'e']
    # 遍历第0个元素:  b
    # 遍历第1个元素:  c
    # 遍历第2个元素:  d
    # 遍历第3个元素:  e
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载请注明出处:http://www.jianshu.com/p/462b42344098 上一篇《数据结构与算法...
    Alent阅读 2,201评论 3 15
  • 数据结构与算法--队列 队列如其名,就是一列元素。举个我们熟知的场景,火车站窗口购票,排队买票的人们就组成一个队列...
    sunhaiyu阅读 680评论 0 0
  • 栈和队列的特性 .栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(la...
    锄禾日当阅读 4,872评论 0 0
  • 自我介绍: 来自于崇山峻岭的秦岭,更是来自于了人口众多的农村家庭,起了一个大千世界最为广泛的名字,从小就学习不好,...
    lifewater阅读 239评论 0 0
  • 我把你写进 所有 与你无关的 故事里。 编成 与你有关的 回忆。 于是, 我就活在了 所有 有关你的 回忆里, 那...
    斑马2017阅读 202评论 0 0