链表如何实现依照输入指令 进行多指标排序?

weize_chen 2018-01-15 02:03:01
比如一个链表结构体里有value num两种整型数据

我输入vn就代表要先以value进行排序,有相同value的再以num为指标进行排序
输入nv就是反过来

有什么好的实现思路吗?
...全文
373 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-01-17
  • 打赏
  • 举报
回复
引用 5 楼 faihung 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:]
//我输入vn就代表要先以value进行排序,有相同value的再以num为指标进行排序输入nv就是反过来
if (0==strcmp(input,"vn")) {
if (pa->value>pb->value || (pa->value==pb->value && pa->num>pb->num) swap(a,b);
} else if (0==strcmp(input,"nv")) {
if (pa->num>pb->num || (pa->num==pb->num && pa->value>pb->value) swap(a,b);
} else {
fprintf(stderr,"Invalid input:%s\n",input);
}
赵4老师真实在[/quote]
faihung 2018-01-16
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
//我输入vn就代表要先以value进行排序,有相同value的再以num为指标进行排序输入nv就是反过来
if (0==strcmp(input,"vn")) {
    if (pa->value>pb->value || (pa->value==pb->value && pa->num>pb->num) swap(a,b);
} else if (0==strcmp(input,"nv")) {
    if (pa->num>pb->num || (pa->num==pb->num && pa->value>pb->value) swap(a,b);
} else {
    fprintf(stderr,"Invalid input:%s\n",input);
}
赵4老师真实在
赵4老师 2018-01-16
  • 打赏
  • 举报
回复
请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。 意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。 试对比 图书馆(对图书的分类够结构化了吧) 和 搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索) 哪个处理信息更方便、更高效。 所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。 结构越复杂,越难修改,越难除错。 有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。 程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George 前微软C#编辑器的开发主管Jay Bazuzi列出的一些有助于找到正确方向的问题;他觉得前同事们应该用这些问题来问自己;实际上不管在哪里工作的开发者们都应该经常问问自己这些问题: ◆“要保证这个问题不会再出现,我该怎么做?” ◆“要想少出些Bug,我该怎么做?” ◆“要保证Bug容易被修复,我该怎么做?” ◆“要保持对变化的快速响应,我该怎么做?” ◆“要保证我的软件的运行速度,我该怎么做?” 如果大多数团队都能不时问一下自己,必定会从中得益,因为这些都是真正强而有力的问题。
super_admi 2018-01-15
  • 打赏
  • 举报
回复
因为C/C++没有反射机制,所以value和num不能自动识别,还是需要自己定义比较函数的。 基本做法:在比较算法中,传入指定的函数指针即可--当需要按value排序时,传入value相关的比较函数;当按num排序时,传入num相关的比较函数。当然这在C++中是很简单的事情,不过C里面写的代码就多一些。
赵4老师 2018-01-15
  • 打赏
  • 举报
回复
//我输入vn就代表要先以value进行排序,有相同value的再以num为指标进行排序输入nv就是反过来
if (0==strcmp(input,"vn")) {
    if (pa->value>pb->value || (pa->value==pb->value && pa->num>pb->num) swap(a,b);
} else if (0==strcmp(input,"nv")) {
    if (pa->num>pb->num || (pa->num==pb->num && pa->value>pb->value) swap(a,b);
} else {
    fprintf(stderr,"Invalid input:%s\n",input);
}
自信男孩 2018-01-15
  • 打赏
  • 举报
回复
就是排序的一个算法,逻辑上会考虑以value为主还是以name为主的问题。这是一个简单的问题,另外没有考虑用什么排序算法,确定排序算法时,在判断上加上考虑以value还是以name为主。 建议自己先实现一下,遇到实际问题再提出来。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