求教 单向链表如何排序啊???

来源:百度知道 编辑:UC知道 时间:2024/05/25 15:03:41
要做学生成绩管理系统~~~
可不知道单向链表如何排序~~~
希望给的简单的排序方法~~~

结构体
struct student
{
char name[20];
int num;
int score[3];
int ave;
int sum;
struct student *next;
};
typedef struct student STU;

单向链表连接~~~
要求可以按 sum 从大到小,将链表排序~~~

谢谢大家帮帮忙~~~

使用最简单的气泡法排序,数据结构中有明确的描述.但关键是你是否能熟练使用指针
举一个链表元素交换的例子
比如要把p所志向的元素向后移一位

因为不是双向链表所以必须已知道pFront和p;
struct student *pTmp = p->next->next;
pFront->next = p->next;
p->next->next = p;
p->next = pTmp;
这样就做到了把p元素向后移动一位了,然后结合气泡排序就可以了

最简单的,用冒泡。
sum作为关键值比较。
把冒泡算法里的实数换成结构体,占用n+1个sizeof(student)的空间。

使用二分法来做。递归调用函数原型:void sort(struct student *begin,struct student *end);
以第一个节点的sum为准,将比sum大的节点全部放到sum的左边,比sum小的节点全部放到sum的右边。
然后继续对sum的左边节点和右边节点分别做这样的处理。
然后递归调用,当最后所传入的头结点和末节点之间只有2个节点为递归调用结束。

哦,这个做过,看起来好简单,其实写起来好麻烦的~~
用插入排序或冒泡排序比较好写~~
记住当前指针的前一个指针和后一个指针,不然一拆就不知哪跟哪了~~
自己先琢磨一下吧~~