C# 連結串列結構
阿新 • • 發佈:2021-08-10
using System; namespace UnilateralismChainTable { public class ListNode // 結點類 { public ListNode(int NewValue) { Value = NewValue; } public ListNode Previous; //前一個 public ListNode Next; //後一個 public int Value; //值 } public class Clist { public Clist() { ListCountValue = 0;//初始化 Head = null; Tail = null; } private ListNode Head;//頭指標 private ListNode Tail;//尾指標 private ListNode Current;//當前指標 private int ListCountValue;//連結串列資料的個數 public void Append(int DataValue) { ListNode NewNode = new ListNode(DataValue); if (IsNull())//如果頭指標為空 { Head = NewNode; Tail = NewNode; } else { Tail.Next= NewNode; NewNode.Previous = Tail; Tail = NewNode; } Current = NewNode; ListCountValue += 1;//連結串列資料個數加一 } public void Delete() { if (!IsNull())//若為空連結串列 { if (IsBof())//若刪除頭 { Head = Current.Next; Current = Head; ListCountValue -= 1; return; } if (IsEof())//若刪除尾 { Tail = Current.Previous; Current = Tail; ListCountValue -= 1; return; } Current.Previous.Next = Current.Next;//若刪除中間資料 Current = Current.Previous; ListCountValue -= 1; return; } } public void MovePrevious() { if (!IsBof()) Current = Current.Previous;//向前移動一個數據 } public void MoveFrist() { Current = Head;//移動到第一個資料 } public void MoveLast() { Current = Tail;//移動到最後一個數據 } public bool IsNull() { if (ListCountValue == 0)//判斷是否為空連結串列 return true; return false; } public bool IsEof() { if (Current == Tail)//判斷是否為到達尾 return true; return false; } public bool IsBof() { if (Current == Head)//判斷是否為到達頭部 return true; return false; } public int GetCurrentValue() { return Current.Value;//獲取節點值 } public int ListCount { get { return ListCountValue;//取得連結串列的資料個數 } } //清空連結串列 public void Clear() { MoveFrist(); while (!IsNull()) { Delete();//若不為空連結串列,從尾部刪除 } } public void MoveNext() { if (!IsEof()) Current = Current.Next;//向後移動一個數據 } public void Insert(int DataValue) { ListNode NewNode = new ListNode(DataValue); if (IsNull()) { Append(DataValue);//如果為空表,則新增 return; } if (IsBof()) { //為頭部插入 NewNode.Next = Head; Head.Previous = NewNode; Head = NewNode; Current = Head; ListCountValue += 1; return; } //中間插入 NewNode.Next = Current; NewNode.Previous = Current.Previous; Current.Previous.Next = NewNode; Current.Previous = NewNode; Current = NewNode; ListCountValue += 1; } public void InsertAscending(int InsertValue) { //引數:InsertValue 插入的資料 if (IsNull())//為空連結串列 { Append(InsertValue);//新增 return; } MoveFrist();//移動到頭 if ((InsertValue < GetCurrentValue())) { Insert(InsertValue);//滿足條件,則插入,退出 return; } while (true) { if (InsertValue < GetCurrentValue()) { Insert(InsertValue);//滿足條件,則插入,退出 break; } if (IsEof()) { Append(InsertValue);//尾部新增 break; } MoveNext();//移動到下一個指標 } } public void InsertUnAscending(int InsertValue) { //引數:InsertValue 插入的資料 if (IsNull())//為空連結串列 { Append(InsertValue);//新增 return; } MoveFrist();//移動到頭 if (InsertValue > GetCurrentValue()) { Insert(InsertValue);//滿足條件,則插入,退出 return; } while (true) { if (InsertValue > GetCurrentValue()) { Insert(InsertValue);//滿足條件,則插入,退出 break; } if (IsEof()) { Append(InsertValue);//尾部新增 break; } MoveNext();//移動到下一個指標 } } } }
說實話 沒大懂 還需要慢慢研究
參照了一波
https://blog.csdn.net/qq_36981814/article/details/80604607?utm_medium=distribute.pc_relevant_download.none-task-blog-2~default~BlogCommendFromBaidu~default-1.test_version_3&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-2~default~BlogCommendFromBaidu~default-1.test_version_3
等風來,不如追風去。