程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#數據結構篇(一鏈表類) killertang

C#數據結構篇(一鏈表類) killertang

編輯:關於C語言



       首先定義結點類型,定義了,前一個指針域,後一個指針域,如下:







using System;



namespace List
{
/// <summary>
/// Summary description for ListNode.
/// </summary>



// 結點類




public class ListNode
{
  public ListNode(int NewValue)
  {
   Value=NewValue;
  }



  /// <summary>
  /// 前一個
  /// </summary>



     
  public ListNode Previous;




  /// <summary>
  /// 後一個
  /// </summary>




  public ListNode Next;




  /// <summary>
  /// 值
  /// </summary>




  public int Value;
}
}



using System;

namespace List
{


/// <summary>
/// 鏈表類
/// </summary>

定義結點之後,開始類線性表的操作編程了.在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;


  }


  /// <summary>
  /// 頭指針
  /// </summary>


  private ListNode Head;


  /// <summary>
  /// 尾指針
  /// </summary>
  
  private ListNode Tail;

  /// <summary>
  /// 當前指針
  /// </summary>
  
  private ListNode Current;

  /// <summary>
  /// 鏈表數據的個數
  /// </summary>
  
  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;

   return false;
  }

  /// <summary>
  /// 判斷是否為到達尾部
  /// </summary>
  
  public bool ISEOf()
  {
   if( Current  ==Tail )
   return true;

   return false;
  }

  /// <summary>
  /// 判斷是否為到達頭部
  /// </summary>
  

  public bool IsBof()
  {
   if( Current ==Head)
    return true;

      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>
  /// 進行升序插入
  /// </summary>
  
  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();

   }
     }


  /// <summary>
  /// 進行降序插入
  /// </summary>


  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();

   }
  }
}
}






       好了,一個簡單的鏈表類實現了,當然還有許多的功能,可以根據自己的需要添加就好了。TO BE CONTINUE 。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved