【问题标题】:Using Insertion Sort on Doubly-Linked-Lists and Writing to File在双向链表上使用插入排序并写入文件
【发布时间】:2015-01-29 04:09:59
【问题描述】:

我正在研究一个双链表,它将从文件(in.txt)中读取输入,将信息存储在双链表中,使用插入排序对链表中的所有节点进行排序,然后打印出来将排序列表添加到将要创建的名为 out.txt 的文件中

输入文件格式为:

StudentID Firstname Lastname Department GPA(带有任意数量的空格)

输出文件格式为:

StudentID,Firstname,Lastname,Department,GPA(仅用逗号分隔元素)

StudentID 是 7 位整数,GPA 是 0 到 4 之间的浮点数,其余为字符串。排序仅针对 StudentID 号进行,没有两个 StudentID 号相同。

我几乎可以使用this 代码:

问题是输出文件什么也没显示。我相信问题出在我的 remove_node 函数中,但我不确定。任何帮助将不胜感激。

【问题讨论】:

  • 我用问题中的两个输入检查了您的代码,效果很好。
  • 由于某种原因我没有得到它。我得到一个空白的输出文件。还有其他人吗?

标签: c doubly-linked-list insertion-sort


【解决方案1】:

您的插入排序中有一个“remove_node”。排序不应删除任何节点。

【讨论】:

  • 我只是暂时将其移除,以便可以将其放回原处。我正在尝试进行插入排序。
  • 但是你应该有一个“add_node”来“把它放回去”而你没有。
  • 但我愿意。我将其从列表中删除,并保留对它的引用作为节点。然后我把它放在 while 循环中临时指针停止的位置附近。
【解决方案2】:
void DLList_free(List * list){
Node * node;
Node * holder;

/* see the for loop statement */
for(node = list->first; node != NULL;) 
{
    holder = node->next;
    free(node->Dept);
    free(node->Lname);
    free(node->Fname);
    free(node);
    node = holder;
}

}

【讨论】:

  • 这似乎是有道理的,因为我会对 node=holder 做同样的事情,然后是“node = node->next”。这是您看到的唯一问题吗?
猜你喜欢
  • 2018-11-04
  • 1970-01-01
  • 2022-11-16
  • 2018-12-25
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多