请问:
如何对一个建立好的链表排序?(如:一个学生信息链表、包含:学好、姓名、各种成绩等,按学号排序)。
备注:不要采用结构体数组排序。而是一个对动态的链表直接排序!
[此贴子已经被作者于2006-6-27 11:22:29编辑过]
谈谈个人观点:
1。最好在创建链表时就开始排序。相当于打扑克时,不要积压了一大把牌再开始理顺它们,而是每接收到一张牌,就立马将它它安插到合适的位置上去。
2。当然,上面谈的是一种愿望而已。实际情况下,已经搞好的链表再按照某种权重因子重新排序也是经常发生的。
3。这时我会有三种考虑:
⑴ 不改变链接关系,但是在某种排序法控制下有条件地去交换结点数据。这样做代码短。
⑵ 遍历排序前的旧链表,把数据全写到磁盘上去,然后执行快速排序,最后写出新链表。
⑶ 老老实实改变链接关系,这样一来代码实际可能是最罗唆的。
谈谈个人观点:
1。最好在创建链表时就开始排序。相当于打扑克时,不要积压了一大把牌再开始理顺它们,而是每接收到一张牌,就立马将它它安插到合适的位置上去。
2。当然,上面谈的是一种愿望而已。实际情况下,已经搞好的链表再按照某种权重因子重新排序也是经常发生的。
3。这时我会有三种考虑:
⑴ 不改变链接关系,但是在某种排序法控制下有条件地去交换结点数据。这样做代码短。
⑵ 遍历排序前的旧链表,把数据全写到磁盘上去,然后执行快速排序,最后写出新链表。
⑶ 老老实实改变链接关系,这样一来代码实际可能是最罗唆的。
我想考虑的就是不改变链表的关系,直接对链表进行操作。如果去一一交换数据接点的数据,那每个节点的数据非常多那不是很麻烦?如果把数据写到磁盘上,那就不是对链表的直接操作了。
我本来想利用指针,但每个数据结点都不是连续存放的。可否有一种更好的机制来排序呢!