#include <iostream>
using namespace std;
#include <stdlib.h>
typedef struct LNode
{
int num;
int grade;
LNode *next;
}LNode,*LinkLNode;
//初始化链表
bool InitLink(LinkLNode &L)
{
L=new LNode;
L->next=NULL;
return true;
}
//创造学生的成绩单,在创造的同时排序
void CreatLink(LinkLNode &L,int n)
{
LNode *pre,*q;//pre用于保存前一个结点,q用于和新学生的成绩比较
int i=0;
for(i=0;i<n;i++)
{
LNode *s;//创建新结点,存放新的数据
s=new LNode;
pre=L;//每次循环都要从头开始比较,令pre等于头结点 L
q=L->next;//q等于首元结点
s->num=i+1;
s->grade=rand()%100;//随机生成学生成绩(控制在100以内)
while(q&&s->grade<q->grade)
{
//当q不为空且新学生成绩小于当前学生成绩的时候
//更新pre,保存当前结点,并且往后扫描
pre=q;
q=q->next;
}
//当找到比新学生成绩低的学生结点时,将新学生结点插在这个学生之前
s->next=q;
pre->next=s;
}
}
//打印成绩单
void display(LinkLNode L)
{
LNode *p;
p=L->next;
while(p)
{
cout<<"学号:"<<p->num<<" "<<"成绩:"<<p->grade<<endl;
p=p->next;
}
}
int main()
{
LNode *L;
InitLink(L);//初始化L
CreatLink(L,15);//创造65个学生的成绩排名表
cout<<"学生成绩按降序排列为:"<<endl;
display(L);//打印排名表
return 0;
}