当前位置: 首页 > news >正文

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&#xff0c;去掉勾选就行了...

Spring AOP+Redis实现接口访问限制

目录 一、需求二、实现思路三、代码实现3.1 导入依赖3.2 配置redis3.3 自定义注解3.4 定义切面类3.5 自定义异常类3.6 全局异常处理器 一、需求 在我们程序中&#xff0c;有时候需要对一些接口做访问控制&#xff0c;使程序更稳定&#xff0c;最常用的一种是通过ip限制&#x…...

互联网后端技术大全!

互联网后端技术大全&#xff01; 一. 系统开发 高内聚/低耦合 高内聚 高内聚指一个软件模块是由相关性很强的代码组成&#xff0c;只负责一项任务&#xff0c;也就是常说的单一责任原则。模块的内聚反映模块内部联系的紧密程度。 低耦合 模块之间联系越紧密&#xff0c;其…...

Android SDK 上手指南||第九章 Manifest文件

第九章 Manifest文件 到目前为止&#xff0c;我们已经熟悉了Android项目中的各个组成部分&#xff0c;包括其资源。在今天的文章中&#xff0c;我们将以项目Manifest文件作为核心内容。 对于一个项目来说&#xff0c;Manifest既可以很简单、也可以很复杂&#xff0c;其具体情…...

CVE-2023-3450:锐捷 RG-BCR860 命令执行漏洞复现

锐捷 RG-BCR860 命令执行漏洞(CVE-2023-3450)复现 0x01 前言 本次测试仅供学习使用&#xff0c;如若非法他用&#xff0c;与本文作者无关&#xff0c;需自行负责&#xff01;&#xff01;&#xff01; 0x02 漏洞描述 Ruijie Networks RG-BCR860是中国锐捷网络&#xff08;R…...

【ES】elasticsearch8.3.3

这里仅实践操作并根据实际问题进行记录笔记。 运行 ES8 我们需要在自己的电脑上安装好 Docker Desktop。接着我们运行如下的命令&#xff1a;出现两个异常&#xff0c;一个是需要使用winpty因为我使用win的docker desktop&#xff0c;另外一个问题是docker启动elasticsearchE…...

2023年下半年广州/深圳软考(中/高级)认证报名,当然弘博创新

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…...

2017. 网格游戏;2397. 被列覆盖的最多行数;2202. K 次操作后最大化顶端元素

2017. 网格游戏 核心思想&#xff1a;前缀和枚举。读完题后可以发现&#xff0c;第一个机器人走的路线就像一条分割线&#xff0c;第二个机器人只能获得上面白色部分或者下面白色部分的最大值。这个最大值怎么求&#xff0c;我们可以通过前缀和来求&#xff0c;然后通过枚举转…...

专访远航汽车远勤山:踏踏实实做好产品 直面挑战乘风远航

8月25日&#xff0c;第二十六届成都国际汽车展览会在中国西部国际博览城隆重开幕。车展举办期间&#xff0c;远航汽车董事长远勤山先生、产品研发总监王震先生向媒体分享了远航汽车品牌发展、产品研发、技术创新以及市场布局等内容。 “通过我们的付出和努力&#xff0c;让我们…...

Redis基本了解

Redis 基于内存进⾏存储&#xff0c;⽀持 key-value 的存储形式&#xff0c;底层是⽤ C 语⾔编写的。 基于 key-value 形式的数据字典&#xff0c;结构⾮常简单&#xff0c;没有数据表的概念&#xff0c;直接⽤键值对的形式完成数据的管理&#xff0c;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的节点上&#xff08;这里设置了k8s-node1为ssd&#xff09; 部署后查看结果-副本全都运行在了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…...

如何截取视频中的一段视频?分享几种视频分割方法

当处理长视频时&#xff0c;视频分割可以使您更加高效。如果您只需要处理其中的一部分&#xff0c;而不是整个视频&#xff0c;那么分割视频可以使您更容易找到需要处理的部分。而且&#xff0c;分割视频还可以使您更容易在不同的项目之间重复使用视频片段。教大家几种简单的视…...

《Go 语言第一课》课程学习笔记(十四)

接口 认识接口类型 接口类型是由 type 和 interface 关键字定义的一组方法集合&#xff0c;其中&#xff0c;方法集合唯一确定了这个接口类型所表示的接口。type MyInterface interface {M1(int) errorM2(io.Writer, ...string) }我们在接口类型的方法集合中声明的方法&#…...

windows下配置pcl-python

