我正在创建一个学生列表(链表),可以添加,查看和编辑学生信息。 我有两个字段,即学生姓名和学生成绩,我在列表中添加新学生,按照学生的成绩按降序排序。
我已经完成了添加和查看部分。 问题出现在编辑部分,因为我需要编辑信息,然后我需要再次对它进行排序,以便它位于列表的正确位置。
例如,我根据他们的成绩安排了3个学生信息:
student1 90 -> student2 85 -> student3 80 -> NULL
然后我需要将student2的成绩编辑为75,因此编辑的链接列表现在应该按如下方式排列:
student1 90 -> student3 80 -> student2 75 -> NULL
我该怎么做? 你不需要给我任何代码。 我只是想了解如何实现程序的编辑部分。 我正在考虑创建一个新节点(使用已编辑的信息),删除旧节点并将编辑后的节点插入列表中。 我的逻辑是否正确? 或者有更好的方法来解决我的问题。
基本上你的想法是正确的,除了我不会创建一个新的节点。 我会做的是:
请注意,将列表索引到数组等可能会提供比线性遍历更快的搜索。 如果您已经有这样的机制,则在找到重新插入节点的位置时可能会更快地使用它。
你可以通过实现目标
单链表?
找到要编辑的节点,并保留指向上一个节点的指针或编写例程以检索上一个节点。
从链表中删除节点(通过设置previous_node-> thisOne-> next旁边)
进行编辑。
将新节点插入列表中的正确位置(通过遍历列表,下一个节点小于编辑值。
拼接编辑到列表中(editedNode-> next = nextNode; current-> next = editedNode)
使用双向链表,您只需使用“其他”/后退/上行链接即可找到上一个节点
您可以执行编辑指定节点的function。 扫描列表,直到找到该节点,然后直接编辑它。 当然你会使用指针。 对于排序部分,假设您有n个节点,将每个节点i与其后的节点进行比较,如果您要比较的节点更大,则交换它们:
for every node n1 in list for every remaining node n2 in list if n2->grade > n1->grade swap 'em
你可以交换他们复制他们的内存,所以你不需要改变任何指针。
以上就是c/c++开发分享编辑链接列表中的节点相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/544612.html