数据结构课程(精选十篇)
数据结构课程 篇1
《数据结构》课程是高等院校计算机专业基础课, 是软件技术专业的核心专业课程, 它不仅是程序设计的重要理论技术基础, 也是计算机学科的重要理论课程, 同时也是计算机专业学生公认难学的课程。在计算机专业高职升本的考试中, 本科学校一般选择《数据结构》作为专业考试课程, 这门课程要比C/C++等程序设计类课程考试难度大一些。
通过该门课程的学习, 可以掌握数据组织、存储和运算的基本原理和方法, 并从问题入手分析研究计算机加工的数据对象的特性, 为实际应用所涉及的数据选择适当的逻辑结构、存储结构、基本运算及相应的算法。课程要求学生在掌握C语言和结构化程序设计特点的基础上, 较全面地掌握各种常用的数据结构的使用方法, 一方面, 从数据结构的逻辑结构、存储结构去掌握上述几种常用的数据结构。另一方面, 还要掌握在各种常用的数据结构上实现的各种基本运算, 最后达到能够选择合适的数据结构, 设计有效的算法解决相应问题的目的。
2 教学设计
其课程设置和教学内容的选择根据高职教育的特点, 在基础理论课中主要以应用为目的, 按照“必须”“够用”“可持续性”的原则组织教学。理论教学和实验教学穿插进行。
逻辑结构、存储结构和算法成为贯穿整个教学的三条主线。逻辑结构是数据元素之间的一种相互关系, 逻辑结构这条主线将各章节内容从总体上直接串接起来。如线性结构中的队列、二叉树、图中的最小生成树等都特别形象, 直观地显示了数据元素之间的相互关系。存储结构是逻辑结构在计算机存储器里的实现。
对于数据结构, 其基础的且为重点的内容应该是五个方面:“线性表、树、图”三大数据结构和“查找、排序”两大类算法。这五大重点内容有其内在的关系, 表可视为树的特例, 树又可视为图的特例, 图是最复杂的数据结构, 这样由线性结构到非线性结构, 由简单到复杂, 由特殊到一般的延伸, 就形成了一个简明、有机的而且是非常清晰的脉络。
教学中要注意实践与理论相结合, 将实验课程与设计课程分开进行, 实验教学和理论教学学时安排各50%。
3 教法改革
《数据结构》教学过程中要重视理论知识的综合应用, 强调整个过程的参与和学习, 发挥学生的学习主动性, 激发学生的学习兴趣和创造力, 培养学生的团队精神和协作意识。在课程设计中, 要求学生分组, 自行选题, 查阅资料, 系统设计, 编程调试完成, 小组提交作品, 每人提交一份设计报告。
针对高职专科层次的学生特点, 以培养具有自主学习能力、实际运用能力和独立解决问题能力的高素质应用型人才为目标, 注重学生的应用能力和创新能力的培养, 重点培养学生在应用中如何发现问题和如何解决问题的方法和相关技能。
教学中主要注意以下几点:
(1) 注重基础、突出重点
在教学过程中, 首先, 力求让学生了解每一种数据结构的特点及表现形式;其次, 让学生理解利用哪些存储方式可以把该数据结构存储到计算机中, 并且能反映出数据结构的逻辑特性, 不同的存储方式的优缺点。例如:对第三章栈和第四章队列, 先解释它们的定义, 明确它们的特性:栈先进后出, 限定仅在表尾插入和删除;队列先进先出, 插入在一端, 删除在另一端, 在此基础上, 再讨论它们的存储结构。
(2) 加强实践, 促进理解
在课程实验大纲指导下, 针对学过的知识点适时地选择有代表性、难度适中、综合性强的典型算法, 以点带面, 让学生进行编程、上机、调试。学生在实验中加深掌握该种数据结构下的数据组织、加工、处理方法, 进一步理解算法的设计, 同时锻炼编写和调试程序的能力, 帮助学生增加感性认识, 提高实践应用技能, 增强学习动力和信心。
高度重视实验、实训等实践性教学环节, 以案例或真实的任务为实训项目, 强调学生将所学知识和技能在实践中应用, 积极引导学生自主学习。
(3) 注重多媒体辅助教学手段的运用并运用多种教学方法进行教学
《数据结构》课程本身具有一定的抽象性和复杂性, 而利用多媒体辅助教学手段, 就可以改善教学环境和提高教学效果。如:哈夫曼树的构造, 在搞清构造方法的前提下, 通过课件运用多媒体辅助教学, 在一定程度上可以化抽象为直观, 使学生能够更好地理解算法的实现过程。
4 成绩评定
由于《数据结构》课程教学内容多, 抽象, 难理解, 教学难度大。在教学实践中, 应采用通俗易懂、循序渐进、理论联系实际的知识体系和教学风格, 针对于不同层次的学生提出不同的要求。
具体考核方法:
①理论考核:占总成绩的50%, 采用期末笔试的方法评定;②平时成绩:占总成绩的20%, 由学生的考勤+作业+小测验+学习态度组成;③实验成绩:占总成绩的30%, 其中实验成绩采用“实验操作”的方法评定。
摘要:本文从课程理解、教学设计、教法改革、成绩评定等方面探讨了高职《数据结构》课程教学中应注意的问题。
关键词:数据结构,课程,教学,理论,实践
参考文献
[1]王钢, 徐红.数据结构 (C语言版) [M].北京:清华大学出版社, 2005.
[2]严蔚敏.数据结构 (C语言版) [M].北京:清华大学出版社, 1998.
课程设计(数据结构) 篇2
1、运动会分数统计
任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=10 , w=8 , n=15)功能要求:
1).可以输入各个项目的前三名或前五名的成绩; 2).能统计各学校总分(用链表);
3).可以按学校编号、学校总分、男女团体总分排序输出(快速、基数);
4).可按学校编号查询学校某个项目的情况;可按项目编号查询取得前三或前五名的学校。
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
测试数据:要求使用
1、全部合法数据;
2、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
2、迷宫求解
任务:可以读入一个任意大小的迷宫数据,分别用广度和深度搜索的方法求出一条走出迷宫的路径,并将路径输出(最佳路径); 要求:以较为直观的方式显示结果
3、Huffman编码
任务 :对一篇英文文章,统计各字符出现的次数,实现Huffman编码; 要求:输出每个字符出现的次数和编码,其中求最小权值要求用堆实现;
4、营业窗口队列模拟
任务:实现具有n(n=3)个窗口的现实队列模拟,统计每人的等待时间。要求:
1).随机产生顾客的到达时间和服务时间存盘。2).利用存盘数据实现队列的插入和删除。2).当有顾客离开时,根据队列长度调整队尾。3).考虑顾客中途离队的情况。4).考虑顾客具有优先级的情况。
5、公交线路提示
任务:建立南京主要公交线路图。要求:输入任意两站点,给出最佳的乘车线路和转车地点。
6、家谱管理系统
任务:实现具有下列功能的家谱管理系统 功能要求:
1).输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。
2).实现数据的存盘和读盘。3).以图形方式显示家谱。
4).显示第n 代所有人的信息。
5).按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。6).按照出生日期查询成员名单。7).输入两人姓名,确定其关系。8).某成员添加孩子。
9).删除某成员(若其还有后代,则一并删除)。10).修改某成员信息。
11).按出生日期对家谱中所有人排序。
12).打开一家谱时,提示当天生日的健在成员。
要求:建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用
1、全部合法数据;
2、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
7、排序算法比较
设计要求:利用随机函数产生10个样本,每个样本有50000随机整数,利用直接插入排序、折半插入排序,表插入排序,希尔排序,起泡排序、快速排序、选择排序、堆排序,归并排序,基数排序十种排序方法进行排序(结果为由小到大的顺序),并统计每一种排序所耗费的平均时间(统计为图表坐标形式)。
8、算术表达式求值 [问题描述]
一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。[基本要求](1)从键盘读入一个合法的算术表达式,输出正确的结果。(2)显示输入序列和栈的变化过程。
9、电子小字典
基本要求:建立一个微型电子字典,实现生词的加入,单词的查找、删除,修改等操作。
数据结构:键树
10、校园导游程序
[问题描述]用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。[基本要求](1)查询各景点的相关信息;
(2)查询图中任意两个景点间的最短路径。(3)查询图中任意两个景点间的所有路径。
(4)增加、删除、更新有关景点和道路的信息。
11、稀疏矩阵相乘
任务:以三元组形式存储稀疏矩阵,实现矩阵相乘。
12、平衡二叉树
任务:平衡二叉树的建立、结点的插入和删除。
13、B-树
任务:3阶B-树的结点的插入和删除。
14、HASH表
任务:以班级学生姓名(拼音)为关键字,建立HASH涵数,实现HASH表存储,用链地址方法解决冲突。
15、„„(自选合适的题目)
成绩评定细则:
1.正确性:程序是否可以运行,结果是否正确(20分)2.功能的完备性:是否实现要求的所有子功能(20分)
3.课程设计报告中的算法说明的清晰程度,课程设计报告中总结的深刻程度(20分)4.独立完成情况(40分)总计:100分
加分项目:
1.健壮性:异常处理的情况
2.可读性:代码编写是否规范,是否便于阅读。如函数、变量命名,‘{ }’的缩进,关键位置适量注释等
3.功能的完善:除要求实现的功能外,完成了其它的功能,实现了功能的完善 4.界面的设计:可视化界面,或者交互良好的DOS界面 5.……(自荐加分项目)
代码量要求:>=1000行。
代码总量 = 课设题目1 代码量 + 课设题目2 代码量…… 若代码总量低于1000行,则成绩按比例打折。
编程语言:C或C++语言
编程环境:Microsoft Visual C++ 6.0
检查方式: 1.总体上检查程序的代码量,正确性,可读性,健壮性,功能的完备性,代码量,程序的结构是否合理;局部检查三个以上函数块 2.检查程序时同时检查课程设计报告的电子文档
时间安排: 上机时间安排 课程设计报告上交时间 3 课程设计检查时间
课程设计报告要求:
1.所有的课程设计报告,均要有封面,包括:课题名称、班级、学号、学生姓名、成绩和指导教师;
2.给出自己采用的数据结构; 3.给出算法设计思想;
4.给出实现的源程序,并在必要的代码处给出注释; 5.给出测试数据和结果;
6.给出算法的时间复杂度、另外可以提出算法的改进方法;
《数据结构》课程的教学分析与研究 篇3
关键词:数据结构;数据类型;存储结构;算法
0引言
《数据结构》是计算机科学与技术专业最为重要的专业基础课程。它以《程序设计基础》、《离散数学》为先修课程,这两门课程学习效果的好坏直接影响到《数据结构》课程的学习质量。特别是《程序设计基础》,在该课程中,结构体、指针、以及结构体指针类型的声明、使用是教学的难点,一般不作为教学重点,只要求学生了解、不需熟练掌握,但恰好这些内容是《数据结构》的基础,直接影响到了本课程的学习。
基础知识不牢固,再加上《数据结构》本身内容抽象有一定难度,学生普遍反映该课程“难懂、难做、难用”。针对这个问题,本文从课程的特点、教学方法、学习方法入手,进行了教与学的分析和探讨。
1数据类型定义(存储结构表示)
在《数据结构》中,大量地使用了自定义数据类型,且是其简化形式,学生理解有相当的难度。
数据类型的定义不但体现了元素间的逻辑关系、物理关系,也体现了概念的准确性、完整性、严谨性。譬如:
线性表的定义是“由n个元素组成的有限序列”。短短的几个字,但体现了两个方面的含义:n个元素(有限),序列。
1.1线性表的顺序存储结构
线性表的顺序存储结构,包含静态存储和动态存储。
数据结构课程教学探讨 篇4
《数据结构》是计算机专业的一门重要核心课程。通过对各种数据组织形式和相关算法的讲解, 使学生能够较好的掌握程序设计的基本思想。该课程在整个计算机专业课程体系中处于承上启下的核心地位, 数据结构课程的教学效果, 不仅影响着后续相关专业课程的教学效果, 还对学生的考研和就业方面有着重要影响。另一方面来说, 本课程在培养学生的算法思维、分析问题、解决问题能力方面, 也有很重要的影响。
1 存在问题
1.1 课程较为抽象, 理解不容易
《数据结构》课程一般在计算机或者电子类专业的二年级开设, 其前导课程为《程序设计语言》。由于其前导课程存在课时压缩问题, 对于刚刚学会简单编程的同学开设本课程, 本身就存在算法理解不易、抽象数据难以实化、缺乏必要的编程经验等问题。再加上近年来课时压缩、内容不减反增, 教师疲于赶进度, 无法兼顾课堂练习和作业的讲解, 所以教学质量难以提升。“老师讲得累, 学生听不懂, 上机干瞪眼。”
1.2实验课时少, 实验项目难
由于新技术的出现, 计算机专业的课程数量一直在增加。为了平衡总课时, 许多原有的课时被压缩。《数据结构》课程也不例外, 实验课时减少的更为严重, 从每周一次减少至两周一次。也就是说, 理论课时讲授8个小时, 才有2个小时对应的上机时间。而这两个小时中, 学生还需要将写好的程序输入计算机, 真正用来调试的时间不足一半。《数据结构》课程本身涉及的算法较多, 即时经过合并串联, 将一些算法放在同一文件中实现, 其编程和调试的工作量也很大, 每两周一次的上机时间捉襟见肘。
数据结构的实验项目单一, 无法形成有效体系。其中, 线性表, 树、图各成体系, 三者之间的联系较少。学生很少能够站在宏观的角度, 对三种结构综合运用, 仅能对其中的某些算法做出简单的验证程序。
1.3 学生编程基础差, 难以实现算法
C语言程序设计是数据结构课程的基础。很多同学在学习了c语言之后, 还徘徊在初始阶段, 对于数组、指针、结构体、链表等内容还未完全掌握, 练习的也少, 而数据结构课程中大部分内容都是跟指针、结构体等内容相关的, 所以很多同学反映看不懂程序。由于c语言基础较差, 无法满足本课程的要求, 无法理解算法思想, 不能分析算法性能等。在具体上机实践时, 又由于c语言实践较少, 编写程序水平太差, 很多程序存在语言或者流程错误, 同时又缺乏调试经验, 所以很多算法根本无法执行成功。不仅影响了同学们对程序的理解, 也从心理上对他们是一个打击。
2 解决方法
2.1 加强前期课程引导
《数据结构》课程前期主要介绍顺序表的操作。教材上一般只给出抽象算法, 需要学生自己动手实现程序。为了引导学生的兴趣, 此处一般可由任课老师直接给出程序, 并详细讲解如何由算法过渡到程序。例如, 在《数据结构》课程中, 顺序表的插入删除元素的过程是单独定义了结构体来实现了, 在理解上有难度。可以先引导学生利用算法思想, 使用c语言中较易理解的数组直接实现, 然后逐步过渡到结构体实现。并对比两种实现方式, 使学生明白为什么要使用结构体实现, 并对结构体的定义和实现有初步的了解。在后续的教学中, 也可在理解算法的基础上由学生自由发挥编写程序, 不一定非要按照课本来写。让学生明白, 只需理解算法的精髓, 具体实现过程可以稍作修改。所谓:运用之妙, 存乎一心。
2.2 引导学生合理利用上机时间
以前上机时布置任务, 学生在机房才开始思考如何编程, 等到程序编写好了, 下课时间也到了, 无法在上机实践过程中调试程序, 也看不到运行结果。引导每次上机课程进行之前, 布置好上机任务, 并要求学生在上机之前在纸上写好程序, 到机房后只需要输入并调试即可。可以较好的利用上机时间。有些学生会更进一步, 不仅写好了程序, 并且已经输入到计算机形成电子档文件, 上机时只需要载入运行环境就可以直接调试, 更加有效的利用了上机时间。提高了上机课的容量。另外, 还要求学生将一些常用算法自行调试, 作为电子档作业上交, 有效提高了学生的动手能力。
对于学有余力的同学, 另外布置一部分课外的兴趣题目, 由学生选作并予以适当的评分作为奖励。这部分题目中可以将课本上的不同章节的内容混合使用, 有助于学生深入理解课程体系中的各部分内容。
2.3 学期开始之前对学生的程序设计能力提出要求
一般教学任务的安排在前一学期结束时已经知道。这时应该及时联系学生对他们提出学习要求。要求学生在学习《数据结构》之前要掌握c语言程序设计中的数组、函数、指针、结构体等内容。并明确说明各部分内容的具体要求。例如, 数组名做函数参数、递归函数调用过程、指针变量做函数参数、结构体的定义和成员引用等。要求学生利用放假时间复习程序设计课程内容。并做出具体要求:每个学生c语言的编程代码不少于2000行。
在本课程的进行过程中, 也可抽出时间对学生的程序设计能力进行简单测试, 从而根据他们的水平调整教学内容和进度。可以较好的保证授课质量。
3 结语
总之, 《数据结构》课程是一门重要的核心课程。做好该课程的教学工作需要教师和学生两方面的共同努力, 教师要不断更新教学思路和方法, 并在课堂中适当引入研究热点;学生需要不断深入学习, 以理解复杂算法。只有这样, 才能提高《数据结构》课程的教学效果, 达到培养人才的目的。
参考文献
[1]杨桂芝.“数据结构”教学方法探索与实践[J].计算机教育, 2007 (06) .
[2]孙秀惠.《数据结构》教学方法探讨[J].科技资讯, 2006 (31) .
[3]张巧生, 邓廷勇.《数据结构》课程教学方法探讨[J].山西科技, 2009 (01) .
[4]郭丹, 李扬.分层次教学在高校数据结构课程中的运用[J].通化师范学院学报, 2009 (02) .
数据结构课程设计报告 篇5
数据结构课程设计报告
课程设计题目 迷宫 航班信息查询系统 学 号 姓 名 班 级
专 业 网络工程 完 成 时 间 2013-1-4 指 导 教 师
数据结构课程设计
迷宫
题目一
1.设计内容 1.1问题描述
求迷宫从入口到出口的所有路径。1.2设计要求
1.迷宫中不能使用递归算法查找路径。2.试探方向限定为上、下、左、右四个方向。3.迷宫采用随机生成和手工生成两种方式。4.生成从迷宫入口到出口的最短和最长路径。5.迷宫的入口和出口由键盘输入。
1.3开发环境
Visual C++6.0的集成化环境 1.4研究思路
对这样的矩形迷宫,可以用N*M的矩阵来描述,N和M分别代表迷宫的行数和列数。这样,迷宫中的每一个位置都可以用行号和列号来指定。从入口到出口的路径则是由一个位置构成的,每个位置上都没有障碍,且每个位置(第一个除外)都是前一个位置的东、南、西或北的邻居。为了描述迷宫中位置(i,j)处有无障碍,规定:当位置(i,j)处有一个障碍时,其值为1,否则为0。
经分析,一个简单的求解方法是:从入口出发,沿某一方向进行探索,若能走通,则继续向前走;否则沿原路返回,换一方向再进行搜索,直到所有可能的通路都探索到为止。即所谓的回溯法。
2.设计步骤
2.1 需求分析
(1)题目:迷宫的生成与路由。生成一个N*M(N行M列)的迷宫,0和
1-1数据结构课程设计
迷宫
在该程序中,首先进入的是菜单选择,在菜单中有3种选择,选1是手动输入迷宫函数;选2是随机自动生成迷宫;选3是退出程序。在手动生成迷宫时,有两种输出方式,一是矩阵输出,二是图形输出。在矩阵输出时,直接将数组中的数进行输出,在图形输出时,则要判断该点的情况,然后输入迷宫的出入口,再调用mgpath()函数进行判断是否存在路径,如果存在则将路径经过的点进行输出,并且将经过的点进入到辅助数组中(辅助数组是辅助图形界面的输出),并且将辅助数组初始为1,辅助数组中点为路径的重新赋值为0,然后根据情况输出图形界面。在自动生成迷宫时,用到了c语言随机函数,对于其它问题,和手动情况基本相同。
2.3 详细设计(1)主菜单伪代码:
while(flag1){
}
{shuru();//输入行列数
printf(“手动建立迷宫矩阵(0表示可通1表示障碍):n”);for(i=1;i<=m;i++)
for(j=1;j<=n;j++)scanf(“%d”,&mg[i][j]);showplay(mg);// 迷宫输出 churukou();//迷宫出入口的输入 x=Mazepath(mg);// 判断路径函数
数据结构课程设计
迷宫
和“class ‘maze’has an illegal zero-sized array”两行错误。双击错误信息,找到出错的程序段,经过查阅资料发现,在利用顺序栈时,没有定义顺序栈的向量空间大小,导致程序出错。但不要对向量空间定义过大,否则会浪费空间。
(2)算法的时空分析:
由于链栈实际上是运算受限制的单链表。所以取栈顶元素运算的算法、置空栈运算的算法执行时间与问题的规模无关,则该算法的时间复杂度为O(1);而其入栈运算的算法与出栈运算的算法相当于在链表的表尾进行插入和删除操作,不需要移动元素,时间复杂度也为O(1)。建立迷宫矩阵的时间复杂度为O(x*y)。在查找路径的过程中,最坏的情况下可能要考察每一个非障碍的位置。因此,查找路径的时间复杂度应为O(unblocked)。
链栈的入栈算法、出栈算法、取栈顶元素算法、置空栈算法执行时所需要的空间都是用于存储算法本身所用的指令、常数、变量,各个算法的空间性能均较好。只是对于存放顺序栈的向量空间大小的定义很难把握好,如果定义过大,会造成不必要的空间浪费。所以在定义时要慎重考虑。
3.用户使用说明
运行该程序,运行的界面的会出现菜单界面,然后用户可根据界面的提示进行相应的操作,生成迷宫的方式有两种方式,手动生成和自动生成,手动生成时、,用户可根据自己的要求输入迷宫的格式,还需输入相应的入出口,确认程序就会生成相应的路径图形;自动生成只需输入所需的行数和列数,就会生成迷宫,接下来的操作和手动操作相同了。
图数据结构课程设计
迷宫
图1-2
图1-3 退出
5.总结与心得体会
本次课程设计过程中由于掌握的知识不牢固,在编程序的过程中得到了同学的帮助和指导,在此表示感谢。课程设计的过程中,遇到了一些问题,大部分是课本中的知识掌握的不牢固,还有就是在以前学习C++的过程中相关的知识掌握的不够全面。在以后的学习过程中,自己一定要把各种知识掌握牢固。
{ }
mg[i][j]=1;//初始化
矩阵,将最外围置为1
printf(“n输入迷宫入口:n”);scanf(“%d%d”,&x1,&y1);printf(“输入迷宫出口:n”);scanf(“%d%d”,&x2,&y2);
}mlink;mlink *stack;//定义一个栈 int m,n,x1,x2,y1,y2;//定义全局变量
}
void showplay(int mg[][M+2])//迷宫输出
{
n“);
for(i=1;i<=m;i++){
printf(”n“);for(j=1;j<=n;j++)
printf(”%d “,mg[i][j]);
int i,j;
printf(”迷宫矩阵如下(0可通):printf(“输入行数:n”);scanf(“%d”,&m);printf(“输入列数:n”);scanf(“%d”,&n);数据结构课程设计
迷宫
} } printf(“n迷宫图形如下(白色for(i=1;i<=m;i++){
}
printf(”n“);for(j=1;j<=n;j++){
} if(mg[i][j]==0)printf(”
if(mg[i][j]==1)printf(“
if(mg[stack->row][stack->col+1]==
p->next=stack;
stack=p;{
p=(mlink 可通):n”);0)//下面位置可通
*)malloc(sizeof(mlink));
p->row=stack->row;p->col=stack->col+1;□“);//为0的输出□ ■”);//为1的输出■
//入栈
mg[stack->row][stack->col]=1;//将
} else
访问过的标记为1 int Mazepath(int mg[][N+2]){
mlink *p;if(mg[x1][y1]==0){ p=(mlink p->row=x1;p->col=y1;p->next=NULL;stack=p;
//将入口
mg[stack->row][stack->col]=1;/while((!(stack->row==NULL&
if(mg[stack->row][stack->col-1]==0)//上面可通
//入栈
stack=p;
p->next=stack;
{
p=(mlink *)malloc(sizeof(mlink));
*)malloc(sizeof(mlink));
p->row=stack->row;p->col=stack->col-1;放入堆栈 /标志入口已访问
&stack->col==NULL))&&(!(stack->row==x2&&stack->col==y2)))//循环条件直到找到输入的出口
{
mg[stack->row][stack->col]=1;//将
访问过的标记为1
数据结构课程设计
迷宫
void tonglu()//将坐标的顶点输出 {
始化
printf(“(%d%3d)n”,q->row,q->col);
情况
else printf(“□”);//0的 } q=stack;{
} for(i=0;i for(j=0;j = while(q!=NULL)//循环条件 q=q->next;for(j=0;j 情况 } void create(int mg[][N+2])//创建和菜单 { int i,j,x,choice,flag1=1;chushi();while(flag1){ } printf(“n”);printf(“所有通道为(由下而q=stack;{ 上):n”);while(q!=NULL)//循环条件 printf(“ ## printf(”# n“); *********选择菜单********** #n”); printf(“ ## printf(”输入选项:“);scanf(”%d“,&choice);switch(choice){ case 1://手动建立迷宫 { shuru(); printf(”手动建立for(i=1;i<=m;i++) n“); printf(”# 1-手动生成迷 宫 2-自动生成迷宫 3-退出 #n“);0;//将路径中的点赋给辅助数组a 形的界面输出 迷宫矩阵(0表示可通1表示障碍):n”); for(j=1;j<=n;j++)scanf(“%d”,&mg[i][j]); 数据结构课程设计 航班信息查询与检索系统 题目二 1.设计内容 1.1问题描述 设计一个航班信息查询系统,提供信息的管理和使用功能,管理包括更新、添加、删除功能。 1.2设计要求 (1)原始信息存储在文件中,记录不少于50条。(2)用户界面至少包括以下功能: 创建 修改(插入、添加、删除、更新) 查询 浏览 退出管理系统(3)航班信息包括: 航班号:字符序列,具体字符表达的意思上网查询 起点站和终点站:字符串 班期:指一周中哪些天有航班 起飞时间:可将时间定义成一个时、分组成的序列 到达时间:可将时间定义成一个时、分组成的序列 机型:字符序列,具体字符表达的意思上网查询 票价:整型数,具体值可上网查询 (4)创建是指从文件中读取数据,并存入所定义的顺序表中。 (5)可按航班号、起点站、终点站、起飞时间、到达时间等进行查询。查询时要用到顺序查找、二分查找方法。输出查询结果时必须排序。 (6)可按航班号、起点站、起飞时间、票价进行删除和更新操作,删除的记录存入另外的文件中,作为日志文件保存。 (7)作插入操作前,先对信息按起点站进行排序。新记录插入为起点站相同的最后一条记录。 数据结构课程设计 航班信息查询与检索系统 typedef struct node { Time rh;Time lv;}Pnode;(2)飞机结构体: struct Plane { };(3)静态链表: typedef struct Sqlist { int length;struct Plane *plane;char key[10],sted[20],sche[10];Time rh,lv;int price;}Sqlist;2.3 详细设计(1)主函数: do{printf(“* * * * * * * * * * * * * 航班查询系统* * * * * * * * * * * * *n”); printf(“* 1.创建 2.修改 3.查询 4.浏览 5.表长 6.文件 0.退出 *n”); printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *n”); scanf(“%d”,&opt);switch(opt){ case 1:Initlist(L);break; case 2:handle(L);break; case 3:search(L);break; case 4:print(L);break;case 5:Get_Sq(L);break;case 6:File(L);break; 数据结构课程设计 航班信息查询与检索系统 } }while(opt!=0);} (4)文件操作: void File(Sqlist &L){ int ch;do{ printf(“* * * * * * * * * * * * * * * * * * * * * * * * *n”); printf(“* *n”); printf(“* 1.保存信息到文件 2.从文件读取信息 0 退出 *n”); printf(“* *n”); printf(“* * * * * * * * * * * * * * * * * * * * * * * * *n”); printf(“请输入选项n”); scanf(“%d”,&ch); switch(ch) { case 1:SaveList(L);break; } }while(ch!=0);case 2:ReadList(L);break; case 0:printf(“退出!n”);break;} (5)浏览信息:就是循环使用输出函数,在此就不必多说了 2.4 调试分析 (1)在课设过程中,遇到问题时,通过与同学、老师交流,在图书馆查阅资料,使问题得以解决。 (2)算法中有许多不是很优化的地方。3.用户使用说明 程序运行后用户根据提示输入要进行的操作选项(应先选择创建选项,这样可以直接读取保存好的文件),然后选择要进行的操作选项。由于主菜单中有修改、查询和浏览项目,每个项目又有各自的子菜单,所以在进行管理和使用时要注意输入的元素是否正确,需按照提示输入。输入操作元素时,元素之间以空格隔开。程序将按输入的操作元素找到相应的算法,然后进行处理,然后将结果打 数据结构课程设计 航班信息查询与检索系统 图2-2 查询信息 图2-3插入 图2-4删除 数据结构课程设计 航班信息查询与检索系统 时就需要重新写出一个子函数,哪怕这个子函数就是在原有的一个子函数的基础上改那么一丁点的地方,例如航班信息查询系统中的查询函数,其实每个子函数只是改了一下关键码而已。 6.附录 #include { } void search_key(Sqlist L)//按航班号查找 { 号:“); Time rh;Time lv; scanf(”%s“,n);int i; printf(”此航班的航班号,起点char n[20]; printf(“请输入要查找的航班 printf(”%dn“,L.length);//表长 }Time;typedef struct node { }Pnode;struct Plane { };typedef struct Sqlist { int length;struct Plane *plane;char key[10],sted[20],sche[10];Time rh,lv;int price; 终点,班期,起飞时间,到达时间,票价:n”); if(strcmp(L.plane[i].key,n)==0) ted,L.plane[i].sche,L.plane[i].lv.hour,L.{ for(i=L.length-1;i>=0;i--){ printf(“%s %s %s %d:%d % d:%d %dn”,L.plane[i].key,L.plane[i].s}Sqlist;int get_Sq(Sqlist &L){ } void Get_Sq(Sqlist &L)return L.length; plane[i].lv.min,L.plane [i].rh.hour,L.plane[i].rh.min,L.plane [i].price); 0数据结构课程设计 航班信息查询与检索系统 printf(“此航班的航班号,起点 ted,{ 终点,班期,起飞时间,到达时间,票价:n”); if(L.plane[i].lv.hour<=hour) ted,L.plane[i].sche,L.plane[i].lv.hour,L.{ for(i=L.length-1;i>=0;i--){ printf(“%s %s %s %d:%d % d:%d %dn”,L.plane[i].key,L.plane[i].s L.plane[i].sche,L.plane[i].lv.hour,L.plane[i].lv.min,L.plane [i].rh.hour,L.plane[i].rh.min,L.plane } void search(Sqlist L){ int i;do { printf(“* * * * * * * * * * * } } printf(”%s %s %s %d:%d %d:%d %dn“,L.plane[i].key,L.plane[i].s[i].price);plane[i].lv.min,L.plane [i].rh.hour,L.plane[i].rh.min,L.plane } void search_rh(Sqlist L){ int hour;printf(”请输入你所要求的最scanf(“%d”,&hour);printf(“此航班的航班号,起点 } } [i].price); * * * * * * * * * * * * * ** * * * * * * * * * * * * * * *n”); printf(“* 1.航班号查询 2.起点终点查询 3.班期查询 4.起飞时间查询 5.到达时间查询 0.退出 *n”); printf(“* * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * *n”); scanf(“%d”,&i); switch(i) { case 晚时间:“);终点,班期,起飞时间,到达时间,票价:n”); if(L.plane[i].rh.hour<=hour)for(int i=L.length-1;i>=0;i--){ 1:search_key(L);break; 2数据结构课程设计 航班信息查询与检索系统 n“); } else { } printf(”查找不成功。 i--;if(i==0) { char c[20]; printf(“输入修改后的scanf(”%s“,c); 内容:”); strcpy(L.plane[i].sche,c); printf(“修改成功!n”);}break;{ int a,b; printf(“输入修改后的int opt;printf(”选择修改对象:“);scanf(”%d“,&opt);switch(opt){ case 1: printf(”修改成功!n“);printf(”修改成功!n“);{ char a[10];printf(”输入修改后的scanf(“%s”,a); case 4: 内容:“); char b[20];printf(”请输入修改后scanf(“%s”,b); scanf(“%d:%d”,&a,&b); L.plane[i].lv.hour=a;L.plane[i].lv.min=b;printf(“修改成功!n”);航班号:“); }break;{ int a,b; printf(”输入修改后的strcpy(L.plane[i].key,a);}break;{ case 5: case 2: 内容:“); scanf(”%d:%d“,&a,&b); L.plane[i].rh.hour=a;L.plane[i].rh.min=b;printf(”修改成功!n“);的内容:”);strcpy(L.plane[i].sted,b);}break; }break;{ int a; case 6: case 3: 4数据结构课程设计 航班信息查询与检索系统 *n“); printf(”* * * * * * * * * * * * * * * * * * * * * * * * *n“); printf(”请输入选项n“); scanf(”%d“,&ch); switch(ch) { case 1:SaveList(L);break;case 2:ReadList(L);break; L.plane[i].sche,&L.plane[i].lv.hour,&L.plane[i].lv.min,&L.plane [i].rh.hour,&L.plane[i].rh.min,&L.pl } void delet_Sq1(Sqlist &L){ char n[10];int i,j; printf(”请输入您要删除的航scanf(“%s”,n);if(L.length==0){ printf(“没有选项!n”);for(i=0;i L.length++; ane[i].price); case 0:printf(“退出!n”);break; } void Initlist(Sqlist &L)//插入存储 { “); 容:”);价n“); scanf(”%s%s%s%d:%d%d:%d%d“,L.plane[i].key,L.plane[i].sted, for(i=0;i 班期 起飞时间 到达时间 票scanf(”%d“,&n);L.length=0;L.plane=(Plane if(!L.plane)exit(0);printf(”请输入顺序表中的内 int i,n;printf(“输入表中航班的数量: } }while(ch!=0); 班号:”); if(strcmp(L.plane[i].key,n)==0) { printf(“所删除的班机*)malloc((n+10000)*sizeof(Plane));的信息:n”); printf(“n航班号 起点终点 printf(”%s %s %s %d:%d %d:% d %dn“,L.plane[i].key,L.plane[i].sted,L.plane[i].sche,L.plane[i].lv.hour,L.plane[i].lv.min,L.plane [i].rh.hour,L.plane[i].rh.min,L.plane [i].price); 6数据结构课程设计 航班信息查询与检索系统 n”);} printf(“无法打开文件!} }while(opt!=0); void insert_Sq(Sqlist &L){ 数量 价n”); for(i=0;i printf(“* * * * * * * * * * * scanf(”%s%s%s%d:%d%d:%d%d“,&L.plane[L.length].key,&L.plane[L.length].sted,&L.plane[L.length].sche,&L.plane[ { int a=get_Sq(L); printf(”请输入要添加班机的scanf(“%d”,&n); printf(“请输入要添加的班机printf(”n航班号 起点终点 int i,n; //n表示添加的fprintf(fp,“航班号:%sn起点站:%s 终点站:%sn班期:%dn起飞时间:%d:%d 到达时间:%d:%dn价格:%dnn”, p.key,p.sted,p.sche,p.lv.hour,p.lv.mi n“);} void delet_Sq(Sqlist &L){ int opt;do { fclose(fp);printf(”保存删除的信息成功。n,p.rh.hour,p.rh.min,p.price); 数量:“); 信息:n”); 班期 起飞时间 到达时间 票* * * * * * * * * *n“); printf(”* 1.航班号删除 printf(“* * * * * * * * * * printf(”输入你的选择:“);2.路线删除 0.退出 *n”);* * * * * * * * * * *n“); scanf(”%d“,&opt); switch(opt){ case 1:delet_Sq1(L);break; case 2:delet_Sq2(L);break; case 0:printf(”退出。} L.length].lv.hour,&L.plane[L.length].lv.min,&L.plane[L.length].rh.hour,&L.plan e[L.length].rh.min,&L.plane[L.length].price); } void handle(Sqlist &L){ } L.length++; 关键词:数据结构教学方法教学改革 中圖分类号:G642文献标识码:A文章编号:1674-098X(2011)05(a)-0190-01 数据结构是计算机科学与技术专业中的一门重要的专业基础课,它不仅是大学计算机专业的核心课程之一,也是非计算机专业的主要选修课程之一。本课程系统的介绍了软件设计中常用的几种数据结构以及相应的存储结构和算法,旨在培养学生的数据抽象能力和算法设计能力[1]。通过本课程的学习,不仅为学生后继课程提供必要的知识准备,而且更重要的是为提高软件设计和编程水平打下坚实的基础。因此对数据结构教学内容、教学方法等进行深入研究是非常必要的。 1 数据结构教学内容改革 (1)优化课程结构。 数据结构课程的主要内容是“线性表、树、图”三种数据结构和“查找、排序”两大类算法,这些内容不是孤立的,它们之间存在内在的联系。线性表是线性结构,是最简单的一种数据结构,树和图是非线性结构,线性表可以看作是树的特例,树为图的特例。这样在授课过程将三种结构联系起来,由线性到非线性,由简单到复杂,将课程内容形成一条主线,方便学生理解和掌握。查找和排序是建立在线性结构和树型结构上的两类算法,可以将其穿插在线性结构和树型结构两种数据结构中讲解,将数据结构和算法有机的结合起来,理论与实际相结合,更加方便学生对所学知识的应用。 (2)根据学生的层次调整授课内容。 学生入学时层次不同,再加上入学后受到多种因素的影响,学生的程度存在很大的差异,这就要求我们在授课内容上要根据实际情况进行调整。课堂上主要针对程度一般的多数学生的情况组织教学内容,力求学生能够掌握教材中的主要内容;对于程度差的学生要进行个别的辅导,通过补习和细化教学内容帮助其积累知识和提高理解能力,跟上课堂教学进度;对于程度较好的学生,要注重其潜在能力的培养,通过指定课外读物、加大信息量、布置思考题等,让其能力得到充分的发挥。因此,我们要在课程的层次和内容设置上下功夫,充分考虑各种具体情况,有针对性的教学,以期取得良好的教学效果。 (3)根据专业设置授课内容。 在一般的本科院校里,学习数据结构这门课程的学生不只是计算机专业,比如我们学校就有计算机和信管两个专业,还有其他专业的学生选修这门课程。对于不同专业的学生,同一门课的教学也不应当是简简单单的内容上的删减和侧重点的不同,要根据专业的需要设置教学内容,以适应现代高等教育的目标。要因材施教,对于不同专业的学生,学完这门课要让学生真正理解课程的精髓,为什么要学习这门课,它对自己所学专业有什么用处。不能仅仅依靠指定的教材,要根据专业的不同,编写适合自己学生的辅导教材、实验教材等,真正做到培养实用型、创造型人才[2]。 2 数据结构教学方法改革 数据结构这门课理论性较强,学生不容易理解,为了让学生更好的掌握这门课程,提高教学质量,要注意教学方法的正确使用。因此,除了传统的行之有效的教学方法之外,还应该采用一些新的有专业特色的教学方法。 (1)问题驱动式教学。 以问题为驱动,就是在教学过程中利用问题引导学生学习,以激发学生的学习兴趣和主动学习的能力[3]。将传统教学中的以教师为中心转变为以学生为主体,让学生主动地去学习,要有求知的欲望。因此,在教学过程中,通过问题来激发学生的学习兴趣,唤醒其主体意识。例如在学习最小生成树时,可以提问:“如果要建设乡村公路,保证一个乡镇的任意两个村子之间都能有公路相通,如何建设才能使得费用最少?”通过学生对问题的思考然后再讲解具体的实现方法,这样就能增强学生学习的兴趣和主动学习的欲望,同时学生对知识掌握的更加牢固。 (2)实践动力式教学。 实践教学是高等教育中一个重要的环节,尤其对一些工程学科来说更是不可缺少的。实践教学是验证学生对理论知识的掌握程度,同时也是提高学生创新能力的一个手段。在实践中能够让学生体会到学习的艰辛和成功的喜悦,从而增强自信心和学习的动力。 对于上机实验,我们摈弃传统教学中一刀切的传统,针对学生的不同层次设置实验内容。对于基础较差的同学首先让他们完成一些验证性的试验,掌握最基本的教学内容,在有余力的基础上再进行能力的提高;对于基础较好、有一定潜力的同学,可以不去作验证性实验,而是给他们提供一些有一定难度的实验,来充分发挥自身的潜能和创新能力。这样不同的同学都能够在实践过程中充分发挥自身的能力,有所收获,增强他们学习的自信心和学习的动力。 (3)创新导向式教学。 教学不仅仅是将书本上的知识教授给学生,关键是教给学生学习的方法,培养学生学习的能力。因此在授课过程中,在传授知识的同时,注重培养学生提出问题、分析问题和解决问题的能力。在教学中要启发学生去思考问题,并且要注意观察学生的思维动态,对学生不经意的创造,要加以引导和鼓励,培养学生的创新意识,挖掘其潜在的能力,使学生的创新意识和创新能力得到培养和发挥。 3 结语 数据结构是计算机及其相关专业的一门重要的专业基础课,其他许多计算机科学领域都建立在这个基础之上。因此为了能够更好的让学生掌握这门课程,提高学生的综合素质和创新能力,作者针对课程自身的特点,对教学内容和教学方法进行探索和改进,以适应现代教育的培养目标。 参考文献 [1] 严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,1997. [2] 杨天怡,胡新平,严薇,等.创新教育与实践教学创新[J].中国高等教育,2005(23):28~30. “数据结构”课程的教学内容,侧重于典型数据结构及经典算法的讲解与演示,已经有较为成熟的理论知识体系,但存在着抽象难懂,实验时困难重重等问题[1]。解决目前的教学困境,需要在调整教学内容的同时,注重教学方法的改进。 一、明确教学目标 美国教育心理学家布鲁纳在认知结构教学理论中指出,发展学生的智力应该是教与学的主要目的[2]。在这里,教与学都应该有明确的目标。 从教的角度来看,提出教学目标,亦即通过课程学习,学生应掌握的理论知识和应具备的能力、素质。具体来说,就是:建立数据结构概念,树立数据结构设计与算法设计的基本思维模式;掌握采用不同数据结构分析问题和设计程序的方法;结合实际问题,选择高效的数据结构,并能分析相应算法的效率[3]。 从学的角度来看,学生对这门课程的期望值,分为三个层次,由低到高依次为:修完课程,达到基本要求,拿到学分;对计算机相关行业感兴趣,有强烈考级、考研需求,愿意花课余时间和精力去学习;热衷于对计算机理论、相关算法的改进和研究,致力于提高软件开发和运行效率,愿意不眠不休,花费大量时间和精力去钻研。 从历年的数字来看,学生的学习热情,从被动型(Ⅲ型)到积极型(Ⅱ型)再到狂热型(Ⅰ型),所占的比例也有所不同。笔者选取了西北农林科技大学信息计算专业近5年的学生情况进行分析对比,如表1所示。 从表1中不难看出,近年来Ⅰ型学生的百分比有所下降,尤其是Ⅱ型学生,他们对这门课程的兴趣度下降非常显著,13级的数字显示,将近52%的学生都只是为达到课程要求而学习。这固然和专业需求、课程难易程度,及应用性要求密不可分,但也需要任课教师根据学生学习目标,适当调整教学目标和过程。 影响学生学习的关键因素是动机,它取决于学生的心理倾向和为学习所做的准备。在教学中,需要任课教师积极干预和引导,便于学生明确学习目标和兴趣点,为他们的后续学习做好铺垫。 二、使知识结构适应认知结构 学生学习的认知结构与人类认识客观事物的过程非常类似,为促进教学,应选择适当的知识结构及适合学生学习的方式。本门课程,是一个开放、有序、内容丰富的知识结构体系。它涉及领域广,涵盖知识点多,理论性较强。课程的知识结构主要有基本结构及应用算法两部分。学生的“数据结构”认知结构是学生按照自己的经验与理解,根据感知、记忆和思维的特点,使知识在头脑里组织成具有内部规律的整体结构,既包括学生已有的数据结构知识,又包括了这些知识的内部组织形式。 “数据结构”课程教学,需要尽早在这两种结构之间建立联系。课堂上,教师应首先把学科的知识结构和逻辑组织全面展示给学生,以便于学生的了解和掌握。 为缩小学生与知识结构间的差距,第一堂课引用员工信息表的例子,设计四种不同的应用场景,分别是:全员参加集体活动、按年龄大小进行体检、员工职务关系、员工之间的好友关系。该例中数据元素之间的逻辑关系,对应四种典型逻辑结构:集合、线性结构、树形结构、图状/网状结构。通过该例,学生能直观感受数据的逻辑关系,并重新发现自己原有的知识状况,促进、改造现有的知识结构,并且在此基础上修正和发现新的学习,同时还能增强学习的兴趣和信心。厘清逻辑关系后,再引入物理结构,提出顺序和链式存储结构的概念,使学生明确逻辑结构与物理结构研究的内容和之间的联系即可。在后续章节的讲授中,再进行深入研究和探讨。 三、合理设计教学序列 按照研究问题的过程,设计教学序列。学生的学习过程,不应是单纯地接受,而是积极地进行信息加工。 待学生对研究内容和学习方法有了初识,再引入算法和算法分析的概念。首先介绍算法特性和算法设计的要求。为避免混淆,可以用学生在学习编程语言阶段的编程题目为例,提高学生对概念的熟悉度及认同感,增强学习的信心。对于算法分析的量度,此处涉及渐进时间复杂度和空间复杂度,重点在于算法分析的方法。课堂教学时,采用问答式教学方法,既能启发学生思考,又能活跃课堂气氛,通过不同类型算法的分析,让学生掌握基本的方法。 后续章节内容的学习,分为两个层次,首先是按照线性结构—树形结构—图状结构的次序,从简单基本的结构入手,再逐步细化、深化;其次就是应用算法的层次,这里主要涉及排序、查找的经典结构、算法及分析。通过教学,学生了解并接受研究“数据结构”的流程:根据实际应用问题,分析逻辑关系,选择存储结构,实现算法,分析算法效率,优化。这样不仅能够提高学生的积极性,更能有效引导学生学习知识与掌握学习的方法。 学生学习知识,掌握技能的过程不可能一蹴而就,需要日积月累,循序渐进。在整个教学过程中,教师应考虑学生的认知结构和学习基础,激发学生的认知行为和潜力,积极引导学生充分思维,发散思维,充分体现学科的系统性和学生的主动性,并将其有序结合。 四、强化感性认识与理性认知 大学的“数据结构”课堂,多采用多媒体课件,除利用演示文稿讲解基本理论知识,还加入了动画、声音、视频等多媒体元素,能够动态模拟操作算法的执行。这种辅助教学方式浅显易懂,有利于学生的形象思维,加深学生对抽象问题的感性认识。但存在一个不容忽视的问题,就是学生变“笨”了,他们只重视概念的理解,忽略了算法实现,及代码编写。学生经常会有“课堂听懂很容易,实习编码写不出”的困扰。 对于抽象概念的理解,感性认识的作用不可或缺,但“数据结构”的教学,仍需进一步加强与深化。笔者的做法是在一个完整的知识模块里,挑选一个典型案例,精讲,细讲,透讲。对于刚接触课程的学生来说,能够有完整的范例供他们模仿,是很有必要的。比如在线性结构的线性表部分,可以用约瑟夫环的问题作为示范,该问题难易适中,规模不大,适合课堂讲解和演示。从建立单循环链表开始,综合运用线性表的查找、删除等操作,直到实现约瑟夫环的输出,在分析过程中示范编写代码。这样能保障学生课堂理解算法思想,课下能够模仿教师课堂的示范,还原解决问题的完整过程。模仿的过程,也就是培养和建立良好习惯的过程。这样的精讲范例,不用很多,结合课时分配,针对典型数据结构进行讲解即可。 五、注重实践教学探索 课堂教学之外,编程实践也是“数据结构”教学中至关重要的环节。目前使用的教材中,大多给出类—语言的算法,要求学生在实践环节实现代码的编写。实践时采用的形式是在现有实验平台上,由任课教师提供题目,输入,输出及测试用例,制定相应规则。要求学生独立设计算法,编写代码,完成相应题目的设计与实现。这种方式,让每位学生都动手编写代码,起到了理论阶段性验证的作用,但存在一些问题:部分典型算法的验证,课堂已讲解过,教材也有配套资源,导致学生积极性下降;题目的难易程度不尽相同,缺乏统一评价标准;不符合软件开发的标准流程。 笔者结合教学内容,将敏捷开发模型、综合实验平台引入到“数据结构”课程的实践过程中。 首先,通过“搜集—讨论—筛选—测试”的闭环过程建立实验课题库平台,使得原课程中分散的知识点转化为项目的技术亮点,有机结合,避免知识点过于孤立;丰富实验题库的内容,增设应用题库和考研题库,以激发学生的学习兴趣及研发热情;加大题目的难度,增强学生对难点问题的理解和掌握。 其次,选择敏捷模型,结合项目题库,融入到学生的实验过程中,形成一套行之有效的标准化开发模型。具体来说,有敏捷过程部署、角色设定、持续改进与自动化测试[4],将敏捷开发模型过程融入学生学习和实训的过程。例如,最短路径题目,将综合能力较强的学生设定为客户方负责人(PO),其整体负责需求组建、用户故事分解、各个特性团队的解耦。将动手能力较强的学生设定为敏捷专家(SM),其整体负责各个特性团队,并指导团队内的自组织、闭环学习以及故事的交付。各个特性团队除了设定敏捷专家,还配备质量分析师(QA)、开发人员。这个团队通过站会、看板、结对、发布会、回归会等一系列敏捷过程持续改进,完成最终的实验题目。 总之,“数据结构”课程是一门理论性较强,需要紧密联系实践的科学。用现代教育理念指导,结合先进的软件开发技术,指导“数据结构”教学及实践,对于提高学生的理论认知、培养学生的创新意识和编程实践能力,具有十分深远的意义。 参考文献 [1]赵耀红,孙宇.数据结构实验教学的实践与探索[J].长春大学学报,2012,(4). [2][美]杰罗姆·布鲁纳;宋文里,黄小鹏译.布鲁纳教育文化观[M].北京:首都师范大学出版社,2011:92-96. [3]严蔚敏,吴伟民.数据结构:C语言版[M].北京:清华大学出版社,2011:1-2. 1 课程教学中存在的主要问题 1.1 先行课程不扎实 目前对数据结构课程的先行课程多为C或C++语言,虽已学过类似语言课程,但多数属于初学,并不精通[2]。如果数据结构使用C来进行描述,可能由于学生在学习C语言过程中多为初学,再加上接受能力和学时的限制,致使C语言中的函数、指针和结构等知识点理解不够深入,为数据结构课程的教学埋下了隐患。如果数据使用C++语言来进行描述,由于类等众多概念不能深入理解,其数据结构课程的教学效果可想而知。 1.2 本课程的性质决定教学难度高 数据结构课程的理论性和抽象性使学生学起来很困难。首先,学生对C或C++语言中的函数、指针和结构体、类等知识点本身理解就不够,一下子跨度到数据结构,学生难以接受。其次,本课程要求学生在理解数据逻辑结构、存储结构等基本概念的基础上建立算法,最终掌握对数据以及数据之间关系的处理方法。但是这些基本概念和数据在内存中的表示等知识非常抽象,学生很难建立起概念来。 2 课程教学改革 2.1 数据结构与语言课程的融合教学模式 语言课程特别是C和C++语言是《数据结构》的先行课程。学生对它的熟悉、掌握程度,直接关系到数据结构课程的教学效果。语言课程一般开在大一上、下两个学期,教学时间大部分花费在基本概念及简单程序的编写上,对数组、结构体、指针、类等复杂数据类型学习不够,更谈不上对类、结构体、指针这些数据类型的认识和理解。但是,这些内容是数据结构课程的重要基础,在数据结构课程中使用频率很高。在数据结构课程教学中,尽管老师费尽唇舌,学生仍然模糊不清,致使教学效果不理想,学生甚至丧失对该课程学习的兴趣和信心[3]。 多数学校在语言课程和数据结构课程的安排上,采用不用教学来讲授上述课程,导致数据结构课程老师在对学生语言课程学习把握的不准确,最终影响教学效果。这里建议采取“一师制”,即讲授语言课及数据结构两门课为一班一师,做到了前导课、后继课的有机衔接,教师能够在教学中自觉做到二者的相互融合。同时,对两课教学重点、分配时数、知识融合、教学模式进行实证探索研究。在教学中通过对作业、实习、实践等环节的指导及分析,加强对学生技能的培养。通过这种授课模式,同学们学习数据结构不再感到枯燥,不仅较好地解决了数据结构教学中学生上机困难的问题,也提高了学生程序设计的能力。 2.2 多种教学手段结合 充分运用多媒体教学手段固然重要,但有时传统的板书也尤为重要[4]。比如在讲解链表的插入和删除算法时,就非常需要教师在黑板上画出整个算法的演变过程[5]。同时也要求学生在本子上画出链衷的插入和删除过程,并教给学生当自己看不懂或写不出算法时,就采用画图形的方法。如果学生不勤于动手就会事倍功半。因此在充分运用多媒体教学手段的同时,除运用Flash动画软件演示数据运算过程外,还应结合板书,让学生看清每一步的演变过程,这样将取得事半功倍的效果。 2.3 加强实践性环节教学,提高学生创新能力 《数据结构》是一门实践性很强的课程,实践环节对教学质量的影响很大,抓好实践环节,将培养学生良好的程序设计习惯,提高学生的创新能力和实践能力,为将来进行软件开发和科学研究开发打下坚实的基础。可采用实验、课程设计、学习竞赛等形式加强学生程序设计能力的训练,并实行考核制,含实验课考勤情况、程序验收、实习报告、课程设计等,按30%纳入期末成绩,从而促进知识的融合。 3 结束语 教学中,通过贯彻上述教学方法和教学模式,经过一轮C语言课程与数据结构的融合,在上述课程中采用多媒体教学,并在实验和实训环节加大教学力度,取得了很好效果。 参考文献 [1]张小刚,李向阳.《数据结构》课程教学改革探讨与实践[J].阿拉尔:塔里木大学学报,2008,20(2):93-95. [2]王会,余阳,杨云超.《数据结构》课程教学存在的问题及对策[J].福州:福建电脑,2006(12):207-208. [3]蒋秀英.《数据结构》与《程序设计》的融合教学模式研究[J].济南:山东师范大学学报(自然科学版),2008,23(3):130-131. [4]王志刚.关于《数据结构》课程教学方法的探讨[J].北京:办公自动化,2008(6):56-58. 鉴于数据结构课程的重要地位, 许多学校和教师都对数据结构课程进行了有益的探索和改革。但在实际教学中仍然存在一些问题, 本文首先提出了数据结构教学中出现的问题, 详细分析了其原因;其次有针对性地提出了5项改革措施并进行了尝试, 最后提出了进一步改革的设想。 1 存在的问题及其原因 通过教学实践, 发现学生一般都能认真对待本课程的学习, 但教学效果并不十分理想, 主要存在以下两个问题。 (1) 没有从学科的高度把握数据结构课程, 没有充分发掘将数据结构与各专业课程的内在关系, 教学时往往局限在本课程范围内, 缺乏应用实例。事实上, 数据结构是大部分计算机专业课程的基础, 如何做到即有丰富应用实例, 又启发学生对后续课程的兴趣是值得研究的问题。 (2) 学生开始学习时很积极, 时间一长便没有了动力, 感觉枯燥无味。许多学生认为数据结构中各种算法的学习十分枯燥, 经分析有以下三点原因:一是不明白学习这些算法有何意义;二是读算法停留在表面, 无法领会算法的思想;三是学习大量现成的算法, 毫无成就感。 (3) 学生缺乏足够的创新能力, 这一方面由于教学中缺乏对学生创新思维的训练;另一方面是学生创新意识不足, 缺乏创新载体。 结合实际教学经验, 笔者分析了产生上述现象的5个原因。 (1) 学生基础薄弱。 程序设计语言和离散数学是学习数据结构课程的基础, 通过程序设计语言的学习, 使学生经过必要的程序设计训练, 形成一定的程序设计抽象思维能力。而离散数学使学生理解计算机的运算规则, 形成计算思维。然而, 部分学生尤其是非计算机专业学生的程序设计能力偏弱, 也缺乏从计算机角度考虑问题的思维习惯。对于这些学生来说, 知识基础薄弱, 原有的知识体系不完善, 数据结构的相关知识找不到生长点, 导致难以理解数据结构中的概念和算法。即使领会书本知识, 由于编程能力欠缺, 很难应用所学知识。时间一长, 学生缺乏自信, 学习热情衰退, 产生厌学情绪。 (2) 课程本身较抽象。 数据结构课程本身是一门抽象程度较高的课程, 对于缺乏实际应用经验的学生来说, 理解起来具有一定难度。不少同学反映学完该课程之后不知道能用在什么地方、能够解决什么问题, 即使教材上所讲内容都完全掌握, 仍然无法应用到实际问题当中。很多学生除了课堂上讲的例子外, 找不出该知识点的其他应用, 同时遇到实际问题时, 也想不出该问题的抽象数据类型。 (3) 学习缺乏主动性。 不少学生满足于掌握课堂讲授的知识和完成布置的作业。然而课堂学习受课时限制, 很难进行深入和扩展, 这导致学生只停留在数据结构的基本概念和原理上, 在学习的意义, 数据结构的应用和更深层次的理解上缺乏思考, 从而使得知识的应用和迁移能力较差。 (4) 学习方法不当。 数据结构是培养学生的抽象思维能力、逻辑推理能力, 锻炼学生分析问题、解决问题的能力的课程。建立完整的知识体系, 使知识融会贯通, 并能灵活应用是教学的最终目标。有部分学生死记硬背概念和性质, 生搬硬套书本上的存储结构和算法, 这完全背离了培养目标。另一个普遍的问题是对上机实验准备不足, 在宝贵的上机时间内忙于设计程序结构, 编写代码, 从而失去了调试代码, 发现问题解决问题, 以及与指导教师进行交流的机会。 (5) 教学方法有待改善。 由于数据结构课程的重要性, 相应的教学改革十分受重视。各种教学方法和教学思路被提出, 如情境教学[2]、构建主义[3]、研究性教学[4]、启发式教学[5]等。但仍有一些问题, 如知识体系不清晰, 重点不明确, 只讲算法过程不讲算法原理, 缺乏案例, 讲授内容过于抽象等。 2 教学中采取的措施 总结出问题产生的原因后, 我们有针对性地采取了以下5个措施。 (1) 广泛联系, 不断复习, 逐步扩展。 数据结构内容较多, 对于各种数据结构如果分别单独学习, 很容易将各种数据结构人为地分离, 学生很难做到融会贯通和综合应用。事实上, 许多实际问题需要综合多种数据结构, 利用各种数据结构的优点配合使用。因此每学完一个新的数据结构后, 有必要结合之前学习过的数据结构, 设计一些多种数据结构综合或对比的思考题。例如, 如如何用两个栈实现一个队列, 基于两种不同存储方式的大整数运算及性能比较, 如何设计算法能够对树的顺序存储和链式存储进行转换等。 除了精心设计的题目外, 在授课过程中遇到之前讲授过的知识也应及时提示学生, 让学生有一个回忆和复习的过程, 如链式存储的线性表的插入、删除操作与单链表十分相似, 可以在单链表基础上经过简单扩展得到;森林的遍历与对应的二叉树遍历存在等价关系, 可以通过验证说明两者的等价关系;树的孩子兄弟表示法和二叉树中的二叉链表存储是一致的, 可以进行对比演示;森林和二叉树的相互转换是相逆的操作, 可以在学习完其中一个方面的转换后, 马上得到另一方向上的转换方法;二叉搜索树的存储结构实际上是集合存储结构和二叉树存储结构的组合;有序表的搜索算法是对无序表搜索算法的一种改进等等。 (2) 应用现代化教学手段变乏味抽象为生动具体。 数据结构课程中的各种结构和算法十分抽象, 理解起来有困难。教师可以借助现代化的教学手段使讲授内容变得生动具体, 单链表结点的插入、删除中的指针修改、循环队列的使用、各种排序算法、二叉搜索树结点的删除、二叉树的遍历、递归调用等难点算法都可以用动画演示, 这样理解起来更加直观生动。另外可以网上下载或者自行设计算法演示软件来演示算法。算法演示软件比单纯的动画更好一些, 它可以进行参数更改、单步执行、回退, 有助于深入理解算法。 (3) 因材施教, 重在网络课堂。 利用网络课堂辅助教学对改善教学效果十分有益。借助网络课堂的发布功能, 可以把电子教案、多媒体课件、参考资料、课后习题、教学录像等各种课程资源提供给学生;另外, 网络课堂的论坛和答疑系统为学生和老师提供了一个交流平台, 学生可以随时向同学或老师提问, 任课老师也可以与学生充分交流, 及时掌握学生的学习动态, 调整教学方法。 网络课堂的另外一个作用是实现个体差异化教育。传统的集中授课方式难以实现因材施教, 而网络课堂的出现可以让学生根据自身情况, 选择素材进行学习。对课堂讲授知识不清楚的学生可以下载课件、教案和教学录像慢慢消化;对于能力较强的学生, 可以下载课外材料, 学习更加深入的相关知识, 对于自己解决不了的问题, 可以通过答疑系统向老师请教。 (4) 专业课程体系让兴趣可持续发展。 数据结构课程是操作系统、编译原理、数据库系统、计算机网络等一系列专业课的先修课程。数据结构在这些后继课程中存在大量应用。教师可以优先例举这些专业课程中的数据结构应用作为案例。如编译原理中的词法分析程序、操作系统中的中断、计算机网络中的主动队列管理、路由表的构建和维护等问题中采用的数据结构。这样做能让学生认为数据结构对后续课程的学习很重要, 有必要学好这门课。另一方面, 一些学生仅对计算机领域中的某一方面感兴趣, 在课堂上结合后继课程中的例子讲解数据结构知识, 有利于将学生对某一领域的兴趣或者某一门课程的兴趣扩展到数据结构中来。 (5) 改革考核方式, 培养综合能力。 我校数据结构考核是平时40% (包括课堂提问、到课情况、作业、实验报告等) , 期末考试60%的模式。应该说基本体现了重在平时的考核理念。但是在具体实施中仍存在一些问题, 虽然加大了平时成绩比例, 但是作业、实验报告并不能准确反映学生表现。笔者将平时成绩分配为随机课堂提问占10%, 包括到课情况;大作业、参与项目或者竞赛情况占10%, 参与项目或参加竞赛的以项目情况和竞赛成绩为参考, 没有参与项目或参加竞赛的学生需要做一份大作业, 3人一组, 题目可选, 期末进行答辩, 按答辩成绩给分;实验表现占10%, 指上机过程中的表现, 包括实验完成情况、程序的质量 (时空复杂度、风格、功能、易读性、完整性等) 、实验课上与指导教师的交流情况等;平时作业和实验报告占10%。 这种考核方式更注重学生学习过程、能力表现尤其是实验动手能力。以“实时表现”替代“书面印象”。这有利于培养学生的学习习惯和综合能力, 同时也有利于提高学生学习的积极性和主动性。 3 进一步改革的设想 《数据结构》课程具有逻辑性强、结构特征明显的特点。因此, 以布鲁纳认知发现说和奥苏泊尔认知接受说为代表的认知主义学习理论是一种有效进行创新型能力培养的《数据结构》教学方法。作者计划研究认知主义在《数据结构》课程教学模块中的应用。主要包括: (1) 分析和收集教学素材; (2) 对知识模块进行改造; (3) 设计发现学习的背景和引导步骤。在不断实践和探索的基础上形成各知识单元的认知主义教学方法。 4 结语 本文针对在数据结构教学过程中所发现的问题进行讨论和改革, 提出了5个方面的改革措施并在实际教学中应用, 实践证明这些措施取得了良好的教学效果, 笔者对进一步的改革提出了一些设想, 希望能够更好地提升教学效果。 参考文献 [1]严蔚敏, 吴伟民.数据结构[M].北京:清华大学出版社, 2007:1~10. [2]段明秀, 陈国平.何迎生.内外兼修——数据结构课程教学新思路[J].计算机教育, 2011, 2 (4) :30~33. [3]张立, 石岩, 张洪萍, 等.建构主义教学理念下的“数据结构”重点课程建设[J].计算机教育, 2011, 3 (6) :69~72. [4]布辉, 刘冉.研究性学习教学模式在数据结构课程中的应用[J].电脑知识与技术, 2011, 7 (3) :583~585. 课程教学是大学教育的基本组织形式,对课程教学范式进行改革,切实提高高校课程教学质量,已成为高等院校提升人才培养质量必须突破的短板。以改革课程教学范式作为本科教学改革工作的重心,鼓励教师转变教学理念,围绕人才培养目标,对课程教学进行深入研究,形成既符合现代教学理念,又体现课程特色的教学范式,并在实践中不断优化与扩展。通过教学范式改革,提高课堂教学效果和教学质量,提高学生自主学习能力和专业学习能力,进一步优化学校教风和学风。 1教学改革目标 (1)强化学生自主学习能力培养。通过课程教学范式改革,提高学生自学能力,培养学生终身学习的习惯。同时,通过学术气氛和学校生活的熏陶,提高学生自主获取知识的能力。 (2)确立新型课程教学目标。实现教学目标从“知识传递”为主转向“知识传递到融会贯通,再到拓展与创造” 的梯度渐进。具体为:1教学学术观。中心任务是培养学生主动探究与研究、独立思考和解决问题的能力;2教学民主观。教师与学生要在客观知识学习与客观真理的探索中,以平等的身份进行教学沟通;3教学协同观。通过教与学的协同,促使学习更富效率。 (3)明确改革导向。课程教学重心由教师转向学生; 课堂教学重点由知识传输转向能力提升;课程教学方式由固态转向动态;课程学习重心由“听、授”转向自主学习;课堂教学时间管理由粗放转向精细;课程考核方式由结果转向过程。 《数据结构》课程是信息类学科(包括计算机科学与技术、信息工程、信息管理等)的基础课,有着重要的基础作用和地位。《数据结构》内容涉及数学、计算机硬件和软件,相比其它课程而言,更加复杂,学生学习尤显困难。需根据课程特点设计改革方案,并根据教学效果以及新的教学理论不断改进,使方案更新。 《数据结构》课程教学的难点与重点是算法设计,它比前导程序设计课程中的算法设计难度要大得多。程序设计课程中的算法设计面向无结构的数据,只针对无结构的数据加工过程,不考虑程序中数据结构的描述和实施。而 《数据结构》课程的程序设计既要考虑对问题数据结构的描述和实施,还要设计针对带结构的数据加工过程算法[1]。根据《数据结构》课程的特点,创新教学方法,利用课程群的解时空分析和程序阅读方法;充分利用网络手段,如QQ、微信、邮箱等。 2教学内容改革及教学设计 对课程讲授内容及其层次、顺序进行调整,以3种基本数据结构:顺序结构、树形结构、图形结构为核心,按两个层面展开:先逻辑结构层,再物理结构层。每一种典型的物理结构,如顺序表、单链表等以一个案例展开,讲解基本运算、对应的逻辑结构、相应的应用程序,如图1所示。 对逻辑结构层,传统讲授顺序一般为:逻辑结构层数学描述→逻辑结构层图形描述→物理结构层实现、基本运算、应用程序。根据教学范式改革思想,对其讲授顺序进行调整,即:先分析图形描述方式;然后对物理存储结构层、基本运算、应用程序进行分析;最后对逻辑结构层的数学描述进行分析。目的在于以具体、直观、形象的图形描述作为切入点,便于学生掌握。在从逻辑结构、物理结构、 基本运算,到应用程序分析的整个过程中,简化内容,明确重点。以针对“具体逻辑结构的物理存储实现创建”算法设计和实验为重点,一方面分析该逻辑结构与物理结构的概念;另一方面,展开基本运算以及应用程序的算法设计和实验。例如:线性表的顺序表和单链表的创建与实验是线性表的核心,整个线性表的内容围绕其展开分析。以往该课程以逻辑结构与物理结构中诸多基本算法为核心,容易分散学生的注意力,缺乏一个突破性的切入点。对核心内容安排较多课时、强化方法。精简有关内容,将字符串、 特殊矩阵简化为介绍;线性结构、树结构、图结构中的一些复杂内容与算法,例如:双端队列、平衡二叉树、最短路径等,不安排讲授,让学生选学。精简内容的目的是腾出更多课时讲授主要数据结构。 3教学方法创新 根据范式改革的核心理想,结合课程特点,对教学方法进行探索与创新,突出教学特色。《数据结构 》课程理论性和实践性强,要求改革教学方法,提高教学效果,提高学生学习效率和学习兴趣。 针对 《数据结构 》 课程,引入课程群的解时空方法和程序阅读方法。 计算机程序设计类课程群涵盖《程序设计》、《数据结构》、 《面向对象程序设计》等课程。 程序设计类课程群的共同目标是解决程序设计问题,即程序设计= 数据+ 算法+ 语言,其中,数据+ 算法为程序设计的核心,简化公式即为:程序设计= 数据+ 算法。 在课程群内,不同课程的程序设计实现形式有所差异。 在课程群中解决问题,实际上拓展了解决问题的空间。 改变以往直接训练学生程度设计能力的方法。 此外,采取程序阅读的方式,让学生掌握程序设计的思想、方法和技巧。 程序阅读过程分为3个阶段:理解程序结构、模拟计算机执行程序、上机验证。 其中,模拟计算机执行程序是阅读阶段的难点,对程序执行进行模拟,逐条语句模拟执行,并记录所有变量或对象等的内容及变化。 程序阅读将程序知识与实践有机结合,学生能从程序阅读中完整地掌握程序设计,是一种掌握程序设计的有效、简便方法。 4教学互动 范式改革的教学交互有3种方式:引导方式、讲授方式、讨论方式。指导学生如何高效开展自主学习,引导内容包括:1知识来源,例如:参考书、网站、演示程序或PPT等;2课程任务、内容、顺序、结构、过程;3安排自主学习的训练方式,如做习题、做实验、做课程设计、小组讨论。通过教师的系统性讲解,对学生进行知识传递。讲授方式包括:课程讲授、视频讲授。讨论的作用是让教师与学生在平等、自由的氛围中交换对知识的理解,讨论方式包括:课堂讨论、实验讨论、网上讨论等,如图2所示。 上述3种方式各有特点,引导方法教师花时少,但知识传授量小,适合知识融会与知识拓展;讲授方式所需时间较多,适合知识传递,但不适合知识融会、拓展、创造;讨论方式所需时间较多,信息互动,尤其适合知识融会、拓展、创造,适合难点知识与重点知识的深度理解和掌握,但不适合知识传递。 在范式改革理念下,教师与学生是自由、平等、民主的。其强调知识的客观性,即知识不因人而异,不以人的意志转移而转移。同时,由实验与实践来检验检验知识的真伪。教师仅是知识掌握时间上占有优先权,没有其它特权。在整个教学过程中,都要体现这种自由、平等、民主, 而不仅仅只在课堂讨论环节上体现。教学中,结合课程内容的特点和目标,采用不同方式。重点内容除了重点讲授以外,还要进行讨论,例如:线性结构的顺序表与单链表的创建程序、二叉链表表示的二叉树创建程序、图的邻接矩阵和邻接表的程序等。 5结语 教学范式改革涉及教学理念、教学方法、教学内容,是动态的改革,而不是一个固定模式的推广,需要教师深入理解,结合课程特点,在课程教学各个环节实施,在实践中不断改进与更新。 摘要:课程教学是大学教育最基本、最重要的组织形式。提升人才培养质量迫切需要符合现代教学理念,又体现课程个性化的教学范式改革。《数据结构》课程是计算机与信息类专业的核心基础课。围绕范式改革的核心思想,结合课程特点,总结教学经验,创新教学方法,采用新的教学工具和手段,对《数据结构》课程教学范式进行探索,突破传统教学理念和模式,为培养高素质、高质量的专业人才奠定坚实基础。 【数据结构课程】相关文章: 课程感想-数据结构04-08 《数据结构》课程教改08-25 《数据结构》课程实验报告04-08 数据结构课程设计汇总02-21 数据结构课程设计题目02-21 数据结构课程设计要求02-21 数据结构课程设计方案05-15 数据结构课程设计排序07-10 数据结构课程设计提交07-17 数据结构课程实习报告02-21数据结构课程 篇6
“数据结构”课程教学策略初探 篇7
《数据结构》课程教学改革研究 篇8
数据结构课程教学改革研究 篇9
《数据结构》课程教学范式改革探究 篇10