C#,《小白学程序》第十一课:双向链表(Linked-List)其二,链表的插入与删除的方法(函数)与代码
1 文本格式
/// <summary>
/// 改进的车站信息类 class
/// 增加了 链表 需要的两个属性 Last Next
/// </summary>
public class StationAdvanced
{
/// <summary>
/// 编号
/// </summary>
public int Id { get; set; } = 0;
/// <summary>
/// 车站名
/// </summary>
public string Name { get; set; } = string.Empty;
public StationAdvanced Last { get; set; } = null;
public StationAdvanced Next { get; set; } = null;
public StationAdvanced(int id, string name)
{
this.Id = id;
this.Name = name;
}
}
// 列表的初值
List<StationAdvanced> stations_advanced = new List<StationAdvanced>() {
new StationAdvanced(1,"北京"),
new StationAdvanced(2,"石家庄"),
new StationAdvanced(3,"香河"),
new StationAdvanced(4,"唐山"),
new StationAdvanced(5,"北戴河"),
new StationAdvanced(6,"秦皇岛"),
new StationAdvanced(7,"廊坊"),
new StationAdvanced(8,"天津"),
};
/// <summary>
/// 《小白学程序》第十三课:双向链表(Linked-List)第二,链表插入与删除的计算方法与代码
/// 本课是《小白学程序》第十课之续章。
/// 学习用 函数 来实现 链表的(节点)插入、删除,而不是手工输入。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button13_Click(object sender, EventArgs e)
{
StationAdvanced bj = stations_advanced[0];
StationAdvanced xh = stations_advanced[2];
StationAdvanced ts = stations_advanced[3];
StationAdvanced qhd = stations_advanced[5];
// #2 构造车次信息(直达)
// 设置 北京 下一站为 秦皇岛
// 设置 秦皇岛唐山 上一站为 北京
bj.Next = qhd;
qhd.Last = bj;
// 调用链表的 插入 删除 算法
// 插入香河
StationInsert(bj, xh);
// 插入唐山
StationInsert(xh, ts);
// #4 输出车次信息(正向)
StringBuilder sb = new StringBuilder();
sb.AppendLine("插入新车站:<br>");
// 北京 出发
StationAdvanced start = bj;
while (start != null)
{
sb.AppendLine(start.Id + " " + start.Name + "<br>");
start = start.Next;
}
sb.AppendLine("<br>");
// 删除 香河
StationRemove(xh);
// #4 输出车次信息(正向)
// 北京 出发
sb.AppendLine("删除指定车站:<br>");
start = bj;
while (start != null)
{
sb.AppendLine(start.Id + " " + start.Name + "<br>");
start = start.Next;
}
webBrowser1.DocumentText = sb.ToString();
}
/// <summary>
/// 双向链表的插入算法
/// 将 c 节点插入 a (之后) b 之间
/// </summary>
/// <param name="a"></param>
/// <param name="c"></param>
private void StationInsert(StationAdvanced a, StationAdvanced c)
{
StationAdvanced b = a.Next;
a.Next = c;
c.Last = a;
c.Next = b;
b.Last = c;
}
/// <summary>
/// 双向链表的删除算法
/// 删除 a (之后) 的 b 节点
/// </summary>
/// <param name="a"></param>
private void StationRemove(StationAdvanced b)
{
StationAdvanced a = b.Last;
StationAdvanced c = b.Next;
a.Next = c;
c.Last = a;
}
2 代码格式
/// <summary>
/// 改进的车站信息类 class
/// 增加了 链表 需要的两个属性 Last Next
/// </summary>
public class StationAdvanced
{/// <summary>/// 编号/// </summary>public int Id { get; set; } = 0;/// <summary>/// 车站名/// </summary>public string Name { get; set; } = string.Empty;public StationAdvanced Last { get; set; } = null;public StationAdvanced Next { get; set; } = null;public StationAdvanced(int id, string name){this.Id = id;this.Name = name;}
}// 列表的初值
List<StationAdvanced> stations_advanced = new List<StationAdvanced>() {new StationAdvanced(1,"北京"),new StationAdvanced(2,"石家庄"),new StationAdvanced(3,"香河"),new StationAdvanced(4,"唐山"),new StationAdvanced(5,"北戴河"),new StationAdvanced(6,"秦皇岛"),new StationAdvanced(7,"廊坊"),new StationAdvanced(8,"天津"),
};/// <summary>
/// 《小白学程序》第十三课:双向链表(Linked-List)第二,链表插入与删除的计算方法与代码
/// 本课是《小白学程序》第十课之续章。
/// 学习用 函数 来实现 链表的(节点)插入、删除,而不是手工输入。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button13_Click(object sender, EventArgs e)
{StationAdvanced bj = stations_advanced[0];StationAdvanced xh = stations_advanced[2];StationAdvanced ts = stations_advanced[3];StationAdvanced qhd = stations_advanced[5];// #2 构造车次信息(直达)// 设置 北京 下一站为 秦皇岛// 设置 秦皇岛唐山 上一站为 北京 bj.Next = qhd;qhd.Last = bj;// 调用链表的 插入 删除 算法// 插入香河StationInsert(bj, xh);// 插入唐山StationInsert(xh, ts);// #4 输出车次信息(正向)StringBuilder sb = new StringBuilder();sb.AppendLine("插入新车站:<br>");// 北京 出发StationAdvanced start = bj;while (start != null){sb.AppendLine(start.Id + " " + start.Name + "<br>");start = start.Next;}sb.AppendLine("<br>");// 删除 香河StationRemove(xh);// #4 输出车次信息(正向)// 北京 出发sb.AppendLine("删除指定车站:<br>");start = bj;while (start != null){sb.AppendLine(start.Id + " " + start.Name + "<br>");start = start.Next;}webBrowser1.DocumentText = sb.ToString();
}/// <summary>
/// 双向链表的插入算法
/// 将 c 节点插入 a (之后) b 之间
/// </summary>
/// <param name="a"></param>
/// <param name="c"></param>
private void StationInsert(StationAdvanced a, StationAdvanced c)
{StationAdvanced b = a.Next;a.Next = c;c.Last = a;c.Next = b;b.Last = c;
}/// <summary>
/// 双向链表的删除算法
/// 删除 a (之后) 的 b 节点
/// </summary>
/// <param name="a"></param>
private void StationRemove(StationAdvanced b)
{StationAdvanced a = b.Last;StationAdvanced c = b.Next;a.Next = c;c.Last = a;
}
3 计算结果

