链表是由一系列节点串连起来组成的,每一个节点包括数值部分和指针部分,上一节点的指针部分指向下一节点的数值部分所在的位置。

在C语言中我们有两种方式来定义链表——

1、定义结构体:来表示链表中的节点,节点中包含数值部分和指针部分。将一个节点的指针部分指向另一个节点的数值部分,这两个结构体之间就形成了一个链表。

2、不定义结构体:用一个数组来表示链表的数值部分,用另外一个数组来表示每个数值所对应的指针部分。

在PowerShell中定义一个链表更加简洁:

$linkedList = New-Object System.Collections.Generic.LinkedList[HashTable]

其中HashTable相当于我们在C语言中定义的结构体中的数值部分,而对于链表中数值进行的操作都被封装成了一系列链表对象的方法。

现在我们举一个现实生活中的例子——

考试结束,老师排好了一个成绩单(按成绩从高到低),现在来了个插班生,我们要把这个插班生的考试成绩插入到本班的成绩单中。

首先我们写一个方法,将排好的成绩单录入到一个链表中:

#Initial the students' scores.
function Initial($linkedList){
$count = Read-Host "Type in the students' number"
For($i=1; $i -le [int]$count; $i++){
$tip = "This is the NO."+$i+" student"
Write-Host $tip -ForegroundColor green
$name = Read-Host "Type in the name"
$score = Read-Host "Typen in the score"
$linkedList.AddLast(@{Name=$name;Score=[int]$score})
}
}

然后我们写一个方法,将插班生的成绩插入到已排好序的成绩单链表中:

#Add student into the list by score.
function InsertStudent($linkedList)
{
$score = Read-Host "Type in the score of the student"
$score = [int]$score
$currentNode = $linkedList.First
$flag = $true
while(($currentNode -ne $null) -and ($flag -eq $true))
{
if($currentNode.Value.Score -ge $score)
{
$currentNode = $currentNode.Next
}else
{
$name = Read-Host "Type in the name of the student"
$linkedList.AddBefore($currentNode, @{Name=$name;Score=$score})
$flag = $false
}
}
}

最后我们来运行这两个方法,对成绩单链表进行初始化和插入操作,并显示插入数据后的链表:

Write-Host "---Now begin initial---" -ForegroundColor green
Initial $linkedList
Write-Host "---Now begin insert---" -ForegroundColor green
InsertStudent $linkedList
Write-Host "---Result---" -ForegroundColor green
$linkedList

运行结果如下:

我们可以看到,我们不用再去像在C语言中一样对指针的指向进行操作,取而代之的是一系列已经封装好了的属于链表对象本身的方法和属性。比如:

链表对象的第一个节点——

$linkedList.First

某一结点的下一节点——

$node.Next

在链表的某一节点前插入一个节点——

$linkedList.AddBefore($currentNode, @{Name=$name;Score=$score})

我们可以看到,我们只需要关注节点插入的位置(目标节点)和节点对象本身的数值部分,剩下的对指针部分的操作已经封装到方法里了。我们只需要选择指定的方法就可以完成对目标节点前后的插入等操作。PowerShell和C#都是基于.NET的,所以在方法和属性上基本都是相同的,在这里附上一篇官方的关于链表的指南

链表——PowerShell版的更多相关文章

  1. C语言实现单链表-03版

    在C语言实现单链表-02版中我们只是简单的更新一下链表的组织方式: 它没有更多的更新功能,因此我们这个版本将要完成如下功能: Problem 1,搜索相关节点: 2,前插节点: 3,后追加节点: 4, ...

  2. C语言实现单链表-02版

    我们在C语言实现单链表-01版中实现的链表非常简单: 但是它对于理解单链表是非常有帮助的,至少我就是这样认为的: 简单的不能再简单的东西没那么实用,所以我们接下来要大规模的修改啦: Problem 1 ...

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

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

  4. C语言实现单链表-04版

    前面的版本似乎没能让项目经理满意,他还希望这个链表有更多的功能: 我们接下来要解决几个比较简单的功能: Problem 1,更加友好的显示数据: 2,能够通过名字删除节点: Solution 首先我们 ...

  5. Python3玩转单链表——逆转单向链表pythonic版

    [本文出自天外归云的博客园] 链表是由节点构成的,一个指针代表一个方向,如果一个构成链表的节点都只包含一个指针,那么这个链表就是单向链表. 单向链表中的节点不光有代表方向的指针变量,也有值变量.所以我 ...

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

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

  7. C语言实现单链表-01版

    单链表的应用非常广,它可以实现栈,队列等: Problem 我对学习任何东西都希望能找到尽可能简单的例子,而不是看起来好高大上的: 对链表这样简答的数据结构,有些书也是写得太过“完美”啦: 初学者很难 ...

  8. 栈——PowerShell版

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

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

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

随机推荐

  1. zabbix监控企业esxi虚拟机

    zabbix监控企业esxi虚拟机 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我来公司有一段时间了,最近也发现模型部有测试和开发反应某台机器登陆不上去了,结果登陆esxi服务器 ...

  2. 搭建企业cacti服务器

    搭建企业cacti服务器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 今天搭建了cacti,为了方便监控我的交换机~因为查了很多zabbix的资料关于监控交换机的教程~我都屡屡失 ...

  3. 转:python webdriver API 之alert/confirm/prompt 处理

    webdriver 中处理 JavaScript 所生成的 alert.confirm 以及 prompt 是很简单的.具体思路是使用switch_to.alert()方法定位到 alert/conf ...

  4. 20145207 《Java程序设计》第8周学习总结

    前言: 这两天电路焊小车,有意思归有意思,确实挺忙的.博客到现在才写.执勤看的东西忘得好快呀,莫名的记不住.不说废话了,开始. 教材学习内容总结: 一.NIO和NIO2 1.NIO的定义 InputS ...

  5. poj 算法 分类

    转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 最近AC题:2528   更新时间:2011.09.22  ...

  6. linux第5天 socket api

    IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件<netinet/in.h>中 通用地址结构用来指定与套接字关联的地址.以socka ...

  7. clock

    Prime Time中的clock分析包括: 1)Multiple clocks,clock from port/pin,virtual clock. 2)Clock network delay an ...

  8. JSP-02- 使用JSP实现输出

    二. 使用JSP实现输出 JSP的页面构成: 静态内容.指令.表达式.Scriptlet.声明.动作.注释 Jsp脚本: 表达式.Scriptlet.声明 表达式: <%=  内容  %> ...

  9. 由linux下的多进程编程引发的关于进程间隔离的思考

    源代码放到了三个文件中: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include & ...

  10. jboss-as 目录结构(转)

    jboss-as 目录结构(Directory Structure) Directory Description bin Contains startup, shutdown and other sy ...