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

在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. 免费VPN 实测可用

    vpngate.net 的镜像站点列表 (更新于 2014-05-18 03:06:00 UTC): http://121.135.220.121:26633/cn/ (Mirror location ...

  2. Android遇到的错误,运行时崩溃

    修改主题背景时在<Activity>中增加android:theme="@android:style/Theme.Black.NoTitleBar"时运行 出现崩溃的现 ...

  3. C++之路进阶——codevs2366(朋友圈)

    2366 朋友圈 2012年省队选拔赛河北  时间限制: 10 s  空间限制: 256000 KB  题目等级 : 大师 Master     题目描述 Description 在很久很久以前,曾经 ...

  4. BackgroundWorker的使用方法

    http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker(VS.80).aspx Backgroun ...

  5. paper 75:使用MATLAB的神经网络工具箱创建神经网络

    % 生成训练样本集 clear all; clc; P=[110 0.807 240 0.2 15 1 18 2 1.5; 110 2.865 240 0.1 15 2 12 1 2; 110 2.5 ...

  6. DataTable 筛选数据

    //使用聚合函数 max ,sum  ,count .... private void ComputeBySalesSalesID(DataSet dataSet) {     // Presumes ...

  7. 《zw版·Halcon-delphi系列原创教程》 邮票艺术品自动分类脚本

    <zw版·Halcon-delphi系列原创教程> 邮票艺术品自动分类脚本 邮票艺术品自动分类脚本,是个综合应用,有不同尺寸图像的自动识别.区域分割 还有作品附近文字的自动分割 此类项目, ...

  8. Openstack的的nova list命令

    nova list用于在shell交互模式下查看当前用户存在的实例数目,但是这里仍然要注意的地方: 没有参数的nova list [root@node-5 newstest-master]# nova ...

  9. android 学习随笔十九(对话框、样式、主题、国际化 )

    1.对话框 package com.itheima.dialog; import android.os.Bundle; import android.app.Activity; import andr ...

  10. Creater中选择一行的方法

    1.  在表布局中增加一单选钮列,给单选钮的属性name任意设定一个值.2.  选择单选钮对应列,将其selectID设为单选钮的ID;将onclick设为setTimeout('initAllRow ...