C#数据结构篇(一链表类)

王朝c#·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

C#数据结构篇(一)线性表

作者: 寒羽狼 (Dark_Slaer_Tang)

最近,马子跑了,你说女人老是容易翻脸。。。,看来做程序员必定要 “茕茕孑立,行影相吊”悲惨命运了。还是老老实实编程吧,我发现用c# 编一些数据接结构的类也瞒不错的,于是想把数据结构的算法,用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 。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航