《C语言程序设计 教案6-4 利用链表处理一组数据(2课时).docx》由会员分享,可在线阅读,更多相关《C语言程序设计 教案6-4 利用链表处理一组数据(2课时).docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计教学设计 日期:年月日教学内容利用链表处理一组数据教学学时2授课教师班级地点周次星期节次教学 目标素质目标知识目标能力目标(1)基本职业素养:遵守工作时间, 使用实践设备时注意用电安全,实践设 备使用完毕后要断电并放于指定位置, 程序设计要注重工程规范,养成良好的 工作习惯。(2)团结协作素养:小组内成员互查 程序代码书写规范性、准确性和完整性, 取长补短,具有责任意识、团队意识与 协作精神。(3)自主学习素养:能根据任务要求, 查找相关资料解决实际问题;能自主完 成练习,培养自主学习的意识与一丝不 苟、实事求是的工作作风。(4)思政和劳动素养:具有一定的辩 证唯物主义运用能力、
2、安全意识、劳动 意识、创新意识、创新能力和强烈的爱 国主义精神。(1)理解数组操 作的优缺点,熟悉链 表的结构及表示方 法(2)掌握链表的 建立、输出、查找、 插入和删除等基本 操作方法(1)能用结 构体类型描述 节点的结构(2)能根据 实际需要建立 链表和对链表 进行操作教学重点(1)链表的结构及表示(2)链表建立、输出、查找、插入和删除操作方法教学难点(1)链表节点的结构体类型描述(2)链表的基本操作程序设计能力训练 任务任务1:熟悉链表的结构及表示方法任务2:掌握链表的建立、输出、查找、插入和删除等基本操作方法教学材料(1)教材:朱琨C语言程序设计,机械工业出版社,978-7-111-6
3、6954-8, 2021(2)教学资源:电子教案、教学课件、微课视频、在线开放课程(3)仪器与设备:电脑(装有VC+开发环境)教学进度设计步骤教学内容及目标思政元素教师活动学生活动时间.一、复习与 导入复习:引导学生总结数组的优缺点。 优点:可非常方便地通过下标随机 访问其中的任何一个元素。缺点:1) 对数组元素的插入或删除操作不方 便,效率较低。2)当待处理的数据 个数不确定时,很难确定合适的数 组长度。导入:链表作为一种新的数据结构, 可以弥补数组存在的以上缺陷。链 表在高级嵌入式软件设计中应用非 常广泛,很有必要学习。辩证分析 和看待问 题,善于发 现问题提问、导入新 课、布置学习任 务
4、总结、回答、 明确学习任务5m i n二、实施任 务1:熟悉 链表的结 构及表示 方法1、链表的结构(1)头指针:指1可链表头部(2)节点:数据域和指针域2、链表的简单图示:不关心每个节 点实际的存储地址3、设计结构体类型描述节点的结构抓主要问 题、活学活 用讲解,引导学生 抓住链表的主 要问题、利用已 学的结构体和 tyepdef掌握链 表节点的结构 体描述方法听讲,理解, 根据简单节点 的结构体写出 复杂节点的结 构体15mi n三、实施任 务2:熟悉 链表的建 立、输出、 查找、插入 和删除等 基本操作 方法1、尾插法建立链表的过程分析及程 序设计2、输出链表中各节点数据的过程分 析及程
5、序设计学以致用讲解,引导学生 根据操作过程 示意图理解相 应的程序代码、 建立并输出一 个字符型链表听讲,根据操 作过程示意图 理解程序代 码,编程建立 并输出一个字 符型链表35m i n3、根据链表的结构思考按序号查找 的过程及程序设计4、根据链表的结构思考插入节点数 据的过程及程序设计5、对比链表的插入操作,根据链表 的结构思考删除节点数据的过程及 程序设计30m i n四、总结概括基本内容,归纳重点内容自主学习引导学生归纳 总结,然后布置 课后任务思考,记录, 整理场地5m i n作业通过教材、PPT和在线课程,复习巩固本次课内容;完成教材相应习题(可穿插到上述任务 中);自行完成链表
6、操作综合应用例题程序分析、编写与运行。课后 体会1 .首先通过分析数组处理数据的优缺点分析(辩证分析和看待问题),明确为何需要学习链 表O2 .链表及其操作比较抽象,要引导学生善于通过图示法理解和编程。利用链表处理一组数据教学详案步骤一:复习与导入(时间:5分钟)复习:引导学生总结数组的优缺点。优点:可非常方便地通过下标随机访问其中的任何 一个元素。缺点:1)对数组元素的插入或删除操作不方便,效率较低。2)当待处理的数据 个数不确定时,很难确定合适的数组长度。导入:链表作为一种新的数据结构,可以弥补数组存在的以上缺陷。链表在高级嵌入式 软件设计中应用非常广泛,很有必要学习。步骤二:任务1:熟悉
7、链表的结构及表示方法(时间:15分钟)1、链表的结构一个链表由头指针(head)和若干个节点组成。每个节点由数据域(存放本节点的实际 数据)和指针域(存放下一个节点的地址)两部分组成。head地址1200 地址1345 地址1156 地址1368头指针用于存放第1个节点的地址,指向第1个节点,因此可通过头指针找到第1个节 点,然后再通过第1个节点找到第2个节点,依次类推,直到找到最后一个节点(其指针域 为空,不指向任何节点)。2、链表的简单图示若不关心每个节点的实际地址,而只注重各节点的逻辑关系,则可简化为:head 数据A数据B数据C数据DAtypedef char DataType; ty
8、pedef struct Node (DataType data;struct Node *next;L_Node;3、设计结构体类型描述节点的结构可以设计一个结构体类型来描述节点的结构:节点的数据域类型为DataType,这里是char型声明结构体类型节点的数据域(存放本节点的实际数据)节点的指针域(存放下一个节点的地址)步骤三:任务2:熟悉链表的建立、输出、查找、插入和删除等基本操作方法(时 间:65分钟)为了便于操作,常在链表中增加一个头节点(不存放数据)。带头节点的单向链表包括 1个头节点(。号节点)和3个数据节点(13号节点)。1、尾插法建立链表的过程分析及程序设计建立链表:从无到有
9、,一个一个地开辟节点和输入各节点的数据,并建立起前后相链 接的关系。“尾插法”建立单向链表的过程(见PPT动画),其特点:头节点的指针域始终指向第1个数据节点,新增节点链接到原链表的尾部。插入字符c的详细过程分析(见PPT动画)【总结】需要设定3个指针:头指针head、尾节点指针e、新增节点指针p 【实现代码】L_Node * CreatList_2()char ch:L Node *head: *p. *e;char ch:L Node *head: *p. *e;定义字符变量定义链表节点型的指针变量建立新节点p-data=ch: e-next=p;e=p;e-next=NULL;rutur
10、n (head);将尾节点的指针域置空 返回链表的头指针head=(L_Node ) malloc(sizeof(L_Node); / 建立头节点/ e开始时指向头节点,以后指向尾节点printff请输入链表中各节点的数据(字符,以#结束):”); while(ch=getchar( )!= *#*)( 从键盘输入字符,开辟一个个节点,当输入#B寸,结束p=(L_Node ) malloc(sizeof(L_Node):给新节点的数据域赋值新节点插入链表尾部更新尾节点,使尾节点指针指向新节点2、输出链表中各节点数据的过程分析及程序设计 建立链表后,可将链表中各节点的数据依次输出。head 函数
11、参数:链表的头指针headvoid OutputList(L_Node *head)L_Node *p; p=head-next; while(p!=NULL)L_Node *p; p=head-next; while(p!=NULL)/定义链表节点型指针变量从第1个节点开始输出判断p是否指向空printfC%cp-data); 将节点的数据输出p=p-next;/p指向下一个节点printf(M nM);3、根据链表的结构思考按序号查找的过程及程序设计从链表的第1个节点开始,逐个节点进行搜索,直到搜索到指定节点值为止。在搜索过 程中,如果找到指定节点,则返回指定节点的地址;当扫描到最后一个节
12、点,仍找不到指定 节点值时,则返回NULL。下图所示的链表,包含1个头节点(0号节点)和4个数据节点(1号4号节点)。PL函数参数:链表的头指针head、待查找节点的序号i函数返回:查找成功,返回待查找节点的地址;否则,返回NULLL_Node FindNode_l( L_Node *head. int i) (LNode *p=head;从头节点开始扫描intj=O:/j记录已扫描的数据节点个数vhile(p-next!=NULL&jnext:移动到下一个节点jH;扫描计数器加1if(j=i) return (p);节点被找到,返回节点的地址else retxini (NULL); 节点未找
13、到,返回NULL4、根据链表的结构思考插入节点数据的过程及程序设计在第3个位置(第2个位置后)上插入给定节点值x的运算过程(见PPT动画)。函数参数:链表的头指针head、括位量i、待指节点的隹x 函数返回:指成功,返回1;否则返回0int ListInsert(L_Node *head. inti. DataType x)L-Node *p;/ p用于指向待插位置的前一个节点L Node *s;s用于指向待插节点p=FindNodjl(head,il); 调用节点查找函数,查找第il个节点if(p=NULL)return (0);查找失败,返回0s=(L_Node *)malloc(size
14、of(L_Node); /建立新节点s-data=x:s-next=p-next;p-next=s;return (1);s-data=x:s-next=p-next;p-next=s;return (1);将待插数据放入新节点的数据域将待插节点链接其后继节点/将待插节点链接其前趋节点插入成功,返回15、对比链表的插入操作,根据链表的结构思考删除节点数据的过程及程序设计 删除第2个节点(第1个位置后)的运算过程(见PPT动画)。函数参数:链表的头指针head、待删除节点的位二i 函数返回:删除成功,返回1;否则返回0 int ListDelete(L_Node *head, int i)L_N
15、ode *p;/p用于指向待删除节点位置的前一个节点L Node *s;/s用于指向待删除的节点 p=FiiidNode_l(head,i-1); 调用节点查找函数,查找第il个节点iRp XULL|p-next=NULL) 未找到第i-1个节点或第i个节点不存在return (0); s=p-next;p-next=s-next;fiee(s);return (1);删除失败,返回0/s指向待删除节点将待删除节点的前趋节点和后继节点相链接释放删除节点的空间删除成功,返回1【学习检验】教材第7章练习:17题。【课后学以致用】链表操作综合应用;教材第7章练习25、26题。步骤四:概括基本内容,归纳重点内容(时间:5分钟)1、引导学生概括本次课的基本内容,归纳重点内容(为什么要学习链表、链表的概念、 链表的图示方法、链表节点的设计方法、链表的基本操作方法)。2、作业布置:通过教材、PPT和在线课程,复习巩固本次课内容;完成教材相应习题, 学以致用;自行完成链表操作综合应用例题程序分析、编写与运行。