相关文章:
C#,《小白学程序》第十一课:双向链表(Linked-List)其二,链表的插入与删除的方法(函数)与代码
1 文本格式 /// <summary> /// 改进的车站信息类 class /// 增加了 链表 需要的两个属性 Last Next /// </summary> public class StationAdvanced { /// <summary> /// 编号 /// </summary> public int Id { get; set; } 0; ///…...
java IDEA文件路径分层级
如下图这样 在设置里找到Compact Middle Packages,去掉勾选就行了...
Spring AOP+Redis实现接口访问限制
目录 一、需求二、实现思路三、代码实现3.1 导入依赖3.2 配置redis3.3 自定义注解3.4 定义切面类3.5 自定义异常类3.6 全局异常处理器 一、需求 在我们程序中,有时候需要对一些接口做访问控制,使程序更稳定,最常用的一种是通过ip限制&#x…...
互联网后端技术大全!
互联网后端技术大全! 一. 系统开发 高内聚/低耦合 高内聚 高内聚指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。模块的内聚反映模块内部联系的紧密程度。 低耦合 模块之间联系越紧密,其…...
Android SDK 上手指南||第九章 Manifest文件
第九章 Manifest文件 到目前为止,我们已经熟悉了Android项目中的各个组成部分,包括其资源。在今天的文章中,我们将以项目Manifest文件作为核心内容。 对于一个项目来说,Manifest既可以很简单、也可以很复杂,其具体情…...
CVE-2023-3450:锐捷 RG-BCR860 命令执行漏洞复现
锐捷 RG-BCR860 命令执行漏洞(CVE-2023-3450)复现 0x01 前言 本次测试仅供学习使用,如若非法他用,与本文作者无关,需自行负责!!! 0x02 漏洞描述 Ruijie Networks RG-BCR860是中国锐捷网络(R…...
【ES】elasticsearch8.3.3
这里仅实践操作并根据实际问题进行记录笔记。 运行 ES8 我们需要在自己的电脑上安装好 Docker Desktop。接着我们运行如下的命令:出现两个异常,一个是需要使用winpty因为我使用win的docker desktop,另外一个问题是docker启动elasticsearchE…...
2023年下半年广州/深圳软考(中/高级)认证报名,当然弘博创新
软考是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成…...
2017. 网格游戏;2397. 被列覆盖的最多行数;2202. K 次操作后最大化顶端元素
2017. 网格游戏 核心思想:前缀和枚举。读完题后可以发现,第一个机器人走的路线就像一条分割线,第二个机器人只能获得上面白色部分或者下面白色部分的最大值。这个最大值怎么求,我们可以通过前缀和来求,然后通过枚举转…...
专访远航汽车远勤山:踏踏实实做好产品 直面挑战乘风远航
8月25日,第二十六届成都国际汽车展览会在中国西部国际博览城隆重开幕。车展举办期间,远航汽车董事长远勤山先生、产品研发总监王震先生向媒体分享了远航汽车品牌发展、产品研发、技术创新以及市场布局等内容。 “通过我们的付出和努力,让我们…...
Redis基本了解
Redis 基于内存进⾏存储,⽀持 key-value 的存储形式,底层是⽤ C 语⾔编写的。 基于 key-value 形式的数据字典,结构⾮常简单,没有数据表的概念,直接⽤键值对的形式完成数据的管理,Redis ⽀持 5 种数据类型…...
Seata处理分布式事务之1.7.0
https://blog.csdn.net/zhang33565417/article/details/122768300 1.5.0之后版本发生了很大改变 1.seata安装 1.1官网地址 http://seata.io/zh-cn/ 1.2下载地址 https://github.com/seata/seata/releases 下载的是seata-server-1.7.0.zip 1.3seata相关配置的修改 seata-…...
在k8s中用label控制Pod部署到指定的node上
案例-标注k8s-node1是配置了SSD的节点 kubectl label node k8s-node1 disktypessd 查看标记 测试 将pod部署到disktypessd的节点上(这里设置了k8s-node1为ssd) 部署后查看结果-副本全都运行在了k8s-node1上—符合预期 删除标记 kubectl label node k8…...
vue3 搭配ElementPlus做基础表单校验 自定义表单校验
<script setup> import { ref, reactive } from vue// 表单元素 const dom ref(null) // 校验规则 const rules {name: [{ required: true, message: 请输入活动名称, trigger: blur }],//校验手机号格式phone: [{ required: true, message: "请输入电话", t…...
Vue项目中处理key=value格式的数据-案例
返回值 {qrCode: expiredAt1693821779265&token449d599830b8486a9c7b15e0bc3f036c, listenUri: wss://ws.abcdtest.link/?token0f63c64883ed7ea338e100a28946aba654165ad0f} expiredAt1693821779265&token449d599830b8486a9c7b15e0bc3f036c 需要处理上面的字符串 co…...
如何截取视频中的一段视频?分享几种视频分割方法
当处理长视频时,视频分割可以使您更加高效。如果您只需要处理其中的一部分,而不是整个视频,那么分割视频可以使您更容易找到需要处理的部分。而且,分割视频还可以使您更容易在不同的项目之间重复使用视频片段。教大家几种简单的视…...
《Go 语言第一课》课程学习笔记(十四)
接口 认识接口类型 接口类型是由 type 和 interface 关键字定义的一组方法集合,其中,方法集合唯一确定了这个接口类型所表示的接口。type MyInterface interface {M1(int) errorM2(io.Writer, ...string) }我们在接口类型的方法集合中声明的方法&#…...
windows下配置pcl-python
1.前提概要 python版本的pcl基本上只有3.6的能用,本人3.7/3.8均进行了尝试。 因为很多博主提到的Gtk已经下载不了了,实在是维护人员太懒了。如果你看到这里,可以试试下面这个链接,说不定又能用了呢。 Gtk下载:http:…...
CNN详细讲解
CNN(Convolutional Neural Network) 本文主要来讲解卷积神经网络。所讲解的思路借鉴的是李宏毅老师的课程。 CNN,它是专门被用在影像上的。 Image Classification 我们从影像分类开始说起。 我们举例来说,它固定的输入大小是100*100的解析度&#x…...
pdf怎么编辑文字?了解一下这几种编辑方法
pdf怎么编辑文字?PDF文件的普及使得它成为了一个重要的文件格式。然而,由于PDF文件的特性,它们不可直接编辑,这就使得PDF文件的修改变得比较麻烦。但是,不用担心,接下来这篇文章就给大家介绍几种编辑pdf文字…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
