1、,首页,同学们加油,教案,主要内容,单链表中结点插入算法实现单链表中结点插入举例单链表中结点删除算法实现单链表中结点删除举例,链表结点的插入,在链表中插入结点有很多情况。下面以带附加头结点的单链表为例进行介绍。,单链表结点的插入(1),在指定结点的后面插入新结点插入过程图示(在p结点后面插入新结点q):,实现语句: q-next = p-next; p-next = q;,单链表结点的插入(2),在指定结点的前面插入新结点在p结点前面插入新结点q的步骤:(1)寻找p结点的前驱结点,使s指向它。(2)在s结点的后面插入q结点。实现语句:s=head;while (s-next!=p)s=s-ne
2、xt;q-next = s-next;s-next = q;,单链表结点的插入(3),在值为x的结点后插入一个值为y的结点步骤:(1)申请一个结点空间,用q指向它,并把y放入其中。(2)在链表中查找值为x的结点,找到后用p指向它。(3)在p结点后插入q结点。实现语句:,看源程序(8_1),单链表结点的插入(4),在值为x的结点前插入一个值为y的结点步骤:(1)申请一个结点空间,用q指向它,并把y放入其中。(2)在链表中查找值为x的结点,找到后用p指向它,pf指向它的前驱结点。(3)在pf结点后插入q结点。实现语句(两种方法):,看源程序(8_2),看源程序(8_3),返回,单链表结点插入举例,
3、【补例】将【例7-5】改成用菜单选择实现,并在此基础上增加插入功能。分析 插入时,按照以下几种情况进行: (1)插入到链首。 (2)插入到链尾。 (3)插入到指定值的后面。 (4)插入到指定值的前面。,主函数模块,【补例】将【例7-5】改成用菜单选择实现,并在此基础上增加插入功能。主函数流程图源程序,运行程序(8_4),看源程序(8_4),插入子模块,【补例】将【例7-5】改成用菜单选择实现,并在此基础上增加插入功能。插入子函数流程图源程序,运行程序(8_4),看源程序(8_4),返回,思考:不用附加头结点,任何修改?(8_6),链表结点的删除,在链表中删除结点也有很多情况。下面以带附加头结点
4、的单链表为例进行介绍。,单链表结点的删除(1),删除指定结点删除过程图示(删除q结点的后继结点p):,实现语句: q-next = p-next; free(p);,单链表结点的删除(2),删除值为x的结点步骤:(1)在链表中查找值为x的结点,找到后用p指向它,q指向它的前驱结点。(2)使p结点脱离链表。(3)释放p结点的内存空间。实现语句:,看源程序(8_5),返回,单链表结点删除举例,【补例】在【例7-5】的基础上增加删除功能。分析 删除时,按照以下几种情况进行: (1)删除链首结点。 (2)删除链尾结点。 (3)删除指定值的结点。,删除子模块,【补例】在【例7-5】的基础上增加删除功能。删除子函数流程图源程序,运行程序(8_4),看源程序(8_4),思考:不用附加头结点,任何修改?(8_6),任务相关部分,任务程序中的功能“添加一个学生”和“删除一个学生”,实际上就是在链表中插入和删除结点的过程。,本次课总结,单链表中结点插入算法实现单链表中结点插入举例单链表中结点删除算法实现单链表中结点删除举例,下课,Thank You!,The End.,