双向队列 (deque)

任务描述

本关任务:编写一个能输出“震荡”队列的程序。

双向队列 (deque)

双向队列是一种能在队列两端都进行入队、出队操作的数据结构,比普通的队列更加灵活也更加复杂。

创建双向队列

就像计数器Counter,双向队列可以调用无参构造函数创建一个空队列,也可以使用可迭代对象创建,并初始化一个队列,比如:

d = collections.deque() #创建一个空队列
d = collections.deque(['a','b','c']) #从list创建
d = collections.deque(('a','b','c')) #从tuple创建
d = collections.deque({'a':0,'b':1,'c':2}) #从dict创建
d = collections.deque("abc") #从字符串创建

第一行语句创建一个空队列,下面四行语句创建了含有元素abc的队列,要注意当从dict创建时,使用的是它的键key,而不是值value

队列操作

双向队列与list类似,也有appendpop这两个成员函数,他们的作用分别是向队列的右边增加元素和从队列的右边删除并返回一个元素,比如:


d.append('d') #向右边增加一个元素'd'
print(d)
d.pop() #从右边删除一个元素
print(d)

得到的结果: deque(['a', 'b', 'c', 'd']) deque(['a', 'b', 'c'])

appendpop相对应的,还有一组对队列左边进行操作的函数:appendleftpopleft,用法也与前面的一组类似:

d.appendleft('+') #向左边增加一个元素'+'
print(d)
d.popleft() #从左边删除一个元素
print(d)

得到的结果: deque(['+', 'a', 'b', 'c']) deque(['a', 'b', 'c'])

双向队列还提供了一对操作:extendextendleft,用于将一个可迭代对象的所有迭代值,依次加入到队列的右边或者左边:

d1 = collections.deque()
d1.extend("123")
print(d1)

d1 = collections.deque()
d1.extendleft("123")
print(d1)

得到的结果是: deque(['1', '2', '3']) deque(['3', '2', '1']) 可以注意到,上下两个结果的值的顺序是相反的

编程要求

根据提示,补充右侧编辑器Begin-End区间代码,完成函数功能,函数读取输入的一个数字n(n≥0),然后输出一个有n个元素,元素从0n-1“震荡”的队列,“震荡”的定义见测试说明。

测试说明

当输入:3时,输出的“震荡”队列应该是: deque([1, 0, 2])

当输入:5时,输出的“震荡”队列应该是: deque([3, 1, 0, 2, 4])

怎么样,看出其中的规律了吗?


开始你的任务吧,祝你成功!

代码如下:

import collections
def Func():
    d = collections.deque()
    n = int(input())
    # ********** Begin ********** #
    for i in range(n):
        if i%2==0:
            d.append(i)
        else:
            d.appendleft(i)



    # ********** End ********** #
    print(d)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值