C语言链表删除节点函数与结构体应用

需积分: 0 1 下载量 191 浏览量 更新于2024-08-20 收藏 1.74MB PPT 举报
在C语言中,删除链表结点的函数`del`主要用于操作含有结构体的学生链表。这个函数的原型是`struct student *del(struct student *head, long num)`,其中`head`是一个指向链表头结点的指针,`num`是要删除的学生学号。函数的主要逻辑是遍历链表,查找与给定学号`num`匹配的节点。 首先,函数检查`head`是否为空,如果为空则输出"list null!"并跳转到`end`标记。接着,使用两个指针`p1`和`p2`,初始化`p1`为`head`,然后在循环中,当`num`不等于当前节点的`num`且`p1`未到达链表末尾时,更新`p1`指向下一个节点,`p2`记录当前节点。 当找到目标节点(即`num`等于`p1`的`num`)时,根据位置执行不同的操作:如果目标是头结点,则直接更新`head`为下一个节点;否则,将前一个节点的`next`指针指向目标节点的下一个节点。完成删除后,打印删除的学号,并更新链表长度`n`。 如果在整个链表中没有找到对应的学号,函数会输出提示信息"%ld not been found!"。最后,函数返回链表的头结点`head`,并在循环结束后到达`end`标签结束函数。 在这个过程中,涉及到了C语言中的结构体`struct student`,它包含了学生的学号(int类型)、姓名(char数组)、性别(char)、年龄(int)、成绩(float)以及地址(char数组)。通过定义结构体类型,我们可以创建结构体变量,如`student1`和`student2`,并为其分配内存空间。这些变量的定义和使用展示了如何在C语言中处理复杂的数据结构,包括定义结构体类型、声明结构体变量以及通过指针操作链表。 此外,函数`del`的实现还体现了C语言中指针的关键作用,特别是链表操作,通过指针可以直接访问和修改链表中的元素,提高代码的灵活性和效率。同时,它也强调了内存管理的重要性,即为结构体变量分配内存以及正确处理指针间的引用关系。