C#, Lesson 11 of "Xiaobai Learning Program": Two-way linked list (Linked-List) Second, the method (function) and code of inserting and deleting the linked list

1 text format


/// <summary>
/// Improved station information class
/// Added two attributes Last Next
/// </summary>
public class StationAdvanced
{     /// <summary>     /// number     / // </summary>     public int Id { get; set; } = 0;     /// <summary>     /// station name     /// </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;
    }
}

// The initial value of the list
List<StationAdvanced> stations_advanced = new List<StationAdvanced>() {         new StationAdvanced(1,"Beijing"),         new StationAdvanced(2,"Shijiazhuang"),         new StationAdvanced(3,"Xianghe"),         new StationAdvanced(4,"Tangshan"),         new StationAdvanced(5,"Beidaihe"),         new StationAdvanced(6,"Qinhuangdao"),         new StationAdvanced(7,"Langfang"),         new StationAdvanced(8,"Tianjin"), };









 

/// <summary>
/// Lesson 13 of "Xiaobai Learning Program": Linked-List (Linked-List) Second, the calculation method and code of linked list insertion and deletion
/// This lesson is "Xiaobai Learning Program" "The continuation of Lesson Ten.
/// Learn to use functions to implement (node) insertion and deletion of linked lists instead of manual input.
/// </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 Construct train number information (direct)
    // Set the next stop in Beijing as Qinhuangdao
    // Set the last stop in Tangshan, Qinhuangdao as Beijing 
    bj.Next = qhd;
    qhd.Last = bj;

    // Call the insertion and deletion algorithm of the linked list
    // Insert Xianghe
    StationInsert(bj, xh);
    // Insert Tangshan
    StationInsert(xh, ts);

    // #4 Output train number information (forward direction)
    StringBuilder sb = new StringBuilder();
    sb.AppendLine("Insert new station:<br>");
    // Depart from Beijing
    StationAdvanced start = bj;
    while (start != null)
    {         sb.AppendLine(start.Id + " " + start.Name + "<br>");         start = start.Next;     }     sb.AppendLine("<br>");



    // Delete Xianghe
    StationRemove(xh);

    // #4 Output train number information (forward direction)
    // Depart from Beijing
    sb.AppendLine("Delete the specified station:<br>");
    start = bj;
    while (start != null)
    {         sb.AppendLine(start.Id + " " + start.Name + "<br>");         start = start.Next;     }


    webBrowser1.DocumentText = sb.ToString();
}

/// <summary>
/// Insertion algorithm for doubly linked list
/// Insert c node between a (after) 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>
/// Deletion algorithm for doubly linked list
/// delete a (after) b node
/// </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 code format


/// <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 calculation results 

Guess you like

Origin blog.csdn.net/beijinghorn/article/details/132591318