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

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

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

这种先进先出(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.ArrayList
while($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 blue
Write-Host $transArray -ForegroundColor green
}
Translate $infoArray

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

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

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

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

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

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

队列——PowerShell版的更多相关文章

  1. Ladon内网渗透扫描器PowerShell版

    程序简介 Ladon一款用于大型网络渗透的多线程插件化综合扫描神器,含端口扫描.服务识别.网络资产.密码爆破.高危漏洞检测以及一键GetShell,支持批量A段/B段/C段以及跨网段扫描,支持URL. ...

  2. 栈——PowerShell版

    上一篇讲过队列(queue),队列就像是居民楼里的垃圾管道,从楼道的垃圾管道的入口处将垃圾扔进去,清洁工会从一楼垃圾管道的出口处将垃圾拿走.每一层的垃圾通道入口与一楼的垃圾管道出口之间都形成了一个队列 ...

  3. [工具]法国神器mimikatz 2.1.1 一键版 & PowerShell版

    无需任何参数,运行EXE即可自动读取Windows系统密码 EXE版需要其它功能请使用原版 (参数已写死仅读密码) 结果保存于当前目录mz.log EXE https://github.com/k8g ...

  4. 链表——PowerShell版

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

  5. 批量备份数据库脚本(PowerShell版)

    开始 昨天备份一个数据库拿来测试,发现备份后的文件非常大.后来去检查下使用的备份脚本,原来之前的备份脚本没有压缩功能. 现把之前的备份脚本修改下,支持压缩备份,和支持仅复制备份(CopyOnly). ...

  6. 快速排序——PowerShell版

    继续读啊哈磊算法有感系列,继续升华.上一篇是冒泡排序,在结尾总结了一下冒泡排序的缺点——时间复杂度O(N*N)太大.这一篇来说一下快速排序,快速排序可以在多数情况下克服冒泡排序的缺点(最坏的情况下和冒 ...

  7. 冒泡排序——PowerShell版

    继续读啊哈磊算法有感系列.上一篇是桶排序,在结尾总结了一下简化版桶排序的缺点.这一篇来说一下冒泡排序,冒泡排序可以很好的克服桶排序的缺点.下面我们先来说说冒泡排序的过程与思想—— 冒泡排序的过程: 第 ...

  8. 桶排序——PowerShell版

    读啊哈磊的算法书有感,十一期间想要重新学一学一些基本的算法和数据结构.不想下载编程工具了,毕竟是用室友的电脑,就用PowerShell写一下吧: $scores = @(88,13,99,26,62, ...

  9. 数据结构之队列C++版

    #include "stdafx.h"/* 队列是一种先进先出的线性表队列的核心是对头部和尾部索引的操作 如上图所示,当对头索引移动到最前面6,队尾又不不再末尾0的位置,那么如果不 ...

随机推荐

  1. Springboot UT 引入某些类

    http://www.infoq.com/cn/articles/Unit-Testing-Complete-Integration-Testing-Begins https://segmentfau ...

  2. Q2:Reverse Words in a String

    Clarification: What constitutes a word? A sequence of non-space characters constitutes a word. Could ...

  3. highstock K线图 深入研究

    K线图,相信每个股民都不陌生,如何用SVG画好一个K线图是一个难题. 我选择用highstock做为画图组件,适当的修改了一下源码,参考了数个财经网站的案例,完成了一个不太成熟的K线图,欢迎大家批评指 ...

  4. Laravel中的信息验证 和 语言包

    首先,谈下语言包的问题 1.安装语言包,通过composer进行安装 composer require "overtrue/laravel-lang:dev-master" 2.成 ...

  5. 【laravel5.4 + TP5.0】hasOne和belongsTo的区别

    1.从字面理解:假如A比B大,那么A hasOne B: B belongsTo A: 2.个人总结: 3.从代码角度: 主要是看你是在哪一个model(模型)中编写这个关联关系,父关联对象就是在父关 ...

  6. PHP中的一些安全配置

    PHP中的配置至关重要,包含php.ini的配置,还有系统权限的配置,一下是我总结的一些配置 一.PHP的模块 ./configure \ --with-libdir=lib64 \ --prefix ...

  7. 安装 nvm 遇到的坑

    本篇文章由:http://xinpure.com/encountered-nvm-installation-pits/ 说两句 以前开发都是用最新的 Node 版本,不过难免会有旧项目需要使用低版本做 ...

  8. C++知识整理(在此感谢大牛的整理)

    这篇文章主要讲解如何在C++中使用cin/cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等.通过本文,您可以完全脱离scanf/printf,仅使用cin/c ...

  9. DPDK架构与特点

    当年在某公司实习的时候,当时老大给了我一份DPDK的文档,说是将来很有用,熟悉DPDK对能力提高也有帮助,就试着翻译了 <Intel DPDK Getting Started Guide> ...

  10. centos(7) 使用yum进行安装lamp环境

    1.用yum安装Apache,Mysql,PHP. 1.1安装Apache yum install httpd httpd-devel 安装完成后,用service httpd start 1.2 安 ...