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

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

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

这种先进先出(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. Centos6.5搭建dhcpd服务

    dhcpd动态获取ip地址,对于小型局域网很便利的.在不大的网络社会静态ip也是不错的! 环境 centos6.5  10.10.24.1 (dns-server)   winxp sp3 (clie ...

  2. 【mysql】Innodb三大特性之adaptive hash index

    1.Adaptive Hash Indexes 定义 If a table fits almost entirely in main memory, the fastest way to perfor ...

  3. [转载]linux创建用户命令

    原文地址:linux创建用户命令作者:疯狂的核桃 创建用户.设置密码.修改用户.删除用户: useradd testuser   创建用户testuser passwd testuser   给已创建 ...

  4. 禁用root登录以及使用sudo分配权限

    前言 最近一段时间服务器有受到一些挖比特币的人的攻击,这里就简要说明一下提升服务器安全度的做法 禁用root登录 root权限可以说是linux服务器的最高权限,如果我们平常都是直接使用root用户来 ...

  5. no !/ in spec

    问题: 在学习hibernate的过程中涉及到hibernate.cfg.xml和hibernate.hbm.xml配置文件的编写,写完之后配置文件出现黄色感叹号,鼠标悬停在感叹号上时显示no !/ ...

  6. SVN解决创建文件时不带锁

    解决创建文件时不带锁   C:\Documents and Settings\你的用户名\Application Data\Subversion   找到上面的用户路径 打开config添加 ### ...

  7. Oracle游标解析

    本节对Oracle中的游标进行详细讲解. 本节所举实例来源Oracle中scott用户下的emp表dept表: 一.游标: 1.概念: 游标的本质是一个结果集resultset,主要用来临时存储从数据 ...

  8. Android 手机震动功能实现

    1首先在AndroidManifest.xml中添加震动权限 <uses-permission android:name="android.permission.VIBRATE&quo ...

  9. FA_手工明细增加固定资产(流程)

    2014-06-08 Created By BaoXinjian

  10. PO_职位职务审批模式详解(设定)

    2014-06-03 Created By BaoXinjian