C#数据结构篇(一链表类) killertang(原作)
来源:互联网 发布:武汉seo服务 编辑:程序博客网 时间:2024/05/17 08:47
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
作者: 寒羽狼 (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 CONTI
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
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 CONTI
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- C#数据结构篇(一链表类) killertang(原作)
- C#数据结构篇(二 堆栈) killertang(原作)
- 钓鱼入门(原作)
- Turbine简述 menlion(原作)
- 编程修养 haoel(原作)
- 用.net创建windows service的总结(C#代码)tojike(原作)
- 转标题 C#和VB.NET的区别 qianqian(原作)
- C#数据结构篇(链表类)
- ADO数据库编程入门 liandong(原作)
- 动态数组(源程序) efeather [原作]
- 神秘的DUAL ------ black_snail(原作)
- VCL源码分析方法论 cg1120(原作)
- ASP.NET 2.0专题(原作)
- 【收藏】需求分析概述 jaminwm(原作)
- SQLPlus命令使用指南(二) enhydraboy(原作)
- 转入OO思维模式 sunlazy(原作)
- Eclipse快捷键指南 smallnest(原作)
- Excel To SqlServer huaervvhuaer(原作)
- 在PHP中显示格式化的用户输入
- C# 积木模块 ABC(一)(转自新一代技术网)
- 用session做客户验证时的注意事项
- ASP.NET ViewState 初探 (2) 转自msdn
- 用PHP编程语言开发动态WAP页面
- C#数据结构篇(一链表类) killertang(原作)
- 引用文件
- ASP.NET ViewState 初探 (1)
- 用PHP编程开发“虚拟域名”系统
- C#中调用API
- 使用PHP3建立动态图象
- ASP.NET Framework深度历险(3)
- 实例学习PHP之意见信箱篇
- An Introduction to Business Objects in C#