Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中使用链表进行排序_C_Sorting_Linked List - Fatal编程技术网

在c中使用链表进行排序

在c中使用链表进行排序,c,sorting,linked-list,C,Sorting,Linked List,我正在实现一个排序。程序从带有ASCII字符的文本文件中读取。每行有两个元素,由空格分隔。假设输入为“ab”。这定义了a和b之间的优先关系,即“a必须出现在b之前” 所以如果文件是 a b d c b d 我是C编程新手,请让我知道我做错了什么 我对拓扑排序知之甚少,但我想我知道的足够多,可以留下一个明智的评论。任何人都可以随意编辑此响应 我发现这个实现有几个问题。有些与C相关,其他的与算法相关,所以让我一次一个地来看看 问题定义。 实际上,定义为有向图中元素的优先级。然而,仅这句话并不能完全

我正在实现一个排序。程序从带有ASCII字符的文本文件中读取。每行有两个元素,由空格分隔。假设输入为“ab”。这定义了a和b之间的优先关系,即“a必须出现在b之前”

所以如果文件是

a b d c b d
我是C编程新手,请让我知道我做错了什么

我对拓扑排序知之甚少,但我想我知道的足够多,可以留下一个明智的评论。任何人都可以随意编辑此响应

我发现这个实现有几个问题。有些与C相关,其他的与算法相关,所以让我一次一个地来看看


问题定义。 实际上,定义为有向图中元素的优先级。然而,仅这句话并不能完全说明问题。具体来说,拓扑排序是从指定的源顶点开始的图元素的优先级。例如,假设您有以下有向图:

a -> b
b -> c
c -> a
如果从顶点
a
开始,拓扑顺序应该是
{a,b,c}
。如果从顶点
c
开始,拓扑顺序应该是
{c,a,b}
。因此,如果没有源顶点,问题定义就没有意义。这种顶点的一个选择可能是图的某个顶点,该顶点没有指向它的边,即每个入射边都是一条出射边

另一件需要记住的事情是图表。从任何其他顶点到任何顶点并不总是可能的。因此,在实现这些算法时,值得记住


好的数据结构是好算法的关键。 如果要在有向图中对事物进行排序,最好的方法是创建一个有向图数据结构,它本身将涉及创建一个
节点
数据结构和一个
数据结构。我建议你抬头看看。一旦有了这样的数据结构,就只需要在图上运行,就可以得到拓扑优先级

实现邻接列表时,仍然需要将所有元素存储在一个位置。链表通常不是最好的方法,因为插入链表需要固定的时间(假设按数据排序),搜索链表需要线性时间。这是次优的。正如@所建议的,这将是一条路要走。但是,我不会从这个优化开始。只要您有一个完善的工作算法,就可以随时改进存储数据结构。毕竟,链接列表和搜索树的接口是相同的


如果使用正确的算法,算法可能会很快。 我在实践中没有处理过拓扑排序,所以我不知道每一种复杂情况和每一种边情况。但是如果使用传统的节点边缘数据结构进行宽度优先搜索(请注意,可以在节点内隐式定义边缘),则使用宽度优先搜索,搜索本身应花费线性时间


我已经通读了你的算法,我必须承认我没有完全理解你关于大列表和小列表的概念。模棱两可的名字并没有真正的帮助。也许它只在某个地方隐藏了一个小bug,但它的可读性不太好。也许其他人可以对您当前的实施进行评论。

您应该阅读并牢记所读内容。在这里发布您的全部代码,并期望有人阅读、理解它,然后告诉您出了什么问题,这并不是该网站的真正目的。谢谢。我会记住这一点。谢谢,@user1476263。您的问题是否有一系列可能的输入?使用数字比使用字母或字符串容易得多。因此,如果您有
a-z
作为输入,我会将其转换为
0-25
。有链表很重要吗?还是只需要排序的输出? a b b d d c
a -> b
b -> c
c -> a