链表按降序排序

时间:2015-11-10 06:52:27

标签: c sorting linked-list

大家好!我得到了国家的数据列表和表中男性和女性的登记人数,我的任务是读入并按降序对总和进行排序。

阅读时没有问题,但我可能会猜到排序方面的问题。

在输出中,我只有2个国家而不是158.

这是我的代码

MPI_Type_commit()

返回此输出

int count = 2;
int array_of_blocklengths[] = { 1, 1 };
MPI_Aint array_of_displacements[] = { offsetof( foo, value ),
                                      offsetof( foo, rank ) };
MPI_Datatype array_of_types[] = { MPI_FLOAT, MPI_CHAR };
MPI_Datatype tmp_type, my_mpi_type;
MPI_Aint lb, extent;

MPI_Type_create_struct( count, array_of_blocklengths, array_of_displacements,
                        array_of_types, &tmp_type );
MPI_Type_get_extent( tmp_type, &lb, &extent );
MPI_Type_create_resized( tmp_type, lb, extent, &my_mpi_type );
MPI_Type_commit( &my_mpi_type );
你可以帮忙吗?

提前谢谢!

2 个答案:

答案 0 :(得分:0)

你的代码printList(curr);实际上打印了curr所指向的位置,并打印了它之后的所有下一个元素,但curr本身并未指向列表的头部。并且printList(first);已经打印了排序列表。

答案 1 :(得分:0)

您要查找的输出有点不清楚。除了printf语句之外,对printList的最后两次调用(first)和(curr)之间没有任何内容。如果您打算在打印curr时不打算只有2行,那么您需要curr指向感兴趣的起始节点。或者如在另一个答案中所提到的,你可以将它们都设置为first并且出于某种原因而逃避我的情况,连续两次打印列表类似于:

                China   47803801   52828124   100631925
                India   38383177   51078616    89461793
                  USA   12008749   12423185    24431934
              Vietnam    4827551    5111768     9939319
                Yemen     466693     988523     1455216
               Zambia     183200     225771      408971
new
                China   47803801   52828124   100631925
                India   38383177   51078616    89461793
                  USA   12008749   12423185    24431934
              Vietnam    4827551    5111768     9939319
                Yemen     466693     988523     1455216
               Zambia     183200     225771      408971

您的阅读循环存在问题,迟早会让您感到困惑。您需要查看Why is “while ( !feof (file) )” always wrong?通过快速更改,您可以轻松地使用for循环进行阅读,例如for(;;) {然后简单地在你到达数据末尾时中断:

for (;;) {

    person_count *newNode = calloc(1, sizeof(person_count));
    if (fscanf(infile, "%s %ld %ld", newNode->country, 
        &newNode->females, &newNode->males) != 3)
        break;

    newNode->link = NULL;
    ...

请在printList (first)之后提供有关您希望打印的内容的其他说明,并且我们乐意为您提供进一步的帮助。