C#数据结构篇(一链表类) killertang(原作)
2024-07-21 02:28:06
供稿:网友
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
注册会员,创建你的web开发资料库,