void InsertList(LinkList L,int i)//插入表的信息 { if(L==NULL) { printf("链表为空!\n"); return; } LinkNode *p,*q,*s; int j=1; p=L; if(i<1||i>Listlength(L)+1)//要插入的位置是否满足能够插入的空间内,因为要插入一个数据,所以最后的长度肯定会比当前表的长度加一 { printf("插入位置不正确!"); return; } s=(LinkNode *)malloc(sizeof(LinkNode)); printf("\n学号 姓名 班级 性别 成绩:\n"); scanf("%s%s%s%s%f",&s->data.num,&s->data.name,&s->data.clas,&s->data.sex,&s->data.score); while(j<=i) { q=p; p=p->next; j++; }//找到插入的位置 s->next=p; q->next=s; printf("成功插入新的学生信息"); }
时间: 2024-03-15 08:42:36 浏览: 59
数据结构链表的插入与删除C语言的实现
5星 · 资源好评率100%
这段代码实现了链表的插入操作,将一个新节点插入到链表中的指定位置。其中,LinkList 是一个链表类型的结构体,包含了指向链表头节点的指针;LinkNode 是链表中的节点类型的结构体,包含了数据域和指向下一个节点的指针。
具体实现过程如下:
1. 判断链表是否为空,如果为空则无法插入,直接返回。
2. 定义三个指针变量:p、q、s,其中 p 指向链表头节点,q 指向插入位置前一个节点,s 为新节点。
3. 判断插入位置是否合法,即 i 是否在 [1, Listlength(L)+1] 的范围内,如果不是则输出错误信息并返回。
4. 输入新节点的数据,将其存储到 s 的数据域中。
5. 遍历链表,找到要插入的位置,即第 i 个节点的前一个节点,将其保存到 q 中。
6. 将新节点 s 的 next 指针指向第 i 个节点,将 q 的 next 指针指向新节点 s,完成插入操作。
7. 输出成功插入的提示信息。
需要注意的是,该函数没有返回值,因为链表是通过指针传递的,直接修改链表即可。同时,该函数也没有进行内存分配的检查,如果内存不足可能会导致程序崩溃。
阅读全文