继续读啊哈磊《啊哈!算法》感悟系列——队列

地铁售票处排队,先来的人先到队首先买完先走,后来的人排在队尾等候后买完后走。

想买票,必须排在队尾;买完票,只能从队首离开。

这种先进先出(First In First Out,FIFO),后进后出的线性队伍,就是我们说的——队列。

在现实中,队列里包含的是人,在计算机的队列里,包含的就是数据啦~所以,队列是一种——数据结构。

队列中的三要素为:队伍,队首,队尾。

如果用我们比较熟悉的数组来表示队列的话,队伍就是数组本身,队首和队尾就是数组中相应索引位的数值元素。

这里用《潜伏》中的一个情节来举一个应用队列的例子:

军统局给余则成一段数字,并告诉他只要按照指定的规则就可以将这段数字还原为情报密码。

有一天,余则成从电台接到了这段数字:196811234567

情报转译规则如下:将第一个数字移到最后,抠去第二个数字,将第三个数字移到最后,扣去第四个数字……按照这个规则下去,直到这段数字最后只剩下一个数字为止,将之前扣去的数字和最后剩下的数字按顺序连接起来,就是情报密码。

拿1931这四个数字举例,“[ ]”中代表扣去的数字:

第一次:[9]311

第二次:[1]13

第三次:[3]1

第四次:[1]

将“[ ]”中的数字按照你看到的从上到下的顺序连接起来,就是情报密码:9131。

这个规则就好比是排队买票(把情报中的数字看成是人):

第一个人不买票,回到队尾,让第二个人先买;第三个人不买票,回到队尾,让第四个人先买……不用担心,最后所有人都会买到票……

当然!现实生活中没有这么谦让的。我只是想要举个例子来说明——这个情报转译的规则其实就是在对一个队列进行着操作!

现在我们来把这个拆解情报的过程通过一段程序来搞定:

$qingBao = Read-Host "Please enter the information"
$infoArray = New-Object System.Collections.ArrayList
$infoArray.Add(0)
for($i=0;$i -le $qingBao.length-1;$i++)
{$infoArray.Add($qingBao[$i])
}
function Translate($infoArray)
{$head = 1$tail = $infoArray.count$transArray = New-Object System.Collections.ArrayListwhile($head -le $tail){$infoArray.Add($infoArray[$head])$head++$transArray.Add($infoArray[$head])$tail++$head++}PrintTranslation $transArray
}
function PrintTranslation($transArray)
{Write-Host "The translation is: " -ForegroundColor blueWrite-Host $transArray -ForegroundColor green
}
Translate $infoArray

怎么样,PowerShell中对动态数组的Add操作是不是非常方便呢?

在PowerShell ISE中运行该段代码,并用1931这四个数字做一下测试,结果如下:

OK,我们的程序通过了测试。

现在对“196811234567”这串数字进行转译,结果如下:

计算机的运行速度是很快的。如果余则成活在今天会用计算机的话就再也不用人工的对密码进行转译了。

不得不说潜伏在当今这个时代已经逐渐变成了黑客的世界,余则成不光要会侦查和反侦察,还要学习必要的算法与数据结构才行。

