'''
队列:先进先出

Queue() 创建一个空的队列
enqueue(item) 往队列中添加一个item元素
dequeue() 从队列头部删除一个元素
is_empty() 判断一个队列是否为空
size() 返回队列的大小
'''
import queue
from queue import deque
import collections
cdq = collections.deque()

class Queue(object):
    """队列"""

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

    def enqueue(self, item):
        """往队列中添加一个item元素"""
        self.__list.append(item)

    def dequeue(self):
        """从队列头部删除一个元素"""
        return self.__list.pop(0)

    def is_empty(self):
        """判断一个队列是否为空"""
        return self.__list == []

    def size(self):
        """返回队列的大小"""
        return len(self.__list)


if __name__ == "__main__":
    s = Queue()
    s.enqueue(1)
    s.enqueue(2)
    s.enqueue(3)
    s.enqueue(4)
    print(s.dequeue())
    print(s.dequeue())
    print(s.dequeue())
    print(s.dequeue())

    '''
    queue模块中的常用方法
    queue.qsize() 返回队列的大小
    queue.empty() 如果队列为空,返回True,反之False
    queue.full() 如果队列满了,返回True,反之False
    queue.full 与 maxsize 大小对应
    queue.get([block[, timeout]])获取队列,立即取出一个元素, timeout超时时间
    queue.put(item[, timeout]]) 写入队列,立即放入一个元素, timeout超时时间
    queue.join() 阻塞调用线程,直到队列中的所有任务被处理掉, 实际上意味着等到队列为空,再执行别的操作
    '''
    # 创建队列

    q = queue.Queue()

    # empty方法(如果队列为空,返回True)

    q = queue.Queue()
    print(q.empty())
    # 输出:True

    # full方法(如果队列满了,返回True)

    q = queue.Queue(1)  # 指定队列大小
    q.put('a')
    print(q.full())
    # 输出:True

    # put方法和get方法

    q = queue.Queue()
    q.put('a')
    q.put('b')
    print(q.get())
    # 输出:a
    # qsize方法(返回队列里元素个数)

    q = queue.Queue()
    q.put('a')
    q.put('b')
    print(q.qsize())
    # 输出:2


    '''
    双向队列 deque
    '''
    # 往右边添加一个元素
    dq = deque()
    dq.append('a')
    # 往左边添加一个元素
    dq.appendleft('b')
    # pop(获取最右边一个元素,并在队列中删除)
    x = dq.pop()
    print(x, dq)
    # popleft(获取最左边一个元素,并在队列中删除)
    # remove(删除指定元素)
    dq.remove('a')
    # clear(清空队列)
    # count(返回指定元素的出现次数)
    # extend(从队列右边扩展一个列表的元素)
    dq.append(1)
    dq.extend([3, 4, 5])
    print(dq)
    # extendleft(从队列左边扩展一个列表的元素)
    # index(查找某个元素的索引位置)
    print(dq.index(1))
    print(dq.index(2, 0, 3))  # 指定查找区间
    # reverse(队列反转)
    dq.extend(['a', 'b', 'c', 'd', 'e'])
    dq.reverse()
    print(dq)

results matching ""

    No results matching ""