1.前提概要 python版本的pcl基本上只有3.6的能用&#xff0c;本人3.7/3.8均进行了尝试。 因为很多博主提到的Gtk已经下载不了了&#xff0c;实在是维护人员太懒了。如果你看到这里&#xff0c;可以试试下面这个链接&#xff0c;说不定又能用了呢。 Gtk下载&#xff1a;http:…...

CNN详细讲解

CNN(Convolutional Neural Network) 本文主要来讲解卷积神经网络。所讲解的思路借鉴的是李宏毅老师的课程。 CNN&#xff0c;它是专门被用在影像上的。 Image Classification 我们从影像分类开始说起。 我们举例来说&#xff0c;它固定的输入大小是100*100的解析度&#x…...

pdf怎么编辑文字?了解一下这几种编辑方法

pdf怎么编辑文字&#xff1f;PDF文件的普及使得它成为了一个重要的文件格式。然而&#xff0c;由于PDF文件的特性&#xff0c;它们不可直接编辑&#xff0c;这就使得PDF文件的修改变得比较麻烦。但是&#xff0c;不用担心&#xff0c;接下来这篇文章就给大家介绍几种编辑pdf文字…...

从开题到答辩,AI全程辅助是一种怎样的体验?

2026年&#xff0c;毕业论文的写作方式已经发生了根本性变化。从开题到答辩&#xff0c;AI工具深度嵌入每一个环节&#xff0c;但这届毕业生也逐渐认清一个事实&#xff1a;AI是副驾驶&#xff0c;你才是驾驶员-1。以下是基于2026届毕业生真实经历的论文全程实录。 一、开题阶段…...

效率倍增:借助快马ai智能生成与管理系统化java面试题库

作为一名经常需要准备Java面试的开发者&#xff0c;我深刻体会到传统刷题方式的低效——手动收集题目、整理答案、标注重点不仅耗时&#xff0c;还容易遗漏关键知识点。最近尝试用InsCode(快马)平台的AI功能搭建了一个智能题库工具&#xff0c;效率提升超乎想象。以下是具体实现…...

TMSpeech终极指南:如何在Windows上实现零延迟的本地语音实时转文字,彻底告别会议记录焦虑

TMSpeech终极指南&#xff1a;如何在Windows上实现零延迟的本地语音实时转文字&#xff0c;彻底告别会议记录焦虑 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 想象一下&#xff0c;当你在重要的视频会议中&#…...

WeChatExporter:免费开源工具,三步轻松备份你的微信聊天记录到电脑

WeChatExporter&#xff1a;免费开源工具&#xff0c;三步轻松备份你的微信聊天记录到电脑 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否担心过手机丢失、系统崩…...

高效构建个性化Obsidian知识管理系统:从模板到实践的全面指南

高效构建个性化Obsidian知识管理系统&#xff1a;从模板到实践的全面指南 【免费下载链接】kepano-obsidian My personal Obsidian vault template. A bottom-up approach to note-taking and organizing things I am interested in. 项目地址: https://gitcode.com/gh_mirro…...

MIL图像库实战:从采集卡配置到Qt应用开发

1. 工业视觉项目开发全流程解析 第一次接触MIL图像库时&#xff0c;我被它强大的硬件抽象能力震撼到了。这个由Matrox开发的图像处理库&#xff0c;就像一位经验丰富的翻译官&#xff0c;把不同品牌采集卡的硬件差异统统屏蔽掉。想象一下&#xff0c;你手里有Basler、AVT、Dals…...

深度解析猫抓浏览器扩展资源嗅探机制与性能优化策略

深度解析猫抓浏览器扩展资源嗅探机制与性能优化策略 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓&#xff08;Cat Catch&#xff09;作为一…...

Youtu-VL-4B-Instruct-GGUF助力开源社区:如何向GitHub提交高质量的模型使用案例

Youtu-VL-4B-Instruct-GGUF助力开源社区&#xff1a;如何向GitHub提交高质量的模型使用案例 1. 引言&#xff1a;从使用者到贡献者 不知道你有没有这样的经历&#xff1a;在网上找到一个看起来很酷的开源项目&#xff0c;兴致勃勃地打开它的GitHub页面&#xff0c;结果发现文…...

AI辅助开发新思路:让快马平台生成风车动漫智能推荐与摘要代码

用AI辅助开发提升动漫网站体验 最近在做一个动漫网站项目&#xff0c;需要实现智能推荐和内容摘要功能。传统开发方式需要自己写复杂的算法&#xff0c;但借助InsCode(快马)平台的AI辅助功能&#xff0c;可以快速生成代码框架&#xff0c;大大提升开发效率。下面分享我的实现思…...

手机网站建设:新手指南,一步到位打造完美移动版网站 关键词: 手机网站建设, 移动网站设计, 响应式设计, SEO优化, 用户体验

...