C#链表操作实例

链表的插入,删除

using System;

using System.Collections.Generic;
using System.Text;


namespace Ex17_01
{
      //  结点类
     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();  
                 }
          }
     }


}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值