c语言链表怎么通过节点数据查找节点进行插入或更改;

#include<stdio.h>#include<stdlib.h>#include<string.h>structnode{charname[20];node*nex... #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
char name[20];
node *next;
};
void main()
{
node *pt = NULL;
while (true)
{
char newname[20];
printf("请输入学生姓名:如果输入quti则退出,输入insert则插入,若输入print则打印当前结果\n");
scanf("%s", &newname);
if (strcmp(newname, "quit") == 0)
{
break;
}
else if (strcmp(newname, "print") == 0)
{
node *p = pt;
while (p != NULL)
{
printf("%-5s", p->name);
p = p->next;
}
printf("\n");
}
else
{
node *p = (node *)malloc(sizeof(node));
strcpy(p->name, newname);
p->next = pt;
pt = p;
}
}
}
以上是一条简单的单向链表;但比如输入了,张三,李四,王五三个数据后,我怎么通过遍历查找其中李四的位置,然后在其更改数据,然后,在李四和王五的中间插入一个新节点;
还有另一个问题,这种链表生成后怎么保存,还有存入的数据放哪。
展开
 我来答
已存在这个名字
2019-03-17 · TA获得超过159个赞
知道小有建树答主
回答量:262
采纳率:78%
帮助的人:57.2万
展开全部

说一下一个大概的思路,首先定义两个指针,一个指针用来向前移动(叫当前指针),另一个指针紧跟其后(叫前驱指针),这个主要用于链表的增删,判断是否要删除当前指针指向的节点,或者增加节点。如果需要删除当前节点,则前驱指针的下一个节点指向当前指针的下一个节点,释放当前指针指向的节点,然后当前指针指向前驱指针的下一个节点,增加也是一样的,一直这样遍历整个链表。至于修改节点数据,那么需要一个当前指针就够了,找到要修改的节点,修改就好了。

闲着没事干,刚写了代码,给你参考一下:


// 删除节点
void delete_node_credit(float const credit) {

stu *pre_node = head;
stu *cur_node = head->next;

while ( cur_node ) {

if ( cur_node->credit == credit ) {

pre_node->next = cur_node->next;
free(cur_node);
cur_node = pre_node->next;
} else {

pre_node = cur_node;
cur_node = cur_node->next;
}
}
// 判断是否删除头节点
if ( head->credit == credit ) {

cur_node = head->next;
free(head);
head = cur_node;
}
}
// 新增节点
void insert_node_credit(stu *new_node, float const credit) {

stu *pre_node = head;
stu *cur_node = head->next;

if ( pre_node->credit > credit ) { // 新增节点是头节点

head = new_node;
new_node->next = pre_node;
return;
}
while ( cur_node ) {

if (cur_node->credit < credit && pre_node->credit > credit ) {

pre_node->next = new_node;  // 插入新的节点
new_node->next = cur_node;
return;
}
pre_node = cur_node;
cur_node = cur_node->next;
}
// 新增节点插入链表尾部
if ( pre_node->credit < credit ) {

pre_node->next = new_node;
return;
}
}

下面是运行结果

如果你看理解了这个思路,那么链表的增删查改操作就没有问题了。有用的话点一下采纳,谢谢!!!

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式