分享
 
 
 

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 。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有