C语言学生管理系统(准备工作4)(链表的三种删除)
2020-03-04 23:44
357 查看
其实在学生管理系统里是用不到头尾删除的,但我想既然写了链表,就干脆写的完整一些吧,话不多说,正式开始。
头删除
通过删除第一个节点的方法删除链表。
因为节点是动态分配的,所以删除时需用到free();
并且不能直接free掉一个节点(否则链表会断掉),得通过记录一个临时节点,先处理好要删除节点两边节点的关系后,再删除。
逻辑很好理解,我还是画个图吧:
需要做的就是让头节点的下一个指向头节点下一个的下一个,然后释放第一个节点,具体如下(有需要考虑的特殊情况):
void DeleteListHead() { if (Head->next == NULL) //如果链表里没有节点,提示链表为空 { printf("链表为空!\n"); return; } struct Node* Temp = Head->next; //记录第一个节点 Head->next = Head->next->next; //改变头节点指向 free(Temp); //释放 }
尾删除
清楚了头删除,尾删除就很容易了:
和头删除不同的是,尾删除直接删除尾节点(因为它装有数据),所以让尾节点前的节点成为新的尾节点,然后释放即可,注意别忘了将新尾节点的指针赋空:
void DeleteListTail() { if (Head->next == NULL) //仍然需要判断链表是否为空 { printf("链表为空!\n"); return; } if (Head->next == End) //如果当前尾节点是最后一个节点的话 { free(End); Head->next = NULL; End = Head; } else //其余为正常情况 { struct Node* Temp = Head->next; while (Temp != NULL) { if (Temp->next == End) //找到尾节点的前一个节点 { break; } Temp = Temp->next; } free(End); //直接释放尾节点 End = Temp; //新的尾节点 End->next = NULL; //指针赋空 } }
指定删除
直接上图吧:
仍然需要找到节点的前一个节点,改变指针指向后释放:
void DelectPoint(int a) //通过传递进来的参数寻找指定节点 { struct Student* pTemp = ScelectNode(a); //寻找指定节点 if (pTemp == NULL) //没找到 { printf("查无此节点\n"); return; } //找到了 struct Student* pHead = Head; while (pHead->pNext != NULL) //寻找前一个节点 { if (pHead->pNext->data==a) break; pHead = pHead->pNext; } if (pTemp == End) //如果是尾节点的话,要用尾删除 { End = pHead; free(pTemp); End->pNext = NULL; } else //其余情况,改变指向后删除 { pHead->pNext = pTemp->pNext; free(pTemp); } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- c语言使用链表编写一个可以实现班级学生管理系统,增加,删除,修改学生信息
- C语言简单用链表实现学生管理系统
- 基于链表的学生信息管理系统和基于MySQL的学生信息管理系统 -C语言
- C语言学生信息管理系统(单链表)
- C语言学生信息管理系统 (单链表版)【无图,未调试】
- C语言链表实现简单的学生信息管理系统
- C语言单链表版学生信息管理系统
- C语言用链表做的学生管理系统
- C语言的指针、链表的原理及学生管理系统
- 学生成绩管理系统—C语言链表表实现 数据库的数据项主要数据包括:学号、姓名、年级、专业、成绩1、成绩2、成绩3、平均成绩、总成绩。
- C语言使用单链表的学生成绩管理系统
- c语言学生信息管理系统(基于文件、链表)
- 就C语言的指针、链表的原理和各类操作撰写一篇技术博客,说说自己学习C语言指针和链表的体会,并将学生信息管理系统进行修改,使能完成其他的功能,并撰写体会,附加源代码。
- c语言基于链表的学生信息管理系统(源代码)
- c语言学生信息管理系统(链表、文件)
- <C语言>使用一个二维数组实现学生姓名管理系统,要求不能使用链表
- c语言制作的学生成绩管理系统 加链表
- C语言基于单链表得学生成绩管理系统
- 学生成绩管理系统课程设计(C语言,链表实现)
- C语言链表做的学生管理系统,但是运行不出来