我正在创建一个学生列表(链表),可以添加,查看和编辑学生信息。我有两个字段,即学生姓名和学生成绩,我在列表中添加新学生,按照学生的成绩按降序排序。
我已完成添加和查看部分。问题在于编辑部分,因为我需要编辑信息,然后我需要再次对其进行排序,以便它位于列表的正确位置。
例如,我根据成绩排列了3个学生信息:
student1 90 -> student2 85 -> student3 80 -> NULL
然后我需要将student2的成绩编辑为75,因此编辑后的链表现在应按如下方式排列:
student1 90 -> student3 80 -> student2 75 -> NULL
我该怎么做?你不需要给我任何代码。我只是想知道如何实现我的程序的编辑部分。我正在考虑创建一个新节点(使用已编辑的信息),删除旧节点并将编辑后的节点插入列表中。我的逻辑是否正确?还是有更好的方法来解决我的问题。
答案 0 :(得分:3)
您可以通过
完成目标答案 1 :(得分:3)
单链表?
找到要编辑的节点,并保留指向上一个节点的指针或编写例程以检索上一个节点。
从链接列表中删除您的节点(通过在nextOne-> gt旁边设置previous_node->)
进行修改。
将新节点插入列表中的正确位置(通过遍历列表,下一个节点小于您编辑的值。
拼接编辑到列表中(editedNode-> next = nextNode; current-> next = editedNode)
使用双向链接列表,您只需使用“其他”/后退/上行链接即可找到上一个节点
答案 2 :(得分:2)
基本上你的想法是正确的,除了我不会创建一个新节点。我会做的是:
请注意,将列表索引到数组等可能会比线性遍历更快地进行搜索。如果您已经有这样的机制,那么在找到重新插入节点的位置时可能会更快地使用它。
答案 3 :(得分:1)
您可以执行编辑指定节点的功能。扫描列表,直到找到该节点,然后直接编辑它。当然你会使用指针。对于排序部分,假设您有n个节点,将每个节点i与其后的节点进行比较,如果您要比较的节点更大,则交换它们:
for every node n1 in list
for every remaining node n2 in list
if n2->grade > n1->grade
swap 'em
你可以交换他们复制他们的内存,所以你不需要改变任何指针。