心静自然凉~

一杯清茶、二盏淡酒、邀三五知己,诉七八句心语,道九分珍重,怀十分真诚,或伤感、或快乐,无现实之隔阂 、无世俗之势利,如此人生,不亦乐乎!

导航

C#数据结构——链表类

Posted on 2006-08-14 15:29  Leo.Zhu  阅读(8519)  评论(0编辑  收藏  举报
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();
}

}

}

}