高分请求大家给一个双向链表实现(C#) 要求是C#实现,不要告我.net中已经有 LinkedList<T>谢谢,我要的是双向链表。要求实现前插 后插等一系列方法。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class Objects { private int number; private string name; private int counter; //构造函数 public Objects(int num, string Name, int count) { number = num; name = Name; counter = count; } public int Number { get { return number; } set { number = value; } } public string Name { get { return name; } set { name = value; } } public int Counter { get { return counter; } set { counter = value; } } }定义链表中的节点的代码如下://结点类 public class ListNode { public ListNode(Objects bugs) { goods = bugs; } /**/ /// <summary> /// 前一个 /// </summary> public ListNode Previous; /**/ /// <summary> /// 后一个 /// </summary> public ListNode Next; public ListNode next { get { return Next; } set { Next = value; } } /**/ /// <summary> /// 值 /// </summary> public Objects goods; public Objects Goods { get { return goods; } set { goods = value; } } }定义链表类的实现代码如下: pic class Clists { public Clists() { //构造函数 //初始化 ListCountValue = 0; Head = null; Tail = null; } /**/ /// <summary> /// 表名 /// </summary> private string clistname = ""; public string ClistName { get { return clistname; } set { clistname = value; } } /**/ /// <summary> /// 头指针 /// </summary> private ListNode Head; /**/ /// <summary> /// 尾指针 /// </summary> private ListNode Tail; /**/ /// <summary> /// 当前指针 /// </summary> private ListNode Current; public ListNode current { get { return Current; } set { Current = value; } } /**/ /// <summary> /// 链表数据的个数 /// </summary> private int ListCountValue; /**/ /// <summary> /// 尾部添加数据 /// </summary> public void Append(Objects 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; Tail.next = null; 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; else return false; } /**/ /// <summary> /// 判断是否为到达尾部 /// </summary> public bool IsEof() { if (Current == Tail) return true; else return false; } /**/ /// <summary> /// 判断是否为到达头部 /// </summary> public bool IsBof() { if (Current == Head) return true; else return false; } public Objects GetCurrentValue() { return Current.goods; } /**//**/ /// <summary> /// 清空链表 /// </summary> public void Clear() { MoveFrist(); while (!IsNull()) { //若不为空链表,从尾部删除 Delete(); } } /// <summary> /// 取得链表的数据个数 /// </summary> public int ListCount { get { return ListCountValue; } }/// <summary> /// 在当前位置前插入数据 /// </summary> public void Insert(Objects 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(Objects InsertValue) { //参数:InsertValue 插入的数据 //为空链表 if (IsNull()) { //添加 Append(InsertValue); return; } //移动到头 MoveFrist(); if ((InsertValue.Number < GetCurrentValue().Number)) { //满足条件,则插入,退出 Insert(InsertValue); return; } while (true) { if (InsertValue.Number < GetCurrentValue().Number) { //满族条件,则插入,退出 Insert(InsertValue); break; } if (IsEof()) { //尾部添加 Append(InsertValue); break; } //移动到下一个指针 MoveNext(); } } /**/ /// <summary> /// 进行降序插入 /// </summary> /**/ /*货物入库*/ public void InsertUnAscending(Objects InsertValue) { //参数:InsertValue 插入的数据 //为空链表 if (IsNull()) { //添加 Append(InsertValue); return; } //移动到头 MoveFrist(); if (InsertValue.Number > GetCurrentValue().Number) { //满足条件,则插入,退出 Insert(InsertValue); return; } while (true) { if (InsertValue.Number > GetCurrentValue().Number) { //满足条件,则插入,退出 Insert(InsertValue); break; } if (IsEof()) { //尾部添加 Append(InsertValue); break; } //移动到下一个指针 MoveNext(); } } } 参考:http://msdn.microsoft.com/zh-cn/library/he2s3bh7(VS.80).aspx 在C中有写过,在C#中还没有思考过.up wangping_li 你是不是被驴T了,我告你说我不要LinkedList<T>,你看不见吗 http://msdn.microsoft.com/zh-cn/library/he2s3bh7(VS.80).aspx happychou 兄弟给的东西不错,再等等看哪位兄弟还有 zcandyly20211 我刚说了wangping_li ,你接着又让T了是不是 LinkedList<T> 确实是双向的,不过我要自已实现的,希望不要再有人被驴子T了 "SOS" 程序中的dll不兼容. insert into 能不能这么用? C#编译资源文件 求个思路 用wpf做的web页面如何加flash呀? 关于第3页面刷新问题,请高手帮忙 Convert的使用问题 散分了 怎样取得当前系统时间? asp.net ajax1.0 与ajaxpro2.0哪个更好。。。大家说说。。。孟子。。。梅子。。。星星,,,钻石出来吧。。 自定义控件-button问题 C#连续播放音乐
{
private int number;
private string name;
private int counter;
//构造函数
public Objects(int num, string Name, int count)
{
number = num;
name = Name;
counter = count;
}
public int Number
{
get
{
return number;
}
set
{
number = value;
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public int Counter
{
get
{
return counter;
}
set
{
counter = value;
}
}
}
定义链表中的节点的代码如下:
//结点类
public class ListNode
{
public ListNode(Objects bugs)
{
goods = bugs;
}
/**/
/// <summary>
/// 前一个
/// </summary>
public ListNode Previous;
/**/
/// <summary>
/// 后一个
/// </summary>
public ListNode Next;
public ListNode next
{
get
{
return Next;
}
set
{
Next = value;
}
}
/**/
/// <summary>
/// 值
/// </summary>
public Objects goods;
public Objects Goods
{
get
{
return goods;
}
set
{
goods = value;
}
}
}
定义链表类的实现代码如下:
pic class Clists
{
public Clists()
{
//构造函数
//初始化
ListCountValue = 0;
Head = null;
Tail = null;
}
/**/
/// <summary>
/// 表名
/// </summary>
private string clistname = "";
public string ClistName
{
get
{
return clistname;
}
set
{
clistname = value;
}
}
/**/
/// <summary>
/// 头指针
/// </summary>
private ListNode Head;
/**/
/// <summary>
/// 尾指针
/// </summary>
private ListNode Tail;
/**/
/// <summary>
/// 当前指针
/// </summary>
private ListNode Current;
public ListNode current
{
get
{
return Current;
}
set
{
Current = value;
}
}
/**/
/// <summary>
/// 链表数据的个数
/// </summary>
private int ListCountValue;
/**/
/// <summary>
/// 尾部添加数据
/// </summary>
public void Append(Objects 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;
Tail.next = null;
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;
else
return false;
}
/**/
/// <summary>
/// 判断是否为到达尾部
/// </summary>
public bool IsEof()
{
if (Current == Tail)
return true;
else
return false;
}
/**/
/// <summary>
/// 判断是否为到达头部
/// </summary>
public bool IsBof()
{
if (Current == Head)
return true;
else
return false;
}
public Objects GetCurrentValue()
{
return Current.goods;
}
/**//**/
/// <summary>
/// 清空链表
/// </summary>
public void Clear()
{
MoveFrist();
while (!IsNull())
{
//若不为空链表,从尾部删除
Delete();
}
}
/// <summary>
/// 取得链表的数据个数
/// </summary>
public int ListCount
{
get
{
return ListCountValue;
}
}
/// <summary>
/// 在当前位置前插入数据
/// </summary>
public void Insert(Objects 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(Objects InsertValue)
{
//参数:InsertValue 插入的数据
//为空链表
if (IsNull())
{
//添加
Append(InsertValue);
return;
}
//移动到头
MoveFrist();
if ((InsertValue.Number < GetCurrentValue().Number))
{
//满足条件,则插入,退出
Insert(InsertValue);
return;
}
while (true)
{
if (InsertValue.Number < GetCurrentValue().Number)
{
//满族条件,则插入,退出
Insert(InsertValue);
break;
}
if (IsEof())
{
//尾部添加
Append(InsertValue);
break;
}
//移动到下一个指针
MoveNext();
}
}
/**/
/// <summary>
/// 进行降序插入
/// </summary>
/**/
/*货物入库*/
public void InsertUnAscending(Objects InsertValue)
{
//参数:InsertValue 插入的数据
//为空链表
if (IsNull())
{
//添加
Append(InsertValue);
return;
}
//移动到头
MoveFrist();
if (InsertValue.Number > GetCurrentValue().Number)
{
//满足条件,则插入,退出
Insert(InsertValue);
return;
}
while (true)
{
if (InsertValue.Number > GetCurrentValue().Number)
{
//满足条件,则插入,退出
Insert(InsertValue);
break;
}
if (IsEof())
{
//尾部添加
Append(InsertValue);
break;
}
//移动到下一个指针
MoveNext();
}
}
}
http://msdn.microsoft.com/zh-cn/library/he2s3bh7(VS.80).aspx
兄弟给的东西不错,再等等看哪位兄弟还有
我刚说了wangping_li ,你接着又让T了是不是