队列

作者: Amica | 来源:发表于2018-07-30 15:07 被阅读3次

队列是一种特殊的线性结构,它只允许在队列的首部(head)进行删除操作,我们称其为“出队”,而在队列的尾部(tail)进行插入操作,我们称之为“入队”。当队列中没有元素时(head==tail),我们称之为空队列。

生活中常见的符合队列特性的例子:

  • 排队买火车票
  • 打印机打印文件
  • 商店排队买东西的顾客
解密QQ号.png

我们尝试着用python的列表来解决上面的解密QQ号的问题。这里我通过将加密后的一串数存储到列表中,并设置两个指针,head和tail,示意图如下所示:


列表指针示意图.png

通过题目中描述的规则编写代码如下所示:

#coding=utf-8
"""
Created on Mon Jul 30 11:31:24 2018

@author: Amica
"""
def Decoder(nums):
    head=0
    tail=len(nums)
    #设置一个新的列表用于存储移除的队首元素
    new_nums=[]
    while(head<tail-1):
        new_nums.append(nums[head])
        print("队首元素:",nums[head])
        print(new_nums)
        #将指针向前移动即删除队首的元素
        head+=1
        
        #将指针指向的元素添加到列表的尾部
        nums.append(nums[head])
        #将队尾的指针向后移动一位
        tail+=1
        #将队首的指针向后移动
        head+=1
    print("队首元素:",nums[head])
    new_nums.append(nums[head])
    return new_nums
if __name__=="__main__":
    nums=[6,3,1,7,5,8,9,2,4]
    print(Decoder(nums))
运行结果.png

其实在Python中,我们可以使用collections模块下的deque函数,它提供了队列所有的接口,collections.deque是双端队列,也就是说在队列的左右两边都是既可以进又可以出的。


双端队列的方法及其描述.png

下面我们通过collections提供的deque进行QQ号的解密:

# -*- coding: utf-8 -*-
"""
Created on Mon Jul 30 14:33:42 2018

@author: Amica
"""
from collections import deque
new_nums=[]
def Decoder(nums):
    #创建一个队列
    q=deque(nums)
    print(q)
    i=0
    while len(q)>1:
        #删除最左侧的元素并将删除的元素添加到列表new_nums中
        i+=1
        new_nums.append(q.popleft())
        print("经过第{}轮删除新列表中存在的元素{}".format(i,new_nums))
        #删除最左侧的元素并将删除的元素添加到队列的最右侧
        q.append(q.popleft())
    i+=1   
    new_nums.append(q.popleft())
    print("经过第{}轮删除新列表中存在的元素{}".format(i,new_nums))
    return new_nums
nums=[6,3,1,7,5,8,9,2,4]
print("小哈的QQ号为:",Decoder(nums))
运行结果.png

相关文章

  • 队列

    队列特性 对比队列和栈 基于数组的队列 对比队列学习循环队列 循环队列难点 阻塞队列 并发队列 应用:线程池中拒绝...

  • 队列

    文章结构 什么是队列 实现队列顺序队列链式队列循环队列 Java中的队列 1. 什么是队列 队列也是一种操作受限的...

  • iOS底层-- GCD源码分析(1)-- dispatch_qu

    手动目录认识队列队列的结构队列的产生主队列全局队列创建的队列管理队列 代码版本dispatch version :...

  • 队列,异步,同步,线程通俗理解

    一、队列 串行队列 并行队列 主队列(只在主线程执行的串行队列) 全局队列(系统的并行队列) 二、 任务(是否具有...

  • GCD基础总结一

    上代码~ 同步串行队列 同步并行队列 异步串行队列 异步并行队列 主队列同步 会卡住 主队列异步

  • OC多线程

    队列创建 线程与队列 队列线程间通信 队列组

  • GCD

    获得主队列 获得全局队列 串行队列 异步队列 同步队列 阻隔队列 (像栅栏一样 ) 例如 A -->栅栏 --...

  • 数据结构第三篇 队列

    队列的特性 前进先出。 我们来大致描述下进出队列的情况。 进队列 1 进队列现在队列是 12 进队列现在队列是 1...

  • 利用链表实现队列

    队列成员变量: 队列长度 队列头节点 队列尾节点队列方法: 队列包含元素个数 队列是否为空 进队操作 出队操作 d...

  • Git 常用操作命令(持续更新)

    当前更新到stash队列 查看stash队列 清空队列 删除某个队列

网友评论

      本文标题:队列

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