?? link.cpp
字號:
/*#ifndef LINKEDLIST_CLASS
#define LINKEDLIST_CLASS
#endif*/
#include "stdafx.h"
#include "Link.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#ifndef NULL
const int NULL=0;
#endif
IMPLEMENT_SERIAL(Node, CObject, 1)
//節點類的實現部分
//初始化數據和指針成員
Node::Node()
{
}
Node::Node(struct1* item,Node * ptrnext=NULL) : next(ptrnext)
{
data=*item;
}
//串行化操作重載函數
void Node::Serialize(CArchive& ar)
{
//CObject::Serialize(ar);
if(ar.IsStoring())
{
ar<<data.name<<data.num<<data.score[0]
<<data.score[1]<<data.score[2]<<data.sex;
}
else
{
//struct1 st;
//ar>>st.name>>st.num>>st.score[0]
// >>st.score[1]>>st.score[2]>>st.sex;
ar>>data.name>>data.num>>data.score[0]
>>data.score[1]>>data.score[2]>>data.sex;
}
}
//獲取后繼節點的地址
Node *Node::NextNode(void) const
{
return next;
}
//在當前節點之后插入一個節點
void Node::InsertAfter(Node * p)
{
p->next = next;
next = p ;
}
//刪除當前節點的后繼節點,并返回其首地址
Node *Node::DeleteAfter(void)
{
Node*tempPtr = next;
if (next==NULL)
return NULL;
next=tempPtr->next;
return tempPtr;
}
//求總成績
int Node::Sum(Node *p)
{ int sum;
sum=p->data.score[0]+p->data.score[1]+p->data.score[2];
return sum;
}
//鏈表類的實現部分
//生成新結點
Node* LinkedList::GetNode(struct1* item,Node *ptrNext=NULL)
{
Node *newNode;
//為新結點分配內存空間,然后將item和IextPtr傳遞給構造函數
newNode=::new Node(item,ptrNext);
if(newNode==NULL) //如果分配內存失敗,程序中止
{
AfxMessageBox("該節點內存分配失敗!");
exit(1);
}
return newNode;
}
//構造函數
LinkedList::LinkedList(void)
{
//front=new Node;///////////////////////////////////////////////////////////
front=NULL;
rear=NULL;
}
LinkedList::~LinkedList(void)
{
}
//統計學生信息個數
int LinkedList::ListSize(void)
{
int s=0;
Node *ptr;
ptr=front;
while(ptr !=NULL)
{
s++;
ptr=ptr->next;
}
return s;
}
//得到頭節點
Node * LinkedList::GetFront()
{
return front;
}
//判斷鏈表是否為空
int LinkedList::ListEmpty(void)
{
if (ListSize()==0)
return TRUE;
else
return FALSE;
}
//在表尾添加一個數據域為item的結點
void LinkedList::InsertRear(struct1* item)
{
Node *newNode;
currPtr = front;
if (currPtr ==NULL)
{
newNode=GetNode(item);
front=newNode;//
//front->next =NULL;
//currPtr->InsertAfter(newNode);
}
else
{
while(currPtr->NextNode()!=NULL)
currPtr=currPtr->NextNode();
newNode=GetNode(item);
currPtr->InsertAfter(newNode);
}
}
//刪除指定學生的學籍信息
void LinkedList::Delete(CString NAME)
{
currPtr=front;
prevPtr=NULL;
if (currPtr==NULL)
return;
while(currPtr!=NULL && currPtr->data.name!=NAME)
{
prevPtr = currPtr;
currPtr = currPtr->NextNode();
}
if(currPtr!=NULL)
{
if(prevPtr==NULL)
front =front->NextNode();
else
prevPtr->DeleteAfter();
::delete currPtr;
}
}
//按學好和姓名對學生信息進行檢索
Node* LinkedList::SearchByNo(CString NUM)
{
currPtr=front;
while(currPtr!=NULL)
{
if(currPtr->data.num==NUM)
return currPtr;
currPtr=currPtr->NextNode();
}
return currPtr;
}
Node* LinkedList::SearchByName(CString NAME)
{
currPtr=front;
while(currPtr!=NULL)
{
if(currPtr->data.name==NAME)
obArray.Add((CObject*)currPtr);
currPtr=currPtr->NextNode();
}
if(obArray.GetSize())
return (Node*)obArray.GetAt(0);
else
return currPtr;
}
//排名
int LinkedList::Paiming(Node* &currPtr)
{
int mingci=1;
Node *ptr;
ptr=front;
if(ptr==NULL)
{
return 0;
}
while(ptr!=NULL)
{
if(ptr->Sum(ptr) > ptr->Sum(currPtr))
mingci++;
ptr=ptr->NextNode();
}
return mingci;
}
//統計各科成績的平均分
float LinkedList::Average(int i)
{
currPtr=front;
size=0;
int sumscore=0;
float average[3];
average[0]=0;
average[1]=0;
average[2]=0;
while (currPtr!=NULL)
{
sumscore=sumscore+currPtr->data.score[i];
size++;
currPtr=currPtr->next;
}
if(size!=0)
average[i]=(float)sumscore/(float)size;
return average[i];
}
//統計及格率
float LinkedList::Passrate(int i)
{
currPtr=front;
float passrate=0;
int size=0;
int num=0;
while (currPtr!=NULL)
{
if (currPtr->data.score[i]>=60)
num++;
size++;
currPtr=currPtr->next;
}
if(size!=0)
passrate=(float)num/(float)size;
return passrate;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -