/// <summary> /// 结点类 /// Summary description for ListNode. /// </summary> public class ListNode { public ListNode(int NewValue) { Value = NewValue; } public ListNode Previous;// 前一个 public ListNode Next;// 后一个 public int Value;// 值 } /// <summary> /// 链表类 /// ----------------------------------------------------------------- /// 定义结点之后,开始类线性表的操作编程了.在LIST 类中,采用了, /// Head ,Tail,Current,三个指针,使用Append,MoveFrist,MovePrevious, /// MoveNext,MoveLast,Delete,InsertAscending,InsertUnAscending /// ,Clear实现移动,添加,删除,升序插入,降序插入, /// 清空链表操作,GetCurrentValue() 方法取得当前的值。 /// </summary> public class Clist { public Clist() { //构造函数 //初始化 ListCountValue = 0; Head = null; Tail = null; } private ListNode Head;// 头指针 private ListNode Tail;// 尾指针 private ListNode Current;// 当前指针 private int ListCountValue;// 链表数据的个数 /// <summary> /// 尾部添加数据 /// </summary> 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;//链表数据个数加一 } /// <summary> /// 删除当前的数据 /// </summary> 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; } } /// <summary> /// 向后移动一个数据 /// </summary> public void MoveNext() { if (!IsEof()) { Current = Current.Next; } } /// <summary> /// 向前移动一个数据 /// </summary> public void MovePrevious() { if (!IsBof()) { Current = Current.Previous; } } /// <summary> /// 移动到第一个数据 /// </summary> public void MoveFrist() { Current = Head; } /// <summary> /// 移动到最后一个数据 /// </summary> public void MoveLast() { Current = Tail; } /// <summary> /// 判断是否为空链表 /// </summary> public bool IsNull() { if (ListCountValue == 0) { return true; } else { return false; } } /// <summary> /// 判断是否为到达尾部 /// </summary> public bool IsEof() { if (Current == Tail) { return true; } else { return false; } } /// <summary> /// 判断是否为到达头部 /// </summary> public bool IsBof() { if (Current == Head) { return true; } else { return false; } } public int GetCurrentValue() { return Current.Value; } /// <summary> /// 取得链表的数据个数 /// </summary> public int ListCount { get { return ListCountValue; } } /// <summary> /// 清空链表 /// </summary> public void Clear() { MoveFrist(); while (!IsNull()) { Delete();//若不为空链表,从尾部删除 } } /// <summary> /// 在当前位置前插入数据 /// </summary> 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; } /// <summary> /// 进行升序插入 /// 参数:InsertValue 插入的数据 /// </summary> public void InsertAscending(int 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();//移动到下一个指针 } } /// <summary> /// 进行降序插入 /// 参数:InsertValue 插入的数据 /// </summary> public void InsertUnAscending(int 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();//移动到下一个指针 } } }