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 。

|