有ArrayList这样的东西还要写链表干什么?
解决方案 »
- 如何获取WPF的DataGrid控件中,是否存在没有通过错误验证的Cell
- Winform 有没有类似于petshop那样的源码
- 当鼠标点击窗体时,怎么判断点击的是哪个控件
- 仓库管理系统 库存预警
- marshaling data是什么意思
- C#:使用internal修饰的类成员问题
- 新手,请大家能否介绍一个C#开发的简单系统(有源码)可供学习的?谢谢
- 很菜的问题,大哥们帮我看看!!
- 怎么打开XML文件
- 请教如何实现象记事本那样的查找时弹出的对话框?
- 《——散分——》只为庆祝自己转会成功!
- 关于傅立叶变换的MVP级难题(需要一定理论知识)-----------------------------挑战一下[召唤]
//单向链表>>
public clsLink
{
public int No;
public string Name;
public clsLink next; //相当于C++里的*next
}//双向链表>>
public clsDoubleLink
{
public int No;
public string Name;
public clsDoubleLink prev; //相当于C++里的*prev
public clsDoubleLink next; //相当于C++里的*next
}
这样好象不对把!
->怎么实现?
using System;namespace WindowsApplication1
{
/// <summary>
/// Class2 的摘要说明。
/// </summary>
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;
Head.Previous=Tail;
Tail.Next=Head;
}
else
{
Tail.Next =NewNode; NewNode.Previous =Tail; Tail=NewNode;
Head.Previous=Tail;
Tail.Next=Head;
} 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(); }
}
}
}
namespace WindowsApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </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;
}
}