队列——PowerShell版相关推荐

  1. 什么是消息队列 RocketMQ 版?

    消息队列 RocketMQ 版是阿里云基于 Apache RocketMQ 构建的低延迟.高并发.高可用.高可靠的分布式消息中间件.消息队列 RocketMQ 版既可为分布式应用系统提供异步解耦和削峰 ...

  2. 小程序paho.mqtt连接微消息队列 MQTT 版

    物联网项目现在越来越多,MQTT的使用场景也越来越广泛,同时遇到的技术问题也是越来越复杂. 最近在做一个小程序连接阿里云的微消息队列MQTT版,说实话,通过这次debug,发现阿里的技术文档很多方面不 ...

  3. rocketmq python 某个队列不消费_消息队列 RocketMQ 版消息轨迹没有显示消费信息,为什么?...

    关于 消息队列 RocketMQ 版消息轨迹没有显示消费信息,为什么?的搜索结果 回答 2021一月拼团已有400余人拼团成功最低一折 点击进入:一月新人专场 服务器配置时间价格1核2G1年84元1核 ...

  4. java循环队列_Java版-数据结构-队列(循环队列)

    前情回顾 在上一篇,笔者给大家介绍了数组队列,并且在文末提出了数组队列实现上的劣势,以及带来的性能问题(因为数组队列,在出队的时候,我们往往要将数组中的元素往前挪动一个位置,这个动作的时间复杂度O(n ...

  5. 链表——PowerShell版

    链表是由一系列节点串连起来组成的,每一个节点包括数值部分和指针部分,上一节点的指针部分指向下一节点的数值部分所在的位置. 在C语言中我们有两种方式来定义链表-- 1.定义结构体:来表示链表中的节点,节 ...

  6. 两个栈实现队列——优化版

    这个是一个很常见的算法,在剑指offer中有详细的讲解,在这里提供一种优化的实现.该实现的优点是不需要每次在数据出列时,将数据copy到另一个堆栈中.并写了其对应的单元测试. 主要思想 主要实现是在类 ...

  7. 说说消息队列RocketMQ版ConsumeTimeout的含义是什么

    ConsumeTimeout 最长的消费时间,如果超过了这个时间就认为消息消费失败了:主要目的 是为了能尽早的将 offset 确认,避免消息重复,例如对于并发消息有 100 条 0~99 , 第 0 ...

  8. 计算发送延时与传播延迟_消息队列——延时消息应用解析及实践

    简介:在大部分场景下业务系统如果只需要实现异步解耦.削峰填谷等能力,常规的普通消息就可以满足此类需求.除此之外,在某些特殊的业务场景中,普通消息类型存在无法满足需求的情况.这就需要消息队列服务本身支持 ...

  9. 阿里云消息队列 RocketMQ、Kafka 荣获金融级产品稳定性测评 “先进级” 认证

    近日,由中国信通院和混沌工程实验室联合举办的混沌工程技术沙龙–金融行业精品专场顺利召开,并发布金融级产品稳定性测评成果.在分布式系统稳定性评估体系获奖名单中,阿里云分布式消息队列服务成为通过首批消息队 ...

最新文章

  1. 【swjtu】数字电路实验3_1位十进制计数器
  2. AIX中查找端口号和进程
  3. Android中提示:Service Intent must be explicit:Intent
  4. 和中医学习到的养生方法和知识
  5. leetcode 519. Random Flip Matrix | 519. 随机翻转矩阵(洗牌算法Fisher–Yates shuffle)
  6. Linux安装MySQL的完整步骤并有关MySQL8.0版本的问题方法
  7. 计算机网络走向系统化 科学化,第六章计算机网络与INTERNET 应用习题
  8. Java @Override注解
  9. leetcode - 1049. 最后一块石头的重量 II
  10. 【★★★★★】提高PHP代码质量的36个技巧
  11. 仿土豆网显示隐藏遮罩案例(HTML、CSS)
  12. [工具] f.lux – 随时间改变屏幕色温护眼
  13. word2016版本解决脚注分栏情况
  14. hash算法和常见的hash函数
  15. 魔霸新锐2021版不接显示器开启独显的方式
  16. 学习opencv:PS滤镜—曝光过度
  17. 前端使用xlsx、file-saver实现自定义excel格式导出(列宽、字体、边框、行高)
  18. 散列 pat1134
  19. 洛谷 P1490 买蛋糕
  20. Go语言下载安装教程|Goland配置教程|2021|Windows

热门文章

  1. 虚方法的调用是怎么实现的(单继承VS多继承)
  2. 领域驱动设计_软件核心复杂性应对之道
  3. 揭露Windows中各种不老实的服务
  4. Java 重写(Override)与重载(Overload)
  5. [20181204]低版本toad 9.6直连与ora-12505.txt
  6. 杨元庆:兔子要变成狼靠的是体制的激励
  7. 【安全加密技术】 对称加密
  8. jQuery学习笔记一
  9. freecodecamp_常见技术支持问题– freeCodeCamp常见问题解答
  10. esp freertos_如何开始使用FreeRTOS和ESP8266