有ArrayList这样的东西还要写链表干什么?

解决方案 »

  1.   

    用引用
    //单向链表>>
    public clsLink
    {
          public int No;
          public string Name;
          public clsLink next;  //相当于C++里的*next
    }//双向链表>>
    public clsDoubleLink
    {
          public int No;
          public string Name;
          public clsDoubleLink prev;  //相当于C++里的*prev
          public clsDoubleLink next;  //相当于C++里的*next
    }
      

  2.   

    忘了加关键字class(或struct)了,
      

  3.   

    to: gxingmin(小高)
    这样好象不对把!
    ->怎么实现?
      

  4.   

    忘记发代码了现在补上
    using System;namespace WindowsApplication1
    {
    /// <summary>
    /// Class2 的摘要说明。
    /// </summary>
    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;
    Head.Previous=Tail;
    Tail.Next=Head;
        
    }
    else
    {
    Tail.Next =NewNode; NewNode.Previous =Tail; Tail=NewNode;
    Head.Previous=Tail;
    Tail.Next=Head;
        
    } 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(); }
    }
    }
    }
      

  5.   

    这是节点类上面那个是链表
    namespace WindowsApplication1
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </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;
    }

    }
      

  6.   

    Lastcsdner(外行)说得对,一句顶一万句
      

  7.   

    不是!ArrayList不是万能的,如果我要一个个不同的对象串成异质链表,或搞个循环链表什么的你拿ArrayList怎么搞啊?