使用c中的链接列表排序
我正在实施排序.程序从带有ASCII字符的文本文件中读取.每行有两个元素,用空格分隔.假设输入是“a b”.这定义了a和b之间的优先关系,称“必须在b之前发生”.
所以,如果文件是 a b d c b d 输出是 a b d c 我创建了两个链表 > bigList:存储唯一元素(计数以跟踪前面的元素) 我的代码的作用摘要 >逐行读取文件 它实际上打印出文件中的所有元素,就像输出我的输出一样 a b b d d c 我是C编程新手,请让我知道我做错了什么. 解决方法
关于拓扑排序,我不太了解,但我认为我足够了解一个明智的评论.任何人都可以随意编辑此回复.
我看到这个实现有几个问题.一些与C相关,其他与算法有关,所以让我一次一个地浏览它们. 问题定义. a -> b b -> c c -> a 如果从顶点a开始,拓扑排序应为{a,b,c}.如果从顶点c开始,则拓扑顺序应为{c,a,b}.因此,没有源顶点,问题定义就毫无意义.这种顶点的一个选择可能是图形的一些顶点,它没有指向它的边缘,即每个入射边缘都是一个输出边缘. 要记住的另一件事是图connectedness.并不总是可以从任何其他顶点到达任何顶点.所以在实现这样的算法时要记住这一点. 良好的数据结构是良好算法的关键. 实现邻接列表时,您仍需要将所有元素存储在一个位置.链表通常不是最好的方法,因为它需要一个时间来插入一个(假设对数据进行排序),需要线性时间来搜索一个.那是不理想的.正如@ David RF所建议的那样,Red-Black trees和AVL trees将是最佳选择.但是,我不会从这个优化开始.只要您拥有完善的工作算法,就可以随时改进存储数据结构.毕竟,链接列表和搜索树的界面是相同的. 考虑到您使用正确的算法,算法可以很快. 我已经阅读了你的算法,我不得不承认我并没有完全掌握你的大名单和小名单的概念.模棱两可的名字并没有真正帮助.也许它可以通过一个隐藏在某个地方的小小虫来完成工作,但它不太可读.也许其他人可以评论您当前的实施. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |