📄 func.cpp
字号:
#include"ulist.h"
using namespace std;
CUList::CUList() //创建头结点,不存储数据为了方便链表操作
{
newp=new STUDENT;
newp->Next=NULL;
head=newp;
}
CUList::CUList(const CUList & aList) //用已存在的链表初始化新建的链表
{
newp=new STUDENT;
newp->Next=NULL;
head=newp;
STUDENT *p=aList.head;
while(p->Next!=NULL) //工作指针到最后移向链表的最后一个节点时,循环终止
{
if((newp=new STUDENT)==NULL)
{
cout<<"new STUDENT fail!"<<endl;
exit(0);
}
strcpy(newp->NUMBER,p->Next->NUMBER);
strcpy(newp->Name,p->Next->Name);
for(int i=0;i<3;i++)
{
newp->Score[i]=p->Next->Score[i];
}
Add(newp); //将新建的节点添加进链表
p=p->Next; //工作指针移向下一个节点
}
}
CUList CUList::operator+(CUList &a)
{
STUDENT *p=head;
STUDENT *q=a.head;
while(q->Next!=NULL)
{
q=q->Next;
}
q->Next=p->Next;
delete p;
return a;
}
bool CUList::operator ==(CUList &a)
{
int num=a.GetCount();
if(num!=GetCount())
return false;
else
{
STUDENT *p=head;
STUDENT *q=a.head;
for(int i=0;i<num;++i)
{
if(!equal(p->Next,q->Next))
return false;
p=p->Next;
q=q->Next;
}
return true;
}
}
CUList CUList::operator =(CUList &a)
{
STUDENT *p=a.head;
while(p->Next!=NULL) //工作指针到最后移向链表的最后一个节点时,循环终止
{
if((newp=new STUDENT)==NULL)
{
cout<<"new STUDENT fail!"<<endl;
exit(0);
}
strcpy(newp->NUMBER,p->Next->NUMBER);
strcpy(newp->Name,p->Next->Name);
for(int i=0;i<3;i++)
{
newp->Score[i]=p->Next->Score[i];
}
Add(newp); //将新建的节点添加进链表
p=p->Next; //工作指针移向下一个节点
}
return *this;
}
bool CUList::equal(STUDENT *a,STUDENT *b)
{
if(strcmp(a->NUMBER,b->NUMBER)==0&&strcmp(a->Name,b->Name)==0&&a->Score[0]==b->Score[0]&&a->Score[1]==b->Score[1]&&a->Score[2]==b->Score[2])
return true;
else
return false;
}
bool CUList::equal(STUDENT *a,STUDENT &b)
{
if(strcmp(a->NUMBER,b.NUMBER)==0&&strcmp(a->Name,b.Name)==0&&a->Score[0]==b.Score[0]&&a->Score[1]==b.Score[1]&&a->Score[2]==b.Score[2])
return true;
else
return false;
}
bool CUList::Sort(int pos,bool dec)
{
//position=pos;
//paixu=dec;
STUDENT *p=head->Next;
if(dec)
{
if(pos==1)
{
while(p->Next!=NULL)
{
STUDENT *q=p->Next;
while(q!=NULL)
{
if(strcmp(q->NUMBER,p->NUMBER)>0)
change(q,p);
q=q->Next;
}
p=p->Next;
}
}
else
{
while(p->Next!=NULL)
{
STUDENT *q=p->Next;
while(q!=NULL)
{
if(q->Score[pos-2]>p->Score[pos-2])
change(q,p);
q=q->Next;
}
p=p->Next;
}
}
}
else if(pos==1)
{
while(p->Next!=NULL)
{
STUDENT *q=p->Next;
while(q!=NULL)
{
if(strcmp(q->NUMBER,p->NUMBER)<0)
change(q,p);
q=q->Next;
}
p=p->Next;
}
}
else
{
while(p->Next!=NULL)
{
STUDENT *q=p->Next;
while(q!=NULL)
{
if(q->Score[pos-2]<p->Score[pos-2])
change(q,p);
q=q->Next;
}
p=p->Next;
}
}
return true;
}
void CUList::change(STUDENT *a,STUDENT *b)
{
char NUM[20];
char Nam[20];
float Sco[3];
strcpy(NUM,a->NUMBER);
strcpy(a->NUMBER,b->NUMBER);
strcpy(b->NUMBER,NUM);
strcpy(Nam,a->Name);
strcpy(a->Name,b->Name);
strcpy(b->Name,Nam);
for(int j=0;j<3;++j)
{
Sco[j]=a->Score[j];
a->Score[j]=b->Score[j];
b->Score[j]=Sco[j];
}
}
bool CUList::Delete(char * NUMBER) //根据学号从连表中删除某条记录
{
STUDENT *q;
STUDENT *p=head;
while(p->Next!=NULL)
{
if(!strcmp(p->Next->NUMBER,NUMBER))
{
q=p->Next;
p->Next=q->Next;
delete q;
}
p=p->Next;
}
return false;
}
bool CUList::Add(STUDENT & aStudent)
{
/* STUDENT *p=Search(aStudent);
STUDENT * q=&aStudent;
InsertSTUDENT(p,q);
return true;*/
newp=new STUDENT;
strcpy(newp->NUMBER,aStudent.NUMBER);
strcpy(newp->Name,aStudent.Name);
for(int i=0;i<3;++i)
{
newp->Score[i]=aStudent.Score[i];
}
newp->Next=NULL;
Add(newp);
return true;
}
STUDENT CUList::Find(STUDENT & aStudent)
{
STUDENT *p=head;
// STUDENT *a=&aStudent;
while(p->Next!=NULL)
{
if(equal(p->Next,aStudent))
return *p;
p=p->Next;
}
}
void CUList::Clear()
{
STUDENT *p=head;
while(p->Next!=NULL)
{
p=p->Next;
delete head;
head=p;
}
delete p;
}
int CUList::GetCount()
{
int i=0;
STUDENT *p=head->Next;
while(p->Next!=NULL)
{
i++;
p=p->Next;
}
return i;
}
void CUList::print()
{
STUDENT *p=head;
while(p->Next!=NULL)
{
cout<<p->Next->NUMBER<<'\t'<<p->Next->Name;
for(int i=0;i<3;i++)
{
cout<<'\t'<<p->Next->Score[i];
}
cout<<endl;
p=p->Next;
}
}
void CUList::InsertSTUDENT(STUDENT *p,STUDENT *q) // 在p之后插入节点newp
{
q->Next=p->Next;
p->Next=q;
}
void CUList::Add(STUDENT *q)
{
STUDENT *p=Search(q->NUMBER);
InsertSTUDENT(p,q);
}
STUDENT *CUList::Search(char *NUMBER)//寻找
{
STUDENT *p=head;
while(p->Next!=NULL)
{
if((*p->Next->NUMBER)<*NUMBER)
return p;
p=p->Next;
}
return p;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -