deque双端队列

                                     deque双端队列

1、extend():

    一次性从右端添加多个元素。

# 实现队列,使用deque
from collections import deque


class Queue():
    def __init__(self, value):
        self.items = deque(value)

    def extend(self, value):
        """extend():一次性从右端添加多个元素"""
        return self.items.extend(value)


if __name__ == "__main__":
    q = Queue([1, 2, 3])
    print("原始queue:",q.items)

    # 一次性从右端添加多个元素
    q.extend([4, 5, 6])
    print("extend()一次性从右端添加多个元素:", q.items)

    # 运行结果:
    # 原始queue: deque([1, 2, 3])
    # extend()一次性从右端添加多个元素: deque([1, 2, 3, 4, 5, 6])

2、append():

    从右端添加一个元素。

class Queue():
    def __init__(self, value):
        self.items = deque(value)

    def append(self, value):
        """append():从右端添加一个元素"""
        return self.items.append(value)


if __name__ == "__main__":
    q = Queue([1, 2, 3])
    print("原始queue:",q.items)

    # 从右端添加一个元素
    q.append(7)
    print("append()从右端添加一个元素:", q.items)

    # 运行结果:
    # 原始queue: deque([1, 2, 3])
    # append()从右端添加一个元素: deque([1, 2, 3, 7])

3、extendleft():

    从左端添加多个元素,注意是逆序输入。

# 实现队列,使用deque
from collections import deque


class Queue():
    def __init__(self, value):
        self.items = deque(value)

    def extendLeft(self, value):
        """extendleft():从左端添加多个元素,注意是逆序输入"""
        return self.items.extendleft(value)


if __name__ == "__main__":
    q = Queue([1, 2, 3])
    print("原始queue:",q.items)

    # 从左端添加多个元素,注意是逆序输入
    q.extendLeft([8, 9, 10])
    print("extendleft()从左端添加多个元素,注意是逆序输入:", q.items)
    
    # 运行结果:
    # 原始queue: deque([1, 2, 3])
    # extendleft()从左端添加多个元素,注意是逆序输入: deque([10, 9, 8, 1, 2, 3])

4、appendleft():

    从左端添加一个元素。

# 实现队列,使用deque
from collections import deque


class Queue():
    def __init__(self, value):
        self.items = deque(value)

    def appendLeft(self, value):
        """appendleft():从左端添加一个元素"""
        return self.items.appendleft(value)


if __name__ == "__main__":
    q = Queue([1, 2, 3])
    print("原始queue:",q.items)

    # 从左端添加一个元素
    q.appendLeft([11, 12])
    print("appendleft()从左端添加一个元素:", q.items)
    
    # 运行结果:
    # 原始queue: deque([1, 2, 3])
    # appendleft()从左端添加一个元素: deque([[11, 12], 1, 2, 3])

5、pop():

    从右端移除元素。

    注意:deque是线程安全的,所以可以在不同的线程中同时从两端移除元素。

# 实现队列,使用deque
from collections import deque


class Queue():
    def __init__(self, value):
        self.items = deque(value)

    def pop(self):
        """
        pop():从右端移除元素
        注意:deque是线程安全的,所以可以在不同的线程中同时从两端移除元素
        """
        return self.items.pop()


if __name__ == "__main__":
    q = Queue([1, 2, 3])
    print("原始queue:",q.items)

    # pop():从右端移除元素
    q.pop()
    print("pop()从右端移除元素:", q.items)

    # 运行结果:
    # 原始queue: deque([1, 2, 3])
    # pop()从右端移除元素: deque([1, 2])
    

6、popleft():

    从左端移除元素。

    注意:deque是线程安全的,所以可以在不同的线程中同时从两端移除元素。

# 实现队列,使用deque
from collections import deque


class Queue():
    def __init__(self, value):
        self.items = deque(value)

    def popLeft(self):
        """
        popleft():从左端移除元素
        注意:deque是线程安全的,所以可以在不同的线程中同时从两端移除元素
        """
        return self.items.popleft()


if __name__ == "__main__":
    q = Queue([1, 2, 3])
    print("原始queue:",q.items)

    # 从左端移除元素
    q.popLeft()
    print("popleft()从左端移除元素:", q.items)
   
    # 运行结果:
    # 原始queue: deque([1, 2, 3])
    # popleft()从左端移除元素: deque([2, 3])

7、rorate(param):

    旋转移动元素。

    当参数为正整数n,rorate()将向右移动n位,并将队列右端的n个元素移到左端;

    当参数为负数-n时,rorate()将向左移动n位,并将队列左端的n个元素移到右端。

# 实现队列,使用deque
from collections import deque


class Queue():
    def __init__(self, value):
        self.items = deque(value)


    def rotateRight(self, param):
        """
        rorate(param):旋转移动元素
        当参数为正整数n,rorate()将向右移动n位,并将队列右端的n个元素移到左端
        """
        return self.items.rotate(param)

    def rotateLeft(self, param):
        """
        rorate(param):旋转移动元素
        当参数为负数-n时,rorate()将向左移动n位,并将队列左端的n个元素移到右端
        """
        return self.items.rotate(param)


if __name__ == "__main__":
    q = Queue([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    print("原始queue:",q.items)

    # 旋转移动元素(右移)
    q.rotateRight(3)
    print("rorate(param)旋转移动元素(右移):", q.items)

    # 旋转移动元素(左移)
    q.rotateRight(-3)
    print("rorate(param)旋转移动元素(左移):", q.items)
    
    # 运行结果:
    # 原始queue: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    # rorate(param)旋转移动元素(右移): deque([8, 9, 10, 1, 2, 3, 4, 5, 6, 7])
    # rorate(param)旋转移动元素(左移): deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

8、count(param):

    统计队列中元素的个数。

# 实现队列,使用deque
from collections import deque


class Queue():
    def __init__(self, value):
        self.items = deque(value)


    def count(self, value):
        """
        count():统计队列中元素的个数
        """
        return self.items.count(value)


if __name__ == "__main__":
    q = Queue([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    print("原始queue:",q.items)

    # 统计队列中元素的个数
    count = q.count(6)
    print("count()统计队列中元素的个数:", count)
    
    # 运行结果:
    # 原始queue: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    # count()统计队列中元素的个数: 1

9、reverse():

    反转队列。

# 实现队列,使用deque
from collections import deque


class Queue():
    def __init__(self, value):
        self.items = deque(value)


    def reverse(self):
        """
        reverse():反转队列
        :return:
        """
        return self.items.reverse()


if __name__ == "__main__":
    q = Queue([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    print("原始queue:",q.items)

    # 反转队列
    q.reverse()
    print("reverse()反转队列:", q.items)
    
    # 运行结果:
    # 原始queue: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    # reverse()反转队列: deque([10, 9, 8, 7, 6, 5, 4, 3, 2, 1])

10、deque(maxlen=N):

    deque(maxlen=N)构造函数会新建一个固定大小的队列。

    当新的元素加入并且这个队列已满的时候,最老的元素会被自动移除掉。

# 实现队列,使用deque
from collections import deque


class Queue():
    def __init__(self, value):
        self.items = deque(value)

    def maxlen(self, value):
        """
        deque(maxlen=N)构造函数会新建一个固定大小的队列。
        当新的元素加入并且这个队列已满的时候,最老的元素会被自动移除掉。
        """
        return deque(self.items, maxlen=value)


if __name__ == "__main__":
    q = Queue([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    print("原始queue:",q.items)

    # 新建一个固定大小的队列
    new_queue = q.maxlen(5)
    print("新建一个固定大小的队列:", new_queue)
    new_queue.append(100)
    print("往固定大小的队列中添加新元素:", new_queue)

    # 运行结果:
    # 原始queue: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    # 新建一个固定大小的队列: deque([6, 7, 8, 9, 10], maxlen=5)
    # 往固定大小的队列中添加新元素: deque([7, 8, 9, 10, 100], maxlen=5)

11、判断一个队列是否是空队列:

# 实现队列,使用deque
from collections import deque


class Queue():
    def __init__(self, value):
        self.items = deque(value)


    def empty(self):
        """
        判断队列是否为空队列
        """
        return len(self.items) == 0


if __name__ == "__main__":
    q = Queue([])
    print("原始queue:", q.items)

    # 判断一个队列是否是空队列
    result = q.empty()
    print("是否为空队列:", result)

    # 运行结果:

    # 原始queue: deque([])
    # 是否为空队列: True

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值