美文网首页
数据结构 02 队列

数据结构 02 队列

作者: 极光火狐狸 | 来源:发表于2017-10-13 19:21 被阅读11次

队列

先进先出(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

相关文章

网友评论

      本文标题:数据结构 02 队列

      本文链接:https://www.haomeiwen.com/subject/wrhtuxtx.html