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

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

** ** 作者: 寒羽狼 (Dark_Slaer_Tang)

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

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

using System;

namespace List
{
///

1<summary>   
2/// Summary description for ListNode.   
3/// </summary>

// 结点类

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

///

1<summary>   
2/// 前一个   
3/// </summary>

public ListNode Previous;

///

1<summary>   
2/// 后一个   
3/// </summary>

public ListNode Next;

///

1<summary>   
2/// 值   
3/// </summary>

public int Value;
}
}

using System;

namespace List
{

///

1<summary>   
2/// 链表类   
3/// </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;

}

///

1<summary>   
2/// 头指针   
3/// </summary>

private ListNode Head;

///

1<summary>   
2/// 尾指针   
3/// </summary>

private ListNode Tail;

///

1<summary>   
2/// 当前指针   
3/// </summary>

private ListNode Current;

///

1<summary>   
2/// 链表数据的个数   
3/// </summary>

private int ListCountValue;

///

1<summary>   
2/// 尾部添加数据   
3/// </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;

}

///

1<summary>   
2/// 删除当前的数据   
3/// </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;
}

}

///

1<summary>   
2/// 向后移动一个数据   
3/// </summary>

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

1<summary>   
2/// 向前移动一个数据   
3/// </summary>

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

///

1<summary>   
2/// 移动到第一个数据   
3/// </summary>

public void MoveFrist()
{
Current=Head;
}

///

1<summary>   
2/// 移动到最后一个数据   
3/// </summary>

public void MoveLast()
{
Current=Tail;
}

///

1<summary>   
2/// 判断是否为空链表   
3/// </summary>

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

return false;
}

///

1<summary>   
2/// 判断是否为到达尾部   
3/// </summary>

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

return false;
}

///

1<summary>   
2/// 判断是否为到达头部   
3/// </summary>

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

return false;

}

public int GetCurrentValue()
{

return Current.Value ;

}

///

1<summary>   
2/// 取得链表的数据个数   
3/// </summary>

public int ListCount
{
get
{
return ListCountValue;
}
}

///

1<summary>   
2/// 清空链表   
3/// </summary>

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

Delete();

}
}

///

1<summary>   
2/// 在当前位置前插入数据   
3/// </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;

}

///

1<summary>   
2/// 进行升序插入   
3/// </summary>

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

//为空链表

if (IsNull())
{
//添加

Append(InsertValue);

return;

}

//移动到头

MoveFrist();

if ((InsertValue

 1<getcurrentvalue())) (insertvalue<getcurrentvalue())="" (iseof())="" <summary="" append(insertvalue);="" break;="" if="" insert(insertvalue);="" movenext();="" return;="" while(true)="" {="" }="" 尾部添加="" 满族条件,则插入,退出="" 满足条件,则插入,退出="" 移动到下一个指针="">   
 2/// 进行降序插入   
 3/// 
 4
 5  
 6public void InsertUnAscending(int InsertValue)   
 7{   
 8//参数:InsertValue 插入的数据   
 9  
10  
11//为空链表 
12
13if (IsNull())   
14{   
15//添加 
16
17Append(InsertValue); 
18
19return; 
20
21} 
22
23//移动到头 
24
25MoveFrist();   
26  
27if (InsertValue&gt;GetCurrentValue())   
28{   
29//满足条件,则插入,退出 
30
31Insert(InsertValue); 
32
33return; 
34
35} 
36
37while(true) 
38
39{   
40  
41if (InsertValue&gt;GetCurrentValue())   
42{ 
43
44//满族条件,则插入,退出 
45
46Insert(InsertValue); 
47
48break; 
49
50} 
51
52if (IsEof())   
53{   
54//尾部添加 
55
56Append(InsertValue); 
57
58break; 
59
60} 
61
62//移动到下一个指针 
63
64MoveNext(); 
65
66}   
67}   
68}   
69}   
70  
71  
72  
73
74
75  
76好了,一个简单的链表类实现了,当然还有许多的功能,可以根据自己的需要添加就好了。TO BE CONTINUE 。</getcurrentvalue()))>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus