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_advanced0;

StationAdvanced xh = stations_advanced2;

StationAdvanced ts = stations_advanced3;

StationAdvanced qhd = stations_advanced5;

// #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 代码格式

cs 复制代码
/// <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 计算结果

相关推荐
OYYHXPJR3 分钟前
【算法】区间重叠模板和矩形重叠模板
算法
shehuiyuelaiyuehao5 分钟前
算法46,分治快排,排序数组
java·算法·排序算法·排序
野生技术架构师14 分钟前
1200 道 JAVA 面试题(各大企业常见面试题及答案)
java·开发语言
远航计算机21 分钟前
GEO 选题从哪来?用一份 Query 词库把一年内容排出来
大数据·人工智能·算法·aigc
宣宣猪的小花园.22 分钟前
【机器学习】神经网络与表征:为什么深度学习能自动提取特征
人工智能·嵌入式硬件·算法·机器学习
鱼听禅23 分钟前
C# 学习笔记-使用 类型化客户端搭建HTTP客户端服务
学习·http·c#·工厂方法模式
“AI国潮设计-小江”23 分钟前
【Python/SDXL实战】潮汕国潮IP视觉落地:普宁美食猫IP & 创意甜品设计(附ComfyUI工作流思路)
开发语言·人工智能·python·prompt·aigc
mmmmath_336 分钟前
LeetCode.018.四数之和
数据结构·算法·leetcode
AIGCmagic社区38 分钟前
腾讯混元 AuK 技术报告拆读:1.5B 统一语音生成与编辑,蒸馏后 4 步无 CFG 提速 4.5 倍
人工智能·算法·aigc·ai多模态
大熊背39 分钟前
基于照明色度表征的颜色恒常性的白平衡算法实现
算法·白平衡·色温·色度坐标·普朗克曲线