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