数据结构与算法教案.docx
《数据结构与算法教案.docx》由会员分享,可在线阅读,更多相关《数据结构与算法教案.docx(109页珍藏版)》请在冰豆网上搜索。
![数据结构与算法教案.docx](https://file1.bdocx.com/fileroot1/2023-6/26/2fbe4175-64fa-490f-b8e3-0f4d913912d9/2fbe4175-64fa-490f-b8e3-0f4d913912d91.gif)
数据结构与算法教案
重庆正大软件职业技术学院
教 案
2009年-2010学年第二学期
课程名称 数据结构和算法
任课教师杨勇
授课对象
系别
软件技术系
本次课学时
2学时
年级班次
章节题目
第一章数据结构和算法概述
目的要求(含技能要求)
了解数据结构的相关概念和掌握、算法的基本概念和性质、算法的性能分析和评价
本节重点
数据结构基本概念、算法基本概念、算法特性以及算法分析
本节难点
算法的时间复杂度分析
教学方法
讲解+案例教学
教学用具
多媒体教室、机房
问题引入
从学生所了解的生活常识,引出数据结构的不同类型。
如从学生信息检索系统数据库中,学生信息表引出线性结构;人机对弈引出树形结构;教学计划安排问题引出图形结构。
难点与重点讲解方法
采用讲解+案例教学,讲述数据结构的基本概念以及相关的术语,算法的含义特征以及算法的分析评价方法。
本次课小节
课程小节
1、数据结构定义、相关术语
2、算法的定义、要素、性质
3、算法及其复杂度分析
教后札记
1、什么是数据结构
2、什么是算法
3、算法复杂度评定方法
讨论、思考题、作业(含实训作业)
见后:
第一章数据结构和算法概述
【学习目标】
1.能力目标:
(1)初步掌握数据结构和算法的基本概念和应用能力
(2)算法时间复杂度分析的能力
2.知识目标:
(1)数据结构的概念和用语;
(2)算法的定义,算法性质、地位和特征;
(3)算法分析与评价;
3.职业素质目标:
★算法时间复杂度分析逻辑思维能力
★算法时间复杂度独立思考应用能力
【课前准备】
1.环境要求:
PC电脑 VisualStudio2005、SQLServer2000、MyEclipse
2.学生要求:
具备SQLServer数据库理论知识和操作能力。
具备面向对象程序设计C/S结构开发能力
3.教师要求:
能够进行三层结构的C/S项目开发能力。
能够正确分析算法时间复杂度的能力。
具备一定的数据库设计和分析能力。
能够正确、及时处理学生操作过程中出现的问题及错误。
【主要内容】
1.了解数据结构的相关概念和术语
数据:
计算机操作对象的总称,它是计算机处理的符号的集合,集合中的个体为一个数据元素。
数据结构:
是由若干特性相同的数据元素构成的集合,且在集合上存在一种或多种关系。
由关系不同可将数据结构分为四类:
线性结构、树形结构、图状结构和集合结构。
逻辑结构:
数据元素和数据元素之间的逻辑关系称为数据的逻辑结构。
存储结构:
数据在计算机中的存储表示称为数据的存储结构。
数据处理:
数据处理是指对数据进行查找、插入、删除、合并、排序、统计以及简单计算等的操作过程。
数据类型:
数据类型是指程序设计语言中各变量可取的数据种类。
数据类型是高级程序设计语言中的一个基本概念,它和数据结构的概念密切相关。
2.了解算法的概念、性质、地位和特性
算法:
进行程序设计的另一不可缺少的要素。
算法是对问题求解的一种描述,是为解决一个或一类问题给出的一种确定规则的描述。
一个完整的算法应该具有下列五个要素:
有穷性、确定性、可行性、有输入和有输出。
一个正确的算法应对苛刻且带有刁难性的输入数据也能得出正确的结果,并且对不正确的输入也能作出正确的反映。
3.能够对简单的算法进行时间复杂度的分析。
评价一个算法的好坏,通常用时间复杂度和空间复杂度进行评价。
算法的时间复杂度:
比较不同算法效率的一种准则,算法时间复杂度的估算基于算法中基本操作的重复执行次数,或处于最深层循环内的语句的频度。
算法的时间复杂度:
比较不同算法效率的一种准则,算法时间复杂度的估算基于算法中基本操作的重复执行次数,或处于最深层循环内的语句的频度。
算法空间复杂度:
可作为算法所需存储量的一种量度,它主要取决于算法的输入量和辅助变量所占空间,若算法的输入仅取决于问题本身而和算法无关,则算法空间复杂度的估算只需考察算法中所用辅助变量所占空间,若算法的空间复杂度为常量级,则称该算法为原地工作的算法。
【学习方法】
自主学习、教师讲解、课后习题练习
【教学方法】
多媒体教学讲解+案例教学
【教学实施】
1.本门课程的总体安排和学习的要求:
(10分钟)
2.数据结构的概念和术语的讲解:
(20分钟)
3.算法的概念、要素和特征:
(15分钟)
4.算法的分析和评价(包括:
案例分析):
(40分钟)
5.本章小结和习题安排:
(5分钟)。
【习题要求】
1、学生独立完成,不允许抄袭。
对抄袭者记0分或倒扣分处罚。
2、严格按照考核内容进行评判。
3、本次作业的成绩,记录学生期末总成绩的2%
【实验要求】
本章无上机实验
授课对象
系别
软件技术系
本次课学时
4学时
年级班次
章节题目
第二章学生信息管理系统设计
目的要求(含技能要求)
了解三层结构进行系统设计和开发的思想,并进行通用模块层类的封装和实现。
算法的基本概念和性质
算法的性能分析和评价
本节重点
简易学生信息系统设计、数据库设计、公用模块设计
本节难点
公用模块设计与实现
教学方法
讲解+案例教学+任务驱动法,“教学做”三位一体法
教学用具
多媒体教室、机房
问题引入
从学生所熟悉的简易学生信息管理系统的功能讲解入手,进行本课程教学的引入。
难点与重点讲解方法
采用讲解、案例教学以及模仿训练,讲述公用模块层类封装和开发的要点。
本次课小节
课程小节
1、学生分组、选取项目,以及简要功能设计和数据库设计。
2、公用模块层类的封装和实现。
教后札记
1、初步能应用三层结构开发思想,进行公用模块层类的设计与开发。
2、组建学生项目开发小组,为培养学生团队意识和后面的课程设计奠定基础。
讨论、思考题、作业(含实训作业)
见后
第二章学生信息管理设计
【学习目标】
1.能力目标:
(1)简单数据库设计的能力
(2)通用模块类封装的能力
(3)与数据库连接获取的能力
(4)制作主界面的能力
2.知识目标:
(1)三层结构的思想;
(2)简易学生信息管理系统模块设计;
(3)简易学生信息管理系统数据库设计。
(4)简易学生信息管理系统通用模块层实现。
【课前准备】
1.环境要求:
PC电脑 VisualStudio2005、SQLServer2000、MyEclipse
2.学生要求:
具备SQLServer数据库理论知识和操作能力。
具备面向对象程序设计C/S结构开发能力
3.教师要求:
能够进行三层结构的C/S项目开发能力。
能够正确分析算法时间复杂度的能力。
具备一定的数据库设计和分析能力。
能够正确、及时处理学生操作过程中出现的问题及错误。
【主要内容】
1.系统设计
以简易的学生信息管理系统的开发来讲述数据结构和算法。
重在常用的数据结构和算法的讲解,通过项目实作和可视化界面来展现数据结构和算法的结果。
为了让教师教学和学生自学带来方便,在书中尽量使业务简化,功能简洁,突出数据结构和算法的实践。
本书的功能结构模块图如下:
2.数据库设计
在本书中,主要目标是进行常用的数据结构和算法的学习,为了使教师和学生不陷于复杂的业务处理中,我们只用一张学生信息表student_info来实现。
其表结构设计如下:
字段名称
描述
数据类型
是否主键
备注
St_id
学生id
int
主键
自动增长
St_name
学生姓名
Varchar(20)
St_num
学号
Varchar(20)
St_sex
性别
int
St_age
年龄
int
St_address
家庭地址
Varchaer(100)
St_phone
电话号码
int
St_banji
班级编号
int
St_yw_cj
语文成绩
int
St_sx_cj
数学成绩
int
St_yy_cj
英语成绩
int
St_ty_cj
体育成绩
int
St_zz_cj
政治成绩
int
3.公用模块设计
在本书的后续各个模块功能的实现,采用三层结构的思想来进行开发。
即通用模块层,业务层和表现层。
在本书的第二部分业务层,主要是通过数据结构和算法来讲述学生信息管理系统的业务处理,第三部分表现层,通过调用业务层类的有关方法来展现相关的信息。
在本节讲述通用模块层的实现,包括:
学生信息实体类的实现,数据库访问类的实现、学生信息数据控制类的实现,具体如下:
1)实体类实现
用以实现学生信息对象的封装,主要内容包括:
与数据库学信息表字段对应的属性和构造函数的重载。
2)数据库访问类实现
该类主要用以完成与数据库的访问,包括:
与数据库的连接,从数据库中提取数据放入数据集中,将进行改动的数据集保存到数据库中,以及执行给定标准的SQL语句。
3)学生信息控制类的实现:
该类主要实现的功能如下:
●将数据库中的学生信息通过数据库访问对象的方法调用,放入数据集对象ds中。
●通过数据集对象ds为学生信息数组base_info分配空间,并对每个成员进行初始化,为业务层提供学生信息的准备。
●在业务层发生对学生信息进行改动后,传入新的学生信息数组,调用数据库访问层的方法,将学生信息更新到数据库中去。
【学习方法】
自主学习、教师讲解、课题模仿练习
【教学方法】
媒体教学讲解+案例教学
【教学实施】
1、学生信息管理系统设计和功能介绍:
(10分钟)
2、学生信息管理系统数据库设计介绍(5分钟)
3、学生分组,选定一个简易项目,进行数据库设计(30分钟)
4、学生分组进行数据库实现,每个学生确定一个实体表(20分钟)
5、学生基本信息实体类的讲解。
(5分钟)
6、学生模仿学生基本信息实体类,进行各自所设计的实体类的实现(20分钟)
7、数据库访问类封装讲解(15分钟)
8、学生模仿进行数据库访问层类的封装实现(30分钟)
9、学生基本信息控制类的封装与实现(15分钟)
10、学生模仿实现所设计的实体信息控制类的封装(25分钟)
11、本次课程小结(5分钟)
【习题要求】
本章暂无
【实验要求】
1、学生独立完成实验1的内容,不允许抄袭。
对抄袭者记0分或倒扣分处罚。
2、严格按照考核内容进行评判。
3、本次实验作业的成绩,记录学生期末总成绩的2%
4、实验附加思考题,可以列入本次实验的总成绩中,并记录到学生期末总成绩中。
授课对象
系别
软件技术系
本次课学时
6学时
年级班次
章节题目
第三章学生基本信息管理(顺序表)
目的要求(含技能要求)
掌握线性表、顺序表的概念和性质,利用顺序表的思想进行学生基本信息的管理
本节重点
线性表的概念和性质,顺序表概念和性质,学生信息管理顺序表实现
本节难点
用顺序表的思想进行学生基本信息管理
教学方法
项目教学法,任务驱动法,“教学做”三位一体法
教学用具
多媒体教室+机房
问题引入
从学生基本信息管理功能界面的讲述入手,引入学生信息管理业务实现。
难点与重点讲解方法
以项目为引领,学生基本信息管理为任务驱动,将课堂讲解、案例解学、模仿实作融为一体,进行教学。
本次课小节
课程小节
1、线性表的基本概念和性质
2、顺序表的基本概念和性质
3、利用顺序表的思想进行学生基本信息的增、删、改、查以及保存的功能实现
4、顺序表操作的算法时间复杂度分析
教后札记
1、掌握线性表和顺序表的基本概念和性质。
2、利用顺序表思想进行业务类封装。
3、通过用户界面实现业务类方法调用,显示数据。
初步实现简单三层结构项目开发。
讨论、思考题、作业(含实训作业)
见后
第三章学生基本信息管理(顺序表)
【学习目标】
1.能力目标:
(1)面向对象编程能力。
(2)顺序表思想进行业务封装能力
(3)用顺序表对数据进行增、删、改、查操作的能力
(4)通过界面进行业务类调用实现的能力
2.知识目标:
(1)线性表的概念和性质;
(2)顺序表的概念、性质和操作;
(3)利用顺序表实现学生基本信息增、删、改、查操作;
(4)应用可视化界面实现学生基本信息管理;
3.职业素质目标:
★顺序表操作的逻辑思维能力
★独立进行顺序表操作思考解决问题能力
★分小组进行小模块开发的团队协作能力
★创新能力
【课前准备】
1.环境要求:
PC电脑 VisualStudio2005、SQLServer2000、MyEclipse
2.学生要求:
具备SQLServer数据库理论知识和操作能力。
具备面向对象程序设计C/S结构开发能力。
数据结构和算法的基本概念和性质。
3.教师要求:
能够进行三层结构的C/S项目开发能力。
具备一定的数据库设计和分析能力。
能够正确、及时处理学生操作过程中出现的问题及错误。
具有顺序表的理论知识和编程能力。
【主要内容】
1、线性表的定义和性质
1)线性表(LinearList)含义:
定义:
线性表是具有相同的物理含义,同一数据类型的n(n>=0)个数据元素的有限序列。
理解:
它解决元素之间存在“一对一”的逻辑关系。
通常记为:
其中,
是第一个数据元素,又称为起始结点;
是最后一个数据元素,又称为终端结点;n为数据元素的个数,即线性表的长度,称为表长,当n=0时称为空表。
在线性表中相邻元素之间存在着顺序关系。
对于元素
而言,
称为
的直接前驱,
称为
的直接后继。
2)线性表的特性:
●有且仅有一个开始结点
,它没有直接前驱。
●有且仅有一个终端结点
,它没有直接后继。
●除了开始结点和终端结点外,其余结点都有且仅有一个直接前驱和一个直接后继。
2、顺序表的定义和性质
1)顺序表(SequentialList)的含义:
定义:
在计算机中,按顺序存储结构存储的线性表简称为顺序表。
2)顺序表的特征:
存储单元地址连续(需要一段连续空间)。
逻辑上相邻的数据元素其物理地址也相邻。
随机存储。
存储密度大(100%)
3、学生信息管理业务实现:
学生基本信息管理模块,主要实现学生基本信息的增、删、改、查以及保存的功能。
整个模块的设计和实现的思路如下:
●创建顺序表类,用以实现学生基本信息顺序表的管理。
●创建学生基本信息管理业务类,用以实现学生信息顺序表的增、删、改等的业务处理。
具体的步骤如下:
✓从通用模块层中,获取学生基本信息,并初始化学生基本信息顺序表。
✓在学生信息查询方法中,给定学生的id,找到对应的学生信息并进行返回。
✓在增加学生信息方法中,在学生基本信息顺序表指定位置i,添加学生的信息elem。
✓在删除学生信息方法中,在学生基本信息顺序表中,删除指定位置i的学生信息。
✓在修改学生信息方法中,在学生基本信息顺序表中,修改指定学生id的信息。
✓在保存方法中,实现对学生基本信息顺序表发生增、删、改后的信息保存。
1)学生基本信息顺序表的构建
创建学生基本信息顺序表类,用以实现学生信息数据在顺序表中的增、删、改的操作。
该类的主要成员包括:
Student_info[]Data:
一维无界数组,用以构建学生基本信息顺序表
Length:
用以记录顺序表中,实际的学生信息个数。
2)学生基本信息管理业务类的定义
学生基本信息管理业务类,是通过顺序表的思想,用来实现学生信息的增、删、改的操作。
3)学生基本信息管理业务类的初始化
该方法用以初始化学生基本信息顺序表,具体步骤如下:
●通过学生数据控制层对象StudentManger获取学生的基本信息。
●初始化顺序表的空间大小,以及初始顺序表长度。
●从数据库中提取的学生信息,逐个初始化顺序表的元素。
4)查找学生基本信息查找实现
本方法是指给定学生的学生id号,查找对应学生的基本信息,并返回学生在顺序表中对应对应位置和相关基本信息。
基本思路为:
●对顺序表中每个元素进行循环。
●逐个查找每个学生元素的id与给定学生的id是否相同,若相同则找到返回相关信息,否则继续循环查找。
●如果循环完仍然未找到,返回null。
5)新增学生基本信息业务实现
具体的实现步骤如下:
●获取现有顺序表的长度n,判断插入位置i是否合法,不合法返回false。
●判断i是否超越所定义顺序表的最大值,若越界返回false。
●如是在顺序表末尾插入学生信息,直接将信息插入,顺序表长度自加,返回true。
●将
……
之间的所有结点依次后移,为新元素让出第i个位置。
将新结点elem插入到第i个位置。
表长Length自加,返回true。
6)删除学生基本信息业务实现
删除学生基本信息的步骤如下:
●获取学生基本信息表的长度,判断所要删除结点位置是否合法,不合法,返回false。
●获取所要删除的学生基本信息。
●将第i个学生后面的学生信息
……
之间的结点顺序依次向上移动。
并使表长length自减。
7)修改学生基本信息业务实现
修改学生的基本信息是指:
对特定学生id的基本信息发生修改,在顺序表中作相应的变化,具体的实现步骤如下:
●从学生顺序表中,进行循环,逐个提取学生基本信息中的学生id。
●判断所提取的学生id与所要修改的学生id是否一致。
●如果一致,进行学生信息的修改,并返回true。
●若不一致,继续循环,循环完毕仍未找到,返回false。
8)学生基本信息保存业务实现
学生基本信息的保存是指:
通过界面调用上面的增、删、改等方法,对学生基本信息顺序表的信息发生改变后,将改变后的结果保存到数据库中,在这里直接调用学生数据控制层对象StudentManger的Save_info()方法即可。
【学法】
自主学习、教师讲解、课题模仿练习,课后习题和上机实验
【教学方法】
项目教学+媒体教学讲解+案例教学
【教学实施】
1、学生基本信息管理功能描述(5分钟)
2、线性表的定义和性质:
(5分钟)
3、顺序表的定义和性质(5分钟)
4、学生基本信息顺序表节点类创建实现讲解(5分钟)
5、学生根据所设计的实体,模仿创建对应的节点类(10分钟)
6、学生基本信息管理业务类的定义和初始化(15分钟)
7、学生根据所设计的实体,模仿实现业务类的定义和顺序表的初始化(20分钟)
8、学生基本信息查找讲解(10分钟)
9、学生根据所设计的实体,模仿实现顺序表信息的查找(15分钟)
10、在顺序表中实现学生基本信息的增加。
(10分钟)
11、学生根据所设计的实体,模仿实现顺序表节点详细的增加(20分钟)
12、在顺序表中实现学生基本信息的删除。
(10分钟)
13、学生根据所设计的实体,模仿实现顺序表节点详细的删除(15分钟)
14、在顺序表中实现学生信息的修改。
(5分钟)
15、学生根据所设计的实体,模仿实现顺序表节点详细的修改(10分钟)
16、实现学生信息的保存。
(5分钟)
17、学生根据所设计的实体,模仿实现实体详细的保存(5分钟)
18、本次课程小结(5分钟)
19、通过表现层调用业务类进行界面功能实现以及调试(90分钟)
【习题要求】
1、学生独立完成本章习题内容,不允许抄袭。
对抄袭者记0分或倒扣分处罚。
2、严格按照考核内容进行评判。
3、本次作业的成绩,记录学生期末总成绩的2%
4、附加思考题,可以列入本次作业的加分项,并记录到学生期末总成绩中。
【实验要求】
1、学生独立完成实验2的内容,不允许抄袭。
对抄袭者记0分或倒扣分处罚。
2、严格按照考核内容进行评判。
3、本次实验作业的成绩,记录学生期末总成绩的2%
4、实验附加思考题,可以列入本次实验的总成绩中,并记录到学生期末总成绩中。
授课对象
系别
软件技术系
本次课学时
8学时
年级班次
章节题目
第4章学生成绩信息管理(链表)
目的要求(含技能要求)
掌握链表的基本功能和存储方式,利用单向链表实现学生成绩信息的管理。
了解循环链表和双向链表的功能和简单的操作。
本节重点
链表和单向链表的基本功能和操作。
本节难点
用单向链表的思想实现学生成绩信息的管理
教学方法
项目教学法,任务驱动法,模仿学习法,“教学做”三位一体法
教学用具
多媒体教室、机房
问题引入
从学生成绩信息管理功能界面的讲述入手,引入学生成绩信息管理业务实现
难点与重点讲解方法
以项目为引领,学生成绩信息管理为任务驱动,将课堂讲解、案例解学、模仿实作融为一体,进行教学。
本次课小节
课程小节
1、链表的基本概念和存储方式。
2、单向链表的基本概念以及操作。
3、利用单向链表的思想进行学生成绩信息的增、删、改、查以及保存的功能实现。
4、单向循环链表的基本概念和操作。
5、双向链表和双向循环链表的基本功能和操作。
教后札记
1、掌握单向链表的基本概念和性质。
2、利用单向链表思想进行学生成绩信息业务类封装。
3、通过用户界面实现业务类方法调用,显示数据。
初步实现简单三层结构项目开发。
讨论、思考题、作业(含实训作业)
见后
第四章学生成绩信息管理(链表)
【学习目标】
1.能力目标:
(1)面向对象编程能力。
(2)链表思想进行业务封装能力
(3)应用链表对学生成绩信息进行增、删、改、查操作的能力
(4)通过界面进行业务类调用实现能力
2.知识目标:
(1)链表的概念和存储方式;
(2)单向链表的概念性质和操作;
(3)利用单向链表实现学生成绩信息增、删、改、查操作;
(4)应用可视化界面实现学生成绩信息管理;
(5)双向链表的基本概念和操作;
(6)循环链表的基本概念和操作;
3.职业素质目标:
★链表操作的逻辑思维能力
★应用单向链表独立思考解决问题能力
★小组项目团队协作开发能力
★创新能力
【课前准备】
1.环境要求:
PC电脑 VisualStudio2005、SQLServer2000、MyEclipse
2.学生要求:
具备SQLServer数据库理论知识和操作能力。
具备面向对象程序设计C/S结构开发能力。
线性表的基本概念和性质。
顺序表基本概念、性质和操作应用能力。
3.教师要求:
能够进行三层结构的C/S项目开发能力。
具备一定的数据库设计和分析能力。
能够正确、及时处理学生操作过程中出现的问题及错误。
能够应用各种常用链表实现数据增、删、改、查的能力。
【主要内容】
1、链表的基本概念和存储方式
在线性表的顺序存储结构中,其特点是逻辑关系上相邻的两个结点在物理位置上也相邻,因此可以随机存取表中的任一结点,并且结点的存储位置可用一个简单直观的公式来表示。
但也正是这个特点造成顺序存储的一些缺点。
例如,存储空间空闲、存储容量难以扩充、当进行插入和删除运算时需移动大量的结点、效率较低等。
1)链表的定义:
链表是线性表的一种,是通过链式存储方式来保存数据的线性表。
2)链表的存储方式:
在计算机内存中利用存储单元(不要求连续)来存放结点的值及它在内存中的地址,各个结点的存放顺序及位置可以以任意顺序进行,原来相邻的结点在计算机内存中的存储
位置不一定相邻,从一个元素查找下一个元素必须通过地址(指针)才能实现,因此