• 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;
            }
        }
    }
  • 相关阅读:
    从程序员到项目经理
    wumii 爆款总结经验
    快速的搭建JFinal的ORM框架示例
    Hibernate all-delete-orphan[转]
    HHvm Apache 2.4 Nginx建站环境搭建方法安装运行WordPress博客
    雷军是如何从程序员蜕变成职业经理人的
    Postgresql数据库数据简单的导入导出
    如何一年看50本好书?
    清除DNS解析缓存
    mysql 下 计算 两点 经纬度 之间的距离
  • 原文地址:https://www.cnblogs.com/xuekai-to-sharp/p/3556091.html
Copyright © 2020-2023  润新知