英特尔第六代处理器:建立一个链表,记录学生的姓名,学号和成绩,

来源:百度文库 编辑:中科新闻网 时间:2024/04/27 12:34:16
请求援助...
建立一个链表,记录学生的姓名,学号和成绩,实现插入和删除过程并且当输入学生的姓名时,可以将该学生所有的信息调出.

public class StudentPerson
{
/// <summary>
/// 实例化一个新的学生
/// </summary>
public StudentPerson(int studentID, string studentName ,string studentPoint)
{
pri_ID = studentID ;
pri_Name = studentName ;
pri_Point = studentPoint ;
}
public StudentPerson()
{}

private int pri_ID ;
private string pri_Name;
private decimal pri_Point ;
/// <summary>
/// 学生学号
/// </summary>
public int ID
{
get
{
return pri_ID ;
}
set
{
pri_ID = value ;
}
}
/// <summary>
/// 学生姓名
/// </summary>
public string Name
{
get
{
return pri_Name ;
}
set
{
pri_Name = value ;
}
}
/// <summary>
/// 学生成绩
/// </summary>
public decimal Point
{
get
{
return pri_Point ;
}
set
{
pri_Point = value ;
}
}
}
/// <summary>
/// 结点类.
/// </summary>
public class ListNode
{
public ListNode(StudentPerson NewValue)
{
Value=NewValue;
}
/// <summary>
/// 前一个
/// </summary>
public ListNode Previous;
/// <summary>
/// 后一个
/// </summary>
public ListNode Next;
/// <summary>
/// 值
/// </summary>
public StudentPerson Value;
}
/// <summary>
/// 学生链表。
/// </summary>
public class StudentList
{
public StudentList()
{
//构造函数
//初始化
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(StudentPerson 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 = null ;
Current=Head;
Head.Previous = null ;
ListCountValue-=1;
return;
}
//若删除尾
if (IsEof())
{
Tail=Current.Previous ;
Current = null ;
Current=Tail;
Tail.Next = null ;
ListCountValue-=1;
return;
}
//若删除中间数据
Current.Previous.Next =Current.Next ;
Current.Next.Previous =Current.Previous ;
Current=Current.Previous ;
ListCountValue-=1;
return;
}
}
/// <summary>
/// 向后移动一个数据
/// </summary>
public bool MoveNext()
{
if (! IsEof())
{
Current=Current.Next ;
return true ;
}
else
{
return false ;
}
}
/// <summary>
/// 向前移动一个数据
/// </summary>
public bool MovePrevious()
{
if (!IsBof())
{
Current=Current.Previous ;
return true ;
}
else
{
return false ;
}

}
/// <summary>
/// 移动到第一个数据
/// </summary>
public void MoveFirst()
{
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;
}
/// <summary>
/// 得到当前指针的学生信息
/// </summary>
public StudentPerson GetCurrentValue()
{
return Current.Value ;
}
/// <summary>
/// 取得链表的数据个数
/// </summary>
public int ListCount
{
get
{
return ListCountValue;
}
}
/// <summary>
/// 清空链表
/// </summary>
public void Clear()
{
MoveFirst();
while (!IsNull())
{
//若不为空链表,从尾部删除
Delete();
}
}
/// <summary>
/// 查出是否有此学生,如果有返回信息,没有返回空值
/// </summary>
public StudentPerson SelectStudent(string Name)
{
int NowStudent = GetCurrentValue().ID ;
if(GetCurrentValue().Name == Name)
{
return GetCurrentValue() ;
}
else
{
while(SelectName != GetCurrentValue().Name)
{
if(!MoveNext())
{
MoveFirst() ;
}

if(NowStudent == GetCurrentValue().ID)
{
return null ;
}
}
return GetCurrentValue() ;
}
}
/// <summary>
/// 在当前位置前插入数据
/// </summary>
public void Insert(StudentPerson 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 InsertAscendingByID(StudentPerson InsertValue)
{
//参数:InsertValue 插入的数据
//为空链表
if (IsNull())
{
//添加
Append(InsertValue);
return;
}
//移动到头
MoveFirst();
if ((InsertValue.ID<GetCurrentValue().ID))
{
//满足条件,则插入,退出
Insert(InsertValue);
return;
}
while(true)
{
if (InsertValue.ID<GetCurrentValue().ID)
{
//满足条件,则插入,退出
Insert(InsertValue);
break;
}
if (IsEof())
{
//尾部添加
Append(InsertValue);
break;
}
//移动到下一个指针
MoveNext();
}
}
/// <summary>
/// 按学号降序插入
/// </summary>
public void InsertUnAscendingByID(StudentPerson InsertValue)
{
//参数:InsertValue 插入的数据
//为空链表
if (IsNull())
{
//添加
Append(InsertValue);
return;
}
//移动到头
MoveFirst();
if (InsertValue.ID>GetCurrentValue().ID)
{
//满足条件,则插入,退出
Insert(InsertValue);
return;
}
while(true)
{
if (InsertValue.ID>GetCurrentValue().ID)
{
//满族条件,则插入,退出
Insert(InsertValue);
break;
}
if (IsEof())
{
//尾部添加
Append(InsertValue);
break;
}
//移动到下一个指针
MoveNext();
}
}
/// <summary>
/// 按成绩升序插入
/// </summary>
public void InsertAscendingByPoint(StudentPerson InsertValue)
{
//参数:InsertValue 插入的数据
//为空链表
if (IsNull())
{
//添加
Append(InsertValue);
return;
}
//移动到头
MoveFirst();
if ((InsertValue.Point<GetCurrentValue().Point))
{
//满足条件,则插入,退出
Insert(InsertValue);
return;
}
while(true)
{
if (InsertValue.Point<GetCurrentValue().Point)
{
//满足条件,则插入,退出
Insert(InsertValue);
break;
}
if (IsEof())
{
//尾部添加
Append(InsertValue);
break;
}
//移动到下一个指针
MoveNext();
}
}
/// <summary>
/// 按成绩降序插入
/// </summary>
public void InsertUnAscendingByPoint(StudentPerson InsertValue)
{
//参数:InsertValue 插入的数据
//为空链表
if (IsNull())
{
//添加
Append(InsertValue);
return;
}
//移动到头
MoveFirst();
if (InsertValue.Point>GetCurrentValue().Point)
{
//满足条件,则插入,退出
Insert(InsertValue);
return;
}
while(true)
{
if (InsertValue.Point>GetCurrentValue().Point)
{
//满族条件,则插入,退出
Insert(InsertValue);
break;
}
if (IsEof())
{
//尾部添加
Append(InsertValue);
break;
}
//移动到下一个指针
MoveNext();
}
}
}