LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1320|回复: 7

我想把一个链表排序,知道算法,不知道应该怎么实现.

[复制链接]
发表于 2003-12-15 17:36:53 | 显示全部楼层 |阅读模式
比如说先比较出最小的,然后放到另一个链表里,之后是第二小的,但是书上的都是些伪代码,我怎么也想不出c或c++下怎样实现,望大侠们赐教!:p
发表于 2003-12-15 22:29:00 | 显示全部楼层
用qsort()排序,再一个取出来放到新的数组里。其实我不懂的怎么写的。请写好就贴出来给大伙看看。。。。。
以下是qsort()的用法,仅做参考。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* some_strs[] = { "last", "middle", "first" };

int compare( const void* op1, const void* op2 )
{
    const char **p1 = (const char **) op1;
    const char **p2 = (const char **) op2;
                                                                                                
    return( strcmp( *p1, *p2 ) );
}
                                                                                                
int main( void )
{
    qsort( some_strs,
           sizeof( some_strs ) / sizeof( char * ),
           sizeof(char *),
           compare );
                                                                                                
    printf( "%s %s %s\n",
        some_strs[0], some_strs[1], some_strs[2] );
                                                                                                
    return EXIT_SUCCESS;
}
 楼主| 发表于 2003-12-16 00:16:29 | 显示全部楼层
谢谢,下边的兄弟们请接着,^-^
发表于 2003-12-16 09:03:20 | 显示全部楼层
用c++的STL,泛型算法里有很多函数实现了这个功能。
发表于 2003-12-17 09:25:27 | 显示全部楼层
zbw76,对这个问题,用stl可能不合适吧
本来就是学数据结构和算法,结果用stl给你隐藏了这些细节,看stl源码又能看晕
所以啊,你在害人,哈哈

我建议楼主好好学习,天天向上,随便哪本数据结构的课本学完都应该能搞定这个问题
我给个思路,你把链表结点看成元素,这个元素的移动/插入/删除的算法你该知道的吧,在这些操作的基础上,套用排序算法,就能实现了。还有,如果看着教科书上的伪码不能写出c/c++代码,那是基础差了点吧,多写写,多想想。实在不行就放弃吧,趁早
发表于 2003-12-17 11:26:32 | 显示全部楼层
嘻嘻,练习算法吗那就自己实现,实现的方法很多了,排序也有很多种,正式写程序时最好使用标准库的,因为那是经过锤炼的代码。
发表于 2003-12-20 21:01:22 | 显示全部楼层
链表排序,用堆排可能简单点的吧
 楼主| 发表于 2003-12-22 00:00:11 | 显示全部楼层
谢谢各位了,^-^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表