用指针实现链表排序

来源:百度知道 编辑:UC知道 时间:2024/06/30 19:43:06
用指针实现链表中某个值的排序,排序函数定义在类外,链表由类定义
已有程序

#include<iostream.h>
#include<string.h>
class student
{
friend class list;
private:
char stu_nam[10],stu_sch[10],stu_language[10],stu_class[10];//学生成绩信息包括学生姓名、学号、学校、考试级别选考语种、成绩定义一个类
double grade;
long int stu_num;
public:
student(){next=0;}
void add();
student *next;
char * outstu_nam(){return stu_nam;};//用于类外成员访问//学生成绩信息包括学生姓名、学号、学校、考试级别选考语种、成绩
double outgrade(){return grade;};
int outstu_num(){return stu_num;}
char *outstu_sch(){return stu_sch;};
char *outstu_languange(){return stu_language;};
char *outstu_class(){return stu_class;};
void intgrade();//修改学号、学校、考试级别选考语种、成绩

};
void student::intgrade()
{
cout<<"请输入学号(数字)";

cin>>stu_num;

cout<<"\n";
cout<<"请输入学校";
cin>>stu_sch;

看样子是根据outgrade()来做排序的.
我是按照成绩降序排的.
我就写个冒泡排序的吧.
在纸上画一画流程你就能够看懂了

void list::Sort()
{
student *out=first;
if(!out || !out->next) return;
for(out=out->next;out;out=out->next){
student *in=first,*prev=0;
for(;in->outgrade()>out->outgrade();in=in->next)prev=in;
if(prev){
student *nt=out->next;
out->next=in->next;
prev->next=out;
in->next=nt;
} else {
student *nt=out->next;
out->next=in->next;
in->next=nt;
first=out;
}
}
}