ListNode线性表
不常用,可以看一下实现原理
namespace UnilateralismChainTable { // 结点类 public class ListNode { public ListNode(int NewValue) { Value = NewValue; } //前一个 public ListNode Previous; // 后一个 public ListNode Next; // 值 public int Value; } // 定义结点之后,开始类线性表的操作编程了.在LIST 类中,采用了,Head ,Tail, Current,三个指针,使用Append , //MoveFrist,MovePrevious,MoveNext,MoveLast ,Delete,InsertAscending,InsertUnAscending ,Clear 实现移动,添加, //删除,升序插入,降序插入,清空链表操作,GetCurrentValue() 方法取得当前的值。 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 MoveNext() { if (!IsEof()) Current = Current.Next; } // 向前移动一个数据 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 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(); } } } }
模拟货物的入库和出库:
namespace BothChainTable { public class Objects { private int number; /**//* 货物编号 */ private string name; /**//* 货物名称 */ private int counter; /**//* 货物数量 */ //构造函数 public Objects(int num, string Name, int count) { number = num; name = Name; counter = count; } public int Number { get { return number; } set { number = value; } } public string Name { get { return name; } set { name = value; } } public int Counter { get { return counter; } set { counter = value; } } } // 结点类 public class ListNode { public ListNode(Objects bugs) { goods = bugs; } /**/ /// <summary> /// 前一个 /// </summary> public ListNode Previous; /**/ /// <summary> /// 后一个 /// </summary> public ListNode Next; public ListNode next { get { return Next; } set { Next = value; } } /**/ /// <summary> /// 值 /// </summary> public Objects goods; public Objects Goods { get { return goods; } set { goods = value; } } } public class Clists { public Clists() { //构造函数 //初始化 ListCountValue = 0; Head = null; Tail = null; } /**/ /// <summary> /// 表名 /// </summary> private string clistname = ""; public string ClistName { get { return clistname; } set { clistname = value; } } /**/ /// <summary> /// 头指针 /// </summary> private ListNode Head; /**/ /// <summary> /// 尾指针 /// </summary> private ListNode Tail; /**/ /// <summary> /// 当前指针 /// </summary> private ListNode Current; public ListNode current { get { return Current; } set { Current = value; } } /**/ /// <summary> /// 链表数据的个数 /// </summary> private int ListCountValue; /**/ /// <summary> /// 尾部添加数据 /// </summary> public void Append(Objects 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; Tail.next = null; 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 Objects GetCurrentValue() { return Current.goods; } /**/ /// <summary> /// 取得链表的数据个数 /// </summary> public int ListCount { get { return ListCountValue; } } /**/ /// <summary> /// 清空链表 /// </summary> public void Clear() { MoveFrist(); while (!IsNull()) { //若不为空链表,从尾部删除 Delete(); } } /**/ /// <summary> /// 在当前位置前插入数据 /// </summary> public void Insert(Objects 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> /// 进行升序插入 /// </summary> public void InsertAscending(Objects InsertValue) { //参数:InsertValue 插入的数据 //为空链表 if (IsNull()) { //添加 Append(InsertValue); return; } //移动到头 MoveFrist(); if ((InsertValue.Number < GetCurrentValue().Number)) { //满足条件,则插入,退出 Insert(InsertValue); return; } while (true) { if (InsertValue.Number < GetCurrentValue().Number) { //满族条件,则插入,退出 Insert(InsertValue); break; } if (IsEof()) { //尾部添加 Append(InsertValue); break; } //移动到下一个指针 MoveNext(); } } /**/ /// <summary> /// 进行降序插入 /// </summary> /**/ /*货物入库*/ public void InsertUnAscending(Objects InsertValue) { //参数:InsertValue 插入的数据 //为空链表 if (IsNull()) { //添加 Append(InsertValue); return; } //移动到头 MoveFrist(); if (InsertValue.Number > GetCurrentValue().Number) { //满足条件,则插入,退出 Insert(InsertValue); return; } while (true) { if (InsertValue.Number > GetCurrentValue().Number) { //满足条件,则插入,退出 Insert(InsertValue); break; } if (IsEof()) { //尾部添加 Append(InsertValue); break; } //移动到下一个指针 MoveNext(); } } //根据名字查询货物 public Objects FindObjects(string name) { ListNode lnode = Head; if (IsNull()) { return null; } else if (IsEof()) { return null; } else while (lnode.goods.Name != name) { if (lnode.Next == null) { Current = lnode; return null; } lnode = lnode.Next; } Current = lnode; return lnode.goods; } //根据编号查询货物 public Objects FindObjects(int number) { ListNode lnode = Head; if (IsNull()) { return null; } else if (IsEof()) { return null; } else while (lnode.goods.Number != number) { if (lnode.Next == null) { Current = lnode; return null; } lnode = lnode.Next; } Current = lnode; return lnode.goods; } /**/ /*货物出库*/ //根据名字删除货物 public Objects DeleteObjects(string name) { Objects bugs; bugs = FindObjects(name); Delete(); return bugs; } //根据编号删除货物 public Objects DeleteObjects(int number) { Objects bugs; bugs = FindObjects(number); Delete(); return bugs; } } }
浮躁的人容易问:我到底该学什么;----别问,学就对了; 浮躁的人容易问:JS有钱途吗;----建议你去抢银行; 浮躁的人容易说:我要中文版!我英文不行!----不行?学呀! 浮躁的人分两种:只观望而不学的人;只学而不坚持的人; 浮躁的人永远不是一个高手。