ITPub博客

首页 > 应用开发 > IT综合 > C#数据结构篇(一链表类) (转)

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

原创 IT综合 作者:worldblog 时间:2007-12-13 08:03:57 0 删除 编辑
C#数据结构篇(一链表类) (转)[@more@]

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


  作者: 寒羽狼 (Dark_Slaer_Tang)


 


 最近,马子跑了,你说女人老是容易翻脸。。。,看来做程序员必定要 “茕茕孑立,行影相吊”悲惨命运了。还是老老实实编程吧,我发现用c# 编一些数据接结构的类也瞒不错的,于是想把数据结构的算法,用C#重写一遍,打发无聊的时光,下面是数据结构中的链表的实现。


  首先定义结点类型,定义了,前一个指针域,后一个指针域,如下:


 


using System;


namespace List
{
 ///


 /// Summary description for ListNode.
 ///


// 结点类



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


 ///


 /// 前一个
 ///


 
 public ListNode Previous;



 ///


 /// 后一个
 ///



 public ListNode Next;



 ///


 /// 值
 ///



 public int Value;
 }
}


using System;

namespace List
{


 ///


 /// 链表类
 ///

定义结点之后,开始类线性表的操作编程了.在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;


 }


 ///


 /// 头指针
 ///


 private ListNode Head;


 ///


 /// 尾指针
 ///

 
 private ListNode Tail;

 ///


 /// 当前指针
 ///

 
 private ListNode Current;

 ///


 /// 链表数据的个数
 ///

 
 private int ListCountValue;

 ///


 /// 尾部添加数据
 ///

 
 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;

 }
 
 ///


 /// 删除当前的数据
 ///


 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;
 }

 
 }


 ///


 /// 向后移动一个数据
 ///


 public void MoveNext()
 {
  if (! IsEof()) Current=Current.Next ;
 }
 ///


 /// 向前移动一个数据
 ///

 
 public void MovePrevious()
 {
 if (!IsBof()) Current=Current.Previous  ;
 }

 ///


 /// 移动到第一个数据
 ///

 
 public void MoveFrist()
 {
  Current=Head;
 }

 ///


 /// 移动到最后一个数据
 ///


 public void MoveLast()
 {
 Current=Tail;
 }

 ///


 /// 判断是否为空链表
 ///


 public bool IsNull()
 {
 if (ListCountValue==0)
 return true;

 return false;
 }

 ///


 /// 判断是否为到达尾部
 ///

 
 public bool IsEof()
 {
 if( Current  ==Tail )
 return true;

 return false;
 }

 ///


 /// 判断是否为到达头部
 ///

 

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

  return false;

 }

 public int GetCurrentValue()
 {
 
 return Current.Value ;

 }
 
 ///


 /// 取得链表的数据个数
 ///

 
 public int ListCount
 {
 get
 {
 return ListCountValue;
 }
 }

 ///


 /// 清空链表
 ///

 
 public void Clear()
 { 
 MoveFrist();
 while (!IsNull())
 {
 //若不为空链表,从尾部删除
 
 Delete();

 }
 }

 ///


 /// 在当前位置前插入数据
 ///

 
 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;

 }

 ///


 /// 进行升序插入
 ///

 
 public void InsertAscending(int InsertValue)
 {
  //参数:InsertValue 插入的数据
 
 
  //为空链表

 if (IsNull())
 { 
 //添加

 Append(InsertValue);

 return;

 }

  //移动到头

  MoveFrist();
 
 if ((InsertValue   { 
 //满足条件,则插入,退出

 Insert(InsertValue);

 return;

 }

  while(true)

 { 
 
 if (InsertValue {

 //满族条件,则插入,退出

 Insert(InsertValue);

 break;

 }

 if (IsEof())
 { 
 //尾部添加

 Append(InsertValue);

 break;

 }

  //移动到下一个指针

 MoveNext();

 }
   }


 ///


 /// 进行降序插入
 ///


 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 。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992422/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    6241
  • 访问量
    2411060