学校要我们做数据结构的课程设计
线性表的应用——仓库管理和图的应用——工程工期控制问题.一向以来编这些算法程序都是用C或C++语言来写的,这次我决定做一个新尝试用C#来编这两个算法,并配以图形界面来显示效果.下面是我写的双向链表类.
using
System;
using
System.Collections.Generic;
using
System.Text;



namespace
LJH.ListNode


{

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;
}
}

}

public 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;

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 Objects GetCurrentValue()

{

return Current.goods;

}


/**//// <summary>
/// 取得链表的数据个数
/// </summary>

public int ListCount

{
get

{
return ListCountValue;
}
}


/**//// <summary>
/// 清空链表
/// </summary>

public void Clear()

{
MoveFrist();
while (!IsNull())

{
//若不为空链表,从尾部删除

Delete();

}
}


/**//// <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();

}
}
//根据名字查询货物
public Objects FindObjects(string name)

{
ListNode lnode = Head;
if (IsNull())

{
return null;
}
else if (IsEof())

{
return null;
}
else
while (lnode.goods.Name != name)

{
if (lnode.Next == null)

{
Current = lnode;
return null;
}
lnode = lnode.Next;
}
Current = lnode;
return lnode.goods;
}
//根据编号查询货物
public Objects FindObjects(int number)

{
ListNode lnode = Head;
if (IsNull())

{
return null;
}
else if (IsEof())

{
return null;
}
else
while (lnode.goods.Number != number)

{
if (lnode.Next == null)

{
Current = lnode;
return null;
}
lnode = lnode.Next;
}
Current = lnode;
return lnode.goods;
}


/**//*货物出库*/
//根据名字删除货物
public Objects DeleteObjects(string name)

{
Objects bugs;
bugs = FindObjects(name);
Delete();
return bugs;
}
//根据编号删除货物
public Objects DeleteObjects(int number)

{
Objects bugs;
bugs = FindObjects(number);
Delete();
return bugs;
}
}
}


















































































































































































































































































































































































































































































































































































































































































































































































































