“数据结构”实践教学(共12篇)
“数据结构”实践教学 篇1
摘要:本文作者对高职《数据结构》课程实践教学的重要性、存在的问题, 提出了实践教学的探索和实施方法, 得到了一定的实效。
关键词:高职,《数据结构》课程,实践教学,探索
1. 引言
《数据结构》是计算机程序设计的的重要理论技术基础, 它不仅是计算机类各专业的核心课程, 而且是其它专业的重要选修课。《数据结构》是实践性很强的课程, 本课程的教学不仅要注重学生对理论的理解、学习基本理论知识, 更要注重培养学生的实践能力, 通过上机实践验证算法的正确性, 掌握和巩固所学理论知识。
通过本课程的学习, 学生能够学会分析研究计算机加工的数据结构的特性, 今后能够针对具体问题选择适当的逻辑结构、存储结构, 以及相应的算法, 编写出结构清晰、正确易读、符合软件工程规范的程序, 为进一步学习后续专业课程和软件开发打下坚实基础。
因此, 《数据结构》课程教学中实践教学有着相当重要的意义。
2. 高职《数据结构》实践教学的重要性
目前, 我国正在大力发展职业教育, 国务院作出的《关于大力发展职业教育的决定》, 要求“落实科学发展观, 把发展职业教育作为经济社会发展的重要基础和教育工作的战略重点”[1]。《中共中央国务院关于深化教育改革, 全面推进素质教育的决定》中指出:“加强课程的社会性和实践性, 重视实验课程的教学, 培养学生实际操作能力。”因此, 培养出合格的高职学生是目前各高职学校亟待解决的问题。高职教育不能等同于普通高校的教育, 对《数据结构》的教学要体现出高职教育特色, 我们要充分认识到实践教学的重要性和创新性, 要使学生学好《数据结构》尤其要注重本课程的实践教学[2]。
《数据结构》课程性质本身决定了实践教学的重要性。《数据结构》课程实践教学包括两方面: (1) 与课程教学同步的上机实验; (2) 课程结束后的课程设计。在整个教学过程中, 两者缺一不可, 相辅相成。通过两方面循序渐进地训练, 学生能掌握更多的程序设计技巧和方法, 提高分析问题、解决问题的能力。
3. 当前《数据结构》实践教学中存在的问题
《数据结构》研究的是各种数据结构中元素之间的逻辑关系及在计算机中的存储实现[3]。只有通过实践环节, 学生才能够更加感性地掌握这些数据结构所适用的运算及其实现和应用。然而, 当前《数据结构》实践教学中存在着较多问题:一是由于我国办学的历史原因, 高职的教材和大纲基本上都来自普通高校的教材和大纲的改编和缩编版本, 很少有适合高职教育的《数据结构》的教材;二是由于高职学生相对普通高校学生基础差, 底子薄, 因而在学习本课程时产生了畏难厌学的情绪;三是学生在学习《数据结构》时, 由于对前驱课程 (如C语言) 掌握得不够熟练, 导致学习本课程困难;四是学生普遍实际动手能力较差, 实践不能够佐证理论;五是学生认为这门课程理论性太强, 太抽象、枯燥, 面对具体问题时, 不知该如何应用学过的知识来给出切实可行的解决方案, 理论不能够指导实践。
4. 解决上述问题的几个前提条件
要解决上述问题, 使得教师教好数据结构, 学生学好数据结构, 我们必须做好准备工作。
4.1 制定合理的教学计划, 正确处理理论教学和实践教学
的关系。
教师在授课之前一定要合理地制定教学计划、进度, 这首先是教师对课程教学认识水平的一个重要体现, 其次关系着这门课程的教学能否正常进行开展。总体而言, 教学计划应该详略得当, 同时考虑高职的特点。
教师要教好数据结构, 学生要学好数据结构, 最为关键的一点就是注重并正确对待理论教学和实践教学的关系。教师应在计划中以理论为基础, 偏重于实践, 对于《数据结构》这门课将理论和实践比例协调在2∶1到1.2∶1, 在教学计划中能够按照知识体系的铺展将教学分成理论教学和实践操作两大模块, 相互交叉进行, 并将实践操作模块分为教学内容实验和综合实验 (课程设计) 。
这就要求教师不断提高自身素质, 能够根据学生实际学习情况, 以及对数据结构等计算机知识的需求, 做个教学有创新意识、不断进取的新型教师。
4.2 选取好教材。
所谓好教材就是要具有高职特色, 教师在教材内容的选取上应坚持以学致用、学用结合的原则, 集先进性、科学性和实用性于一体, 尽可能地将最基础、最适用的软件写入教材, 略去一些纯理论的推导和繁琐的数学证明;在内容的深浅程度上, 把握理论够用、侧重实用、由深入浅的原则。同时, 教材文字要浅显易懂, 衔接自然, 逻辑性强。由许乐平主编的《数据结构———C++描述》是一本非常适合高职的教材, 其配套的《数据结构学习指导与实验》也是一本非常好的实践教学用书[4]。
4.3 注重教学过程、合理实施教学组织、理论能够指导实践。
教学过程包括教师、学生、教学内容、教学手段和方法等基本要素, 彼此联系, 相互影响, 形成了错综复杂的关系。教师要注重教学过程, 采用启发式、讨论式、任务驱动式等多种教学方法设计好教学过程, 并正确分析、认识和妥善处理这些关系, 以提高高职课程教学质量。
教师实施教学组织要根据教学内容, 合理安排教学进度, 注重节奏教学, 精心准备, 激情授课, 强调交互式教学, 深入浅出, 理论联系实际, 突出原理的应用;同时能够以人为本, 诚心与学生交朋友, 推崇亲情教学。
对于高职学生, 我们要重点培养其解决实际问题的能力, 以应用知识为主, 衡量学习成绩的标准不是知不知道, 而是会不会干;所学的理论知识要能够指导实践。教师在教学过程中应尽量多采用一些动态效果来描述算法的思想, 使学生易于接受和理解, 并加深印象;尽可能将前后内容联系起来, 从中寻找一些规律, 进行归纳提炼和使其系统化, 使学生能较好地理解各个知识点间的联系, 从而降低课程的复杂度;在课堂上多举一些编程中常用到的一些数据结构中的算法, 让学生知道这些算法都是用来干什么的;最后通过合理、有效地设计实践内容, 来强化理论教学的效果, 从而起到理论指导实践的作用。
任务驱动教学法是一种非常好的教学方法, 其实施过程为:提出任务→分析任务→完成任务→交流总结。在理论教学和实践教学两个模块中教师都可以很自如地运用这个方法。
5. 实践教学探索
国务院《关于大力发展职业教育的决定》要求“加强职业院校学生实践能力和职业技能的培养”[1]。《数据结构》由于其课程地位的重要性, 课程的实践教学不能单纯考虑课程本身, 而必须综合考虑多个方面进行。加强实践, 培养学生实践操作技能是本课程教学重点, 也是高职教学的重要环节。
5.1 实践教学内容的设计。
教师要根据学校实际教学条件和本课程知识体系的特点, 合理安排实践内容, 合理选题, 立足基本, 以培养学生动手操作能力为主, 既要巩固课堂知识、拓宽知识面, 又要培养学生的分析问题、解决问题的能力和创新能力。
5.1.1 实验课的题目安排要做到立足基本、分开层次、注意难易搭配。
至少要求学生完成以下模块的实验 (基本实践) : (1) 线性表操作; (2) 栈和队列的应用; (3) 二叉树的操作; (4) 图的操作; (5) 查找; (6) 排序。例如在“线性表操作”实验中, 可以设置以下题目: (1) 分别用数组和链表实现线性表的逆置; (2) 分别用数组和循环单链表实现约瑟夫问题; (3) 一元多项式的加法。通过这种分层教学法, 学生可以根据自己掌握理论知识的实际情况, 选择做较难的还是稍易的题目, 每一位学生都能够上机编程, 提高自己的动手操作能力。
5.1.2 科学设置课程设计。
课程设计是《数据结构》实验教学中必不可少的一个重要环节, 它是学生对所学课程知识的综合运用, 能够很好地培养学生全面、灵活的设计思想和较高的创新能力, 加深学生对该课程所学内容的进一步理解与巩固[2]。因此如何科学地设置选题是本课程实践教学的一个至关重要的环节。建议设置一些具有综合性和专业性的题目, 同时兼顾典型性、趣味性, 比如:停车场管理、职工工资管理系统模拟、民航自动售票系统、舞伴匹配问题、类似记事本的文本编辑器、若干旅游城市的旅游线路选择等。学生课程设计前至少提前一个月给学生布置下去, 供学生选择, 给他们较充分的时间去思考、查阅资料、论证可行性, 在可行的基础上编写程序, 准备到机房实践验证, 避免杜绝学生为了应付检查而出现“抄袭、拷贝”现象。课程设计对教师而言不是给出一个或若干选题就是任务完成, 而要自始至终贯穿整个实践环节。
5.1.3 实践题目形式的设计。
对于实践环节, 传统的题目无论实验还是课程设计往往是给出文字叙述的题目和一些测试数据, 就由学生去完成, 通常再由教师给予一定的指导。但事实上, 实践环节的题目形式应该是可以多样化的。笔者曾做过一些探索尝试: (1) 借鉴全国计算机三级考试上机考试的形式, 除了给出文字叙述以外, 还给出大部分程序, 要求学生完成实现某个功能的函数; (2) 借鉴程序员考试除给出文字叙述以外, 还给出基本完善的程序, 缺少若干语句, 要求学生进行语句填空; (3) 除了给出文字叙述以外还给出一个基本完成的程序, 但包含若干细小的错误, 要求学生根据测试数据测试情况进行排错。其中 (3) 能够更好地考查学生的能力, 也更加适合高职学生的能力实践, 因为高职计算机专业学生就业目标之一就是成为软件测试员。
5.2 开设《数据结构》兴趣小组, 培养学生的团队协作精神。
培养学生的学习热情, 无论是理论教学还是实践教学对学生的学习都非常重要, 而在《数据结构》实践教学中作用尤为突出。教师可开设兴趣小组, 鼓励一些能力突出的学生利用“数据结构”理论, 结合相关的软件工程的知识, 针对一些特定的课题或者具有实际市场价值的系统项目进行相关研究, 这样一方面可以激发学生的学习兴趣, 增强学生的编程能力、系统分析能力和科学创新能力, 另一方面可以培养学生的团队协作精神。此项工作可以借助微机协会的指导或者和学校竞赛辅导小组相辅相成, 经过尝试可以发现: (1) 小组的成员往往能够领先完成每次实验的内容, 以他们为核心, 周围的学生也基本能够顺利完成实验。 (2) 通过研究趣味性的题目, 小组成员常常进行讨论, 有时组员依次发言, 就自己所研究的问题、所得到的收获、所想到的解题思路进行阐述, 并指出自己选择这种解决方案的原因, 通过相互讨论, 并由实践指导教师进行点评, 指出方案中的优点、不足和需要改进的方法, 小组成员感觉到这种方法能够学以致用, 学习积极性大大提高, 虽然兴趣小组开发不了大型的或者实用的程序, 但经过教师指导, 小组成员普遍反映这种方式既加深了对数据结构知识的理解, 又增加了开发经验, 获益匪浅。 (3) 在实践环节的课程设计过程中, 尤其对应后面涉及的几个较大的题目, 学生既可以借助兴趣小组的概念, 又可以自由组合, 甚至由教师指定分组, 以小组的形式共同实现它们。教师要以培养学生的动手操作能力和团队协作精神为目的, 鼓励学生互相沟通、共同探讨、共同参与, 发挥各自的优势, 达到共同提高的目的;同时要指导学生相互分工合作, 从功能分割模块到模块间参数传递, 乃至综合测试等都要给予学生必要的指导。指定分组的情况往往是:基于学生中实践动手能力有强弱的区分, 分组务必使得每组学生中都有动手能力较强的学生, 由他们负责所在小组的实验, 指定他们做一些实验辅导工作, 这样变教师指导实践为学生指导实践, 能够充分调动学生参加实践的积极性。通过相互合作学生不仅得到了互相学习的机会, 而且激发了学习热情, 培养了团队协作精神, 为以后的实际工作打下良好的基础。
因此, 开设“数据结构”兴趣小组, 解决一些特定课题或者实际生活中的问题是一项很有意义的尝试。
5.3 实践教学方法及过程管理的改进。
5.3.1 以学生为主体, 加强教师在实践教学中的主导作用。
改革实践教学方法就是要注重学生是主体, 通过对学生的系统引导, 充分调动他们获取知识的积极性和主动性, 增强他们的能力, 提高学生的素质。实践是整个教学过程中的一个重要环节, 实践教学的方法直接影响着学生对实践的态度, 也影响着他们的动手能力、创新意识的培养。
5.3.2 学生实践过程的组织和管理。
根据《数据结构》课程的特点, 我们可以采取范例演示、独立实践与分组实践及上述三种方式交叉出现等多种形式进行实践活动。基于现有条件和培养团队精神的角度出发, 我们可以对实验采用独立实践, 课程设计采用分组实践来组织实施实践教学活动, 一方面所有的学生都能够按照基本要求掌握数据结构必需的基本操作, 另一方面学生通过分组可以相互学习、相互讨论切磋, 提出一个最优方案后再实施, 从而加强学生之间相互沟通和合作精神, 为将来从事IT业需要群体合作的工作打好一定的沟通基础。
教师要以学生为主体, 改变自己在教学环节中作用, 有针对性地选择学习内容, 不再“满堂灌”, 进行共性化与个性化相结合的教学。
5.4 改革考试方式, 加强实验考核。
传统的考核方式多是闭卷笔试, 对于实践性很强的《数据结构》这一课程, 单纯用笔试已经很难准确和完整衡量一个学生的知识水平和运用能力, 必须通过实践操作、上机考核, 才能真实反映学生所掌握知识技能。对于高职生, 我们应该着重考核学生综合运用所学知识、解决实际问题的能力, 促进学生个性与能力的全面发展。因此, 笔者从有利于学生掌握知识, 巩固所学内容, 提高能力和素质的目的出发, 对《数据结构》的考核采取了一系列的措施, 并在城职院许可的范围内进行了一些考试改革的尝试, 强调实验考核的重要性。具体做法是:每次实验课结束后要求学生填写实验报告, 包括实验目的、实验内容、详细设计、实验结果和实验体会。此外, 对考试分数的分配也进行了重新调整, 上机实验和平时作业占总成绩的20%, 课程设计占总成绩的20%, 期末考试占总成绩的60%。笔者通过加大上机实验和课程设计的分值, 有效地调动了学生的学习积极性, 达到了督促学生勤动手、多思考的目的。
6. 结语
总之, 对于高职高专《数据结构》课程的实践教学, 我们应不断探索教学方法策略, 使学生通过数据结构的实践, 提高分析问题、解决问题的能力。只要我们思想上重视实践环节的教学, 提高自身实践教学的能力, 采用合理的教学方法, “数据结构”课程的实践教学必将取得良好的效果。
参考文献
[1]国务院.关于大力发展职业教育的决定.国发[2005]35号, 2005, 11, 09.
[2]王宗亮.高职高专计算机专业课程教学探索与实践.广东水利电力职业技术学院学报, 2005, 9.
[3]严蔚敏, 吴伟民.数据结构 (C语言版) [M].北京:清华大学出版社, 1997.
[4]许乐平.数据结构——C++描述[M].北京:中央广播电视大学出版社, 2006.
“数据结构”实践教学 篇2
数据结构实践报告
学
号:
150906112
姓
名:
武锦蓉
班
级:
NET2 班
指导老师:
田喜平
时
间:
2016-12-21
报告文档·借鉴学习word 可编辑·实用文档
项目名称
一、项目构思 程序由三个模块组成:
(1)输入模块:无提示语句,直接输入总人数 n 和报数次数 m,中间用逗号隔开。
(2)处理模块:将元素储存于顺序表中。在主函数中根据报数间隔确定需要删除的元素的位置,在顺序表中设置该位置并删除该位置,同时输出该位置的值。反复设置并删除直到表空。
(3)输出模块:分别在 DOS 下和文件中,按移除元素的顺序依次显示其位置。
约瑟夫环问题中的数据是人所在的位置,而这种数据是存在“第一元素、最后元素”,并且存在“唯一的前驱和后继的”,符合线性表的特点。由于需要模拟约瑟夫环的出列问题,可以采用顺序表来实现线性表,完成出列顺序的输出。
核心算法主要分为两步:
1、确定需要删除的位置,2、设置并删除该位置。
已知报数间隔 m,我们可以把当前位置加上 m 获得需要删除的位置,如果获得的位置超过顺序表中实际元素的总长度,则可以通过减去数组的实际长度来修正(即模拟环状计数)。然后把顺序表中的当前指向位置设置为该位置,继而删掉该位置。
反复进行上述确定位置和删除位置的操作,直到顺序表为空。
程序主要功能模块 1、输入的形式和输入值的范围:
每一次输入的值为两个正整数,中间用逗号隔开。
若分别设为 n,m,则输入格式为:“n,m”。
不对非法输入做处理,即假设输入都是合法的。、输出的形式:
输出格式 1:在字符界面上输出这 n 个数的输出序列 输出格式 2:将这 n 个数的输出序列写入到文件中、程序所能达到的功能:
对于输入的约瑟夫环长度 n 和间隔 m,输出约瑟夫环的出列顺序。、测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。
正确:
输入:10,3
输出:3 6 9 2 7 1 8 5 10 4
报告文档·借鉴学习word 可编辑·实用文档
输入:41,3 输出:3 6 9 12 15 18 21 24 27 30 33 36 39 1 5 10 14 19 23 28 32 37 41 7 13 20 26 34 40 8 17 29 38 11 25 2 22 4 35 16 31
错误:
输入:10 3 输出:6 8 7 1 3 4 2 9 5 10 二、程序清单 1、抽象数据类型的定义:
为实现上述程序的功能,可以用整数存储用户的输入。并将用户输入的值存储于线性表中。线性表 ADT 定义如下:
ADT list 数据对象:整形 数据关系:线性关系,即(0≤a<n)。
基本操作:
bool remove(int &elem)//移除一个元素,被移除的元素赋给 elem
//如果操作成功,返回 true,否则返回 false
bool isEmpty()//判断数组的元素是否清空,空返回 true,否则返回false
bool setPos(int place)//设置当前元素的位置,设置成功返回 true,否则返回 false
int getLength()//获取数组的实际长度、各程序模块之间的层次(调用)关系:
主函数会按设计的方法调用顺序表中“获取实际长度”、“设置需要删除元素的位置”、“移除该位置元素”和“判断是否为空表”四种方法方法,使元素依次出列,并正确结束程序。
用整形存储用户输入的整数。
用顺序表实现线性表:
class AList {
private:
int *listArray;//指向数组的指针
int realSize;//数组中含有元素的实际长度
报告文档·借鉴学习word 可编辑·实用文档
int fence;//指向当前元素下标
public:
AList(int s)//构造函数,初始化数组
{
listArray=new int[s];
for(int i=0;i
listArray[i]=i+1;//数组值等于数组下标+1
realSize=s;
fence=0;//指向首元素
}
bool remove(int &elem)//移除一个元素
{
if(isEmpty())return false;//如果数组为空返回 false
elem = listArray[fence];
for(int i=fence;i { listArray[i]=listArray[i+1]; } realSize--; return true; } bool isEmpty()//判断数组的元素是否清空 { if(realSize==0)return true; else return false; } bool setPos(int place)//设置当前元素的位置 { if(place>=0&&place<=realSize) { fence=place; return true; } return false; } 报告文档·借鉴学习word 可编辑·实用文档 int getLength()//获取数组长度 { return realSize; } }; 在主函数中调用上述模块的方法: ofstream fout;//文件流 fout.open(“C:Josephus.txt”);//设置文件路径 int n,m,elem,point=0; scanf(“%d,%d”,&n,&m);//获得用户输入 AList alist(n);//创建顺序表对象 while(!alist.isEmpty())//如果顺序表不为空,继续删除 { m=m%alist.getLength();//调整计数的长度 if(m==0)m=alist.getLength(); if(point+m-1 else{point=point+m-alist.getLength()-1;} alist.setPos(point);//设置当前需要删除的位置 alist.remove(elem);//删除元素 cout< fout< 四、测试结果(截图显示) 报告文档·借鉴学习word 可编辑·实用文档 五、遇到的问题及解决方法 1、初始化部分为循环赋值,时间复杂度为Θ(n)。 2、处理部分,我为了提高效率没有采用循环寻找的方法,直接利用数学关系通过当前位置获得下一位置,因此对于长度为 n 的约瑟夫环,只做了 n 次定位,每次定位的复杂度为Θ(1),所以时间复杂度为Θ(n)。 但是用顺序表实现时,每次其移除的方法是时间复杂度为Θ(k)的(k 与实际长度有关),所以处理部分总的结果是(2)1(n n )的,化简后时间复杂度仍然为Θ(n 2)。 综上,该算法的时间代价为Θ(n 2)。 (PS:如果是用循环查找,在 n 次定位中每次都使用了 m 次的循环,至少是Θ(n*m),然后再用顺序表的移除方法,总的复杂度应该是Θ(m*n 2)的。) 事实上要用线性表来完成这道题,其复杂度最好也是Θ(n 2)的,毕竟对于 n个数据,每个都要进行时间复杂度为Θ(n)的删除工作。欲到达Θ(n)的效率除非不用线性表来实现。 六、体会 输入人数 n,报数间隔 m,创建顺序表对象。 报告文档·借鉴学习word 可编辑·实用文档 主程序 输入和输出的格式: 输入:10,3 输出:3 10(文本中的输出):3 !isEmpty()//顺序表不为空 确定需要删除的位置 关键词:数据结构 教学实践 心得体会 数据结构课程是计算机及相关学科的一门重要的专业基础课,也是一门锻炼程序设计能力的实践课程。它相对于其他应用性课程来说抽象、枯燥,学生学习起来有一定的难度,教师讲起来也比较难讲。那么如何降低理论性程度,增强直观性,提高学生的学习兴趣呢?在三年的教学过程中,我有一些心得体会,本文主要针对如下几方面内容加以阐述。 一、化抽象为具体,提高学生的学习兴趣 学生在开始学习时,往往不理解数据的三种抽象结构形式——线性结构、树型结构和图形结构的来龙去脉。可以通过介绍数据结构在实际中的应用来激发学生的学习兴趣。如图书馆的书目检索系统,如何组织图书的登录号、书名、分类号等数据,才能快速实现查找、插入、删除操作;旅游线路设计问题,如想去北京、上海、杭州等地旅游,怎样安排线路以求花费最少;在楼房工程建设中,如何施工以求工期最短;再如九七年轰动一时的国际象棋“人机”大战,由国际象棋大师与IBM公司的计算机进行国际象棋比赛,为什么最终计算机能够取得胜利等等。以上应用贴近生活,学生都比较熟悉,兴趣就能够被激发起来,形成想学好这门课的愿望。同时在这些具体的问题中也就反映出了数据的三种抽象结构形式。 二、在教学中巩固C语言的知识 C语言程序设计是数据结构的前导课程之一,学生对它的熟悉掌握程度,直接关系到数据结构课程的教学效果。C语言本身的灵活性,对于刚刚学完C语言程序设计的学生而言,运用不一定很自如。另外,C语言难点就是指针、函数、数组作为函数参数以及结构体类型等,而数据结构课程教学过程中主要运用这些知识点来分析和解决问题。为了达到好的教学效果,可以利用一、两次课的时间来复习C语言的相关知识,即数组、指针、函数和结构体等。这样既可以复习以前的知识,加深印象,强化理解,又可以为数据结构课程的教学做铺垫。 三、教学内容的归纳提炼 在教学中,很多学生反映这门课不好学,这是因为“数据结构”不但有很强的理论性,而且具有一定的抽象性。同时“数据结构”课程又有较强的实践性,要求学生能够使用一种语言,对算法进行程序设计,并且能够进行上机调试,对于基础薄弱的学生这就好似“雪上加霜”。作为教师要熟悉教材、精通教材,把握本课程的重点和难点,在教学过程中将前后内容联系起来分析思考,尽量从中寻找共性的、规律性的东西进行归纳与提炼,并将其系统化、具体化。例如从数据结构的定义出发包含三方面的内容:逻辑结构、存储结构和算法。在讲到每种数据结构(线性表、栈、队列、树、图)都会涉及到它的逻辑结构、存储结构和算法。在讲授的过程中可以用数据结构包含的三方面内容作为一条主线贯穿整本书,每讲到一种新的数据结构时都可以拿出这条主线来阐明其上的三方面内容,这样,学生学起来就会觉得有系统性,容易把握。综观全书不论是线性表、树还是图,最基本的、典型的存储结构就是两类:顺序存储结构、链式存储结构,只要把它们掌握得好,整个课程学习的难度就不大。 四、在教学过程中加强实践环节 为使学生真正学好“数据结构”, 除了在课堂上要采用行之有效的教学方法外,还要让学生勤动手,多实践。只有通过实践才能发现“教”与“学”中存在的问题。实践的首要环节首先是要多做习题。要学好“数据结构”,只“看”不“练”肯定是不行的,习题的作用是极其重要的,数据结构课本没有课后题,每章讲完后我都会在网上找习题让学生去做,对出现的问题要及时进行总结、归纳、讲评。这对巩固学生的知识是很重要的。 其次要上机实验。上机实验不仅能进一步巩固对有关内容的理解,同时还能提高学生灵活运用数据结构和算法的能力,使学生在编程、上机操作、程序调试与正确性验证等基本技能方面受到严格的训练。每学期我都会安排学生上机进行实践,上机结束后要求学生完成实习报告,写出自己调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析,算法的时空分析,测试结果,以及经验体会,并附上原程序代码,从而写出完整的实习报告。批改学生实习报告后,对学生的上机实习情况做及时总结,指出成功之处和不足之处。实验表明,这个过程起到了很好的教学效果。 总之,数据结构课程在整个计算机学科的知识体系中具有非常重要的地位和作用,而数据结构的理论性、实践性、逻辑性都很强。只有在教学过程中结合学生的实际情况,优化教学内容和方式,采用直观形象、形式多样的教学方法和手段,充分重视实践教学的重要性,理论联系实际充分调动学生学习的积极性,使学生较好地掌握各种数据结构和算法并提高分析解决实际问题的能力,切实提高教学的质量,才能发挥数据结构在计算机学科知识体系中应有的作用。 参考文献: 严蔚敏,吴伟民.数据结构教程(C语言版)[M].北京:清华大学出版社,1997 数据结构课程是计算机科学与技术的一门核心专业基础课程, 与计算机各门主干课都有密切联系, 具有独特的承上启下的重要位置[1]。同时数据结构又是一门实践性极强的技术基本课, 其内容随计算机科学与技术的飞速发展而不断更新。本课程系统地介绍各种典型的数据结构, 包括它们的概念、性质、实现方法和应用。通过讲授、练习和上机实践, 培养学生根据求解的要求, 选择合适的数据结构, 应用抽象数据类型的思想方法, 组织数据和算法的能力, 进一步提高程序设计水平, 培养良好的程序设计方法, 为将来学习和后继课程打好基础, 因此更新数据结构的实验教学教学内容, 改进实验教学方法, 提高教学质量对培养高素质软件人才起着决定性的作用。 1 数据结构实践教学中困难 在长期数据结构教学过程中。我们发现数据结构实践教学中存在以些问题和困难, 主要表现在如下几个方面。 1.1 课程较为抽象, 学生理解困难 在教学过程中, 学生普遍反映学习难度较大, 理论性太强。的确, 数据结构是一门理论性强、思维抽象、难度较大的课程, 是基础课和专业课之间的桥梁。该课程的先行课程是计算机基础、程序设计语言、离散数学等, 后续课程有操作系统、编译原理、数据库原理、软件工程等。因此即使理论课老师采用各种可行的方法, 例如项目驱动和案列教学法等方法, 但效果并不理想, 实验课学生仍然找不到解决的办法, 造成老师讲得累, 学生听不懂, 上机很难进行的局面。笔者在数据结构的实践教学环节中, 感到学生在上机实验方面, 普遍存在很大的困惑与难点。 1.2 学生对程序设计语言掌握不够 程序设计语言是数据结构的先修课程, 我们学校在大学一年级开设, 数据结构课程在第三学期开设, 近几年, 在第一学期开设程序设计课程, 学生刚进大学, 由于学习目的性不强, 学习方法不正确, 对程序设计的兴趣不浓, 学生难以适应, 程序设计语言课程掌握不够, 从实践教学的角度要求学生必须掌握函数、结构体、指针、递归程序设计方法、动态内存分配方法等语言要素。而这些方面正好是学生的薄弱环节, 直接影响到数据结构课程的实践教学正常进行。 1.3 实验内容设计不合理 数据结构的实验内容选择都是教材中的一些算法或是课后的练习, 或者是课后的实验。一方面传统实践教学中, 实验题目仅针对某一个问题, 体现不出综合性, 也没有和具体的应用相结合, 体现不出应用性[2]。另一方面, 教材中的算法是无法直接在机器中执行的, 必须要把算法思想转化成完整的程序才行, 在实验时要想象应用环境, 分析逻辑结构, 选择存储结构, 算法的调用需要做哪些准备等等, 所以, 没有很好的引导和很强的编程能力也是无法自行完成的。 2 数据结构实践教学内容的改革 长期以来, 课程组重视实践教学, 致力于理论基础和实践教学的完美结合, 形成了保证基础实验, 强化设计实验, 推动综合实验多层次的实践教学体系[3]。 2.1 基础实验属于基本算法题目 针对课堂上讲解的数据结构的基本算法给出程序的大体框架和相关算法, 主要是用来验证算法的基本思想。首先按照实验大纲要求每章编制以验证为主的基础性实验指导书, 每个实验分三个部分, 第一部分, 预备知识介绍本次实验的指导思想和实验一般方法, 内容组织结构概述, 需要的基础和准备工作及环境安装, 注意事项;第二部分, 实验小题, 把本次实验的实验算法用实验小题的形式给出, 主要要求学生在理解算法的基础上, 如何调用这些算法;第三部分, 采用分步骤填空的方式如何实现每一个小题, 实际上就是分步骤填写采用的存在结构, 数据如何存入计算机, 如何调用算法, 需要的数据如何提供, 调用后如何得到运行结果。 2.2 设计实验属于应用性题目 设计实验是在基础实验的基础上, 利用已经学过的基本算法, 让学生自己动手来完成一些具体的应用问题。通过设计实验一方面降低了学习数据结构的难度, 增强了学生学习数据结构的兴趣, 了解数据结构的应用范围, 同时也锻炼了学生的编程能力。课程组根据大纲和教材设计了如一元多项式加法计算、表达式分析与计算、迷宫、停车场管理问题、医院病人就诊、约瑟夫环问题、高速公路建设问题、教学计划编排等问题。对每一个问题, 给出具体指导和要求, 比如, 以一元多项式加法为例, 具体指导内容包括:首先给出两个多项式相加的实际例子, 其次采用何种类型的存储结构来存储多项式的系数, 多项式相加中合并同类项如何实现, 如何建立多项式, 如何输出多项式等等引导学生去思考, 要求学生利用课后时间, 对每一个指导步骤得到准确回答, 题目可以集体讨论解决, 也可以一个学生独立完成。这类实验题目, 学生积极性高, 兴趣浓, 由于可以讨论, 也增强了学习主动性和合作精神。 2.3 综合实验属于课程设计实验 综合实验是给出面向实际应用的稍大一些的实践题目, 课程组根据大纲要求, 编写了数据结构课程设计实验指导, 设置了学生信息管理系统、图书管理系统、集合运算、车票管理系统等综合实验题目。每一题目给出了题目描述、程序应该完成功能和题目要求。以学分管理程序为例, 题目描述:请设计一个学生的学分管理程序, 假设每位学生必须完成基础课50学分、专业课50学分、选修课24学分、人文类课程8学分、实验性课程20学分才能够毕业, 因此在管理学分时, 要考虑每个学分所属于的课程类别。程序应完成功能: (1) 通过键盘输入某位学生的学分; (2) 给定学号, 显示某位学生的学分完成情况; (3) 给定某个班级的班号, 显示该班所有学生学分完成情况; (4) 给定某位学生的学号, 修改该学生的学分信息; (5) 按照某类课程的学分高低进行排序; (6) 提供一些统计各类信息的功能。题目要求:1) 存储结构采用顺序表或链表;2) 用本学期所学算法实现各模块;3) 主函数设计一个菜单, 通过菜单进入各模块测试。 3 数据结构实践教学方法的改革 在教学过程中仅仅有合适的教学内容, 如果没有配套的实践教学方法, 那么实验教学内容就不能很好落实, 实验教学质量也很难保证, 因此, 针对实践教学中存在的问题, 对实验内容进行设计的基础上, 对实验教学方法要进行不断的探索和改进, 我们课程组通过认真实践, 摸索出一套数据结构实践教学方法。 3.1 加强编程能力的培养 针对学生程序设计基础差, 实践动手能力差的特点, 有针对性进行学习和训练。数据结构课程中频繁使用C语言的函数参数传递、指针和结构体等, 对于理解数据结构起到举足轻重的作用, 因此, 教师必须根据学生对C语言掌握的情况, 有目的地讲授一些数据结构所涉及的C语言知识, 强化学生C语言的运用能力, 从而更好地完成数据结构的实验教学, 达到事半功倍的效果, 我校在开设数据结构之前, 特地开设程序设计技能训练, 而且这门课程由数据结构教师来教授, 这样我们课程组教师就可以有针对性的进行项目训练, 并且在此基础上把数据结构中的有关算法引入该课程, 让学生先知道怎样用了, 以后再学习数据结构时, 学生就更好的理解所学概念和知识的来龙去脉了。 3.2 采用启发式教学方法提高实验教学效果 所谓启发式教学, 就是教师根据教学目的、内容、学生的识水平和知识规律, 运用多种教学手段, 采用启发诱导办法传授知定的分析问题、解决问题和编写程序的能力[4]。课程组教师在进行数据结构基础实验时, 课前让学生预习预备知识, 实验课时, 课程组在方法上进行指导, 同时结合实际应用作一些启发性的提问, 使学生知道从哪里入手做, 以及从哪些方面可以作些变化。例如, 在学生链表实验时, 根据教材内容, 问学生, 建立链表有什么方法, 学生肯定回答, 有头插入法和尾插人法, 教师追问, 能不能用插入算法来实现呢?怎么做就可以达到头插入法效果?怎么做就可以达到尾插人法的效果?关于链表长度算法, 常常用“顺藤摸瓜”来比喻, 那么输出模块是不是也可以摸一个输出一个呢?通过一些列的启发提问, 学生渐渐的学会举一反三, 收到良好效果。 3.3 综合性实验采用任务驱动教学方法 综合性实验属于课程设计实践是前两项实践内容的提高过程, 按照任务驱动式的教学方法, 对于实践内容、实践目的、实践结果更有针对性[5]。每个任务按软件工程的方法来实践, 教师提供可选题目, 学生根据自身兴趣进行选题, 老师给出每个题目逻辑分析, 学生进行需求分析, 写出需求分析报告, 在老师的指导下, 学生进行题目的概要设计、对每一模块进行详细设计, 最后代码编写、上机调试。通过这样的交流和讨论, 一方面老师能了解学生的学习情况, 另一方面, 学生对应用程序设计有较深的认识, 也有效杜绝了抄袭程序的现象。 3.4 实验考核方式的改革 考核方式是检验教学内容的正确性及教学方法的合理性的重要手段。我们针对实验内容和形式的不同, 采用不同的考核方式, 对于基础实验, 采用随堂评分的方法, 每次实验结束前对每个学生进行检查, 根据学生实验课的学习态度、出现错误情况、调试程序能力和实验完成情况给学生评分。对于设计实验, 我们采用包括程序演示、回答问题、程序改进和实验报告四个过程。程序演示过程由学生向教师演示自己的编写程序, 教师检查学生程序是否达到预期要求;回答问题过程教师向学生提出与题目相关的问题, 例如题目真正要完成的任务, 每一个模块的算法的思想, 而且要求由非编写模块的同学回答, 这样起到相互学习, 取长补短的作用;根据前两个过程, 教师提出设计中存在的问题和不足, 希望学生再进行改进, 使得程序基本达到预期目标;实验报告要求按指定的格式完成, 同时把应用实例写进实验报告中, 另外还要写明程序在编写过程中出现的问题, 以及解决的方法和实验收获。 4 结束语 经过数据结构实验内容的调整和设计, 实验教学方法的改进和实施, 取得了不少宝贵的经验和可喜的成绩, 使得我校这几年数据结构的课程教学效果有了很大提高, 形成了学生爱好数据结构课程的良好局面。当然, 教学改革和探索是没有止境的。因此, 今后我们课程组将继续探索下去, 设计最合理的实践教学内容, 掌握最有效的实践教学方法, 培养学生分析、解决问题的能力, 为培养合格的计算机专业应用型人才多作贡献。 参考文献 [1]李春葆.数据结构教程[M].清华大学出版社 (第4版) , 2013 (01) . [2]胡学钢, 张晶等.数据结构实践教学体系设计[J].吉林大学学报 (信息科学版) , 2005 (08) :138-140. [3]秦玉平.数据结构课程实践教学改革与实践[J].渤海大学学报 (自然科学版) , 2013 (12) :398-400. [4]米文丽.启发式教学在《数据结构》课程中的应用[J].佳木斯教育学院学报, 2014 (05) :156, 158. (2006-10-02 20:31:34)转载▼ 教学反思,是教师以自己的教学活动过程为思考对象,对自己的某种教学行为、决策以及由此产生的结果进行审视和分析的活动。实践证明,由教师本人对教学实践及其成败得失进行反思,有利于教师及时总结自己的教学经验,培养教师学习、研究的意识,促使教师更好地实现教学理论与教学实践的结合,提高教师的教学能力与水平。 以上是一段从网络摘抄的语句,其实对教学反思是怎样一回事认识并不是很深刻,就像学生前些日子询问的说课,懂得说课,但并不知道怎样跟学生解释什么是说课,只记得一句从网络上看到的话“授课主要是怎样讲,说课主要是为什么这样讲”。 要对上一个月的教学进行反思,是上星期就一直想进行的事情,但始终觉得找不到充实的时间或者是找不到很好的思路。要进行教学反思,主要还应该是对《数据结构》课程的反思,毕竟它是一门基础、核心的专业课程,而且也是系里第一次的开课。 对课程的反思: 1、很重要。数据结构是几乎所有软件方向专业课的基础,学C语言让你知道了什么是编程,而数据结构告诉你该怎么去编程。用网上一个例子来说,数据结构让你知道怎样从一个地方到另一个的路,而C语言等让你知道选择什么样的交通工具去走这些路,你不懂得去北京的路,给神六你坐也到达不了。 2、很多点。既然培养数据的处理能力,又要培养算法设计思路,还要培养实际的应用能力。有点兼顾不过来,理解算法思想倒是能达到的要求,但在实际应用能力的培养上,存在难度。 3、很难学。教师艰难的教,学生吃力的学。理解算法的思想,但如何放到实际中始终是难题,教师难找到合适的方法,学生接受能力有限,经验受制,受程序语言不熟练等影响。 对教师的反思: 1、经验不足。毕竟刚从大学毕业回来,教学经验欠缺,且系里也是第一次开这样的课程。对数据结构这门课本身理解不透,特别在实践方面接触较少,进行过的无非是大学时一些作业。因此在教师教学方法和学生接受能力间找一个结合点是一直苦苦探索的问题,直到现在仍是没有一个明确有方向。 2、目标过大。接受这个可以说是苦差的教学任务后,其实我的有埋怨过,但我更多是考虑如何去实现某些目标。让学生理解数据结构的算法思想,培养学生算法设计的思路,加强数据结构的实用性。从一个月的教学情况,目标定得过高了,特别是实践环节上,过高估计自己的教学能力,也过高估计学生的学习能力。但我直到现在,特别是在实践上,我找不到说服自己放弃的理由,毕竟总觉得学习了思想,不能在编程上实现,或者说是学会了例子,不会变通,算不上学会。我怀疑教学目标,但又放不开手。 3、时间欠缺。由于教学任务的限制,上机实践时间比较少,是以对学生把所学的思想转化为算法进而转化为程序的指导不足。一个月才开了一次实践课,本来已经足够,但对学生的实际情况来说,这还是很欠缺的。 对学生的反思: 1、思想重视不够。首先,作为师范生不重视这些难度偏深的课程;其次,作为计算机学生不重视这些偏向理论的课程;再次,在难学面前退却,没有足够的学习兴趣、信心和耐心。特别在对待操作作业上,一个月过去,第一次的作业完成几乎为零。 2、语言能力较差。尽管上学期学习了C语言,不说程序设计能力,且说C语言的基础知识掌握都是较差的。还是那句,把实践当成了死记硬背来考试,把知识当成了例子来学习。欠缺独立思考,欠缺独立编程。 3、自主协作不行。不能自觉的进行学习,什么都要教师在课堂上讲,或者只局限于课本,不懂得利用网络或参考书进行知识的拓展。也没有形成协作学习的氛围,同学间的交流不够,论坛学习的方法不懂。这归于两个原因,一个自觉性问题,一个班级氛围问题。 4、素质起点不好。这是我一直不想谈及的问题,毕竟我反复的强调过,他们大专生和本科生差别不大,在大学里都是一个新的起点,但在突出的个体上可以这样考虑,从整体上差异总还会存在的。尽管我承认这差异,但我依然否定他们说的智商等先天因素,这些只会是借口。我说的差异,首先就是自觉性,这一点在他们过分追求自由中散失;其次是空闲时间的自由度,学校安排课程过多,时间上和精力上有限;再次是学习氛围,那种泡图书馆和学术争论的氛围欠缺;最后是课程的关联大,一些关联课程如C语言掌握得较差。 对教学的展望: 1、能尽量在课堂教学中贯穿操作实践,引导学生把算法结合数据结构形成程序,但受时间限制较大,只能尽量起到牵引作用,一切还看学生课余时间进行。 2、督促完成第一次作业,毕竟数据结构的思想很多都体现在这次线性表实践作业中,能真正独立思考去完成,对以后课程的学习,相对会轻松很多。接着再进行更高一层次的,利用这些算法去解决实际的问题。 3、引导学生形成自主学习能力的自我培养及协作学习的氛围形成。毕竟这两个能力是计算机专业学生培养的重点之一。 4、细化目标,毕竟这门课是难学的,逐步进行目标,首先,让学生了解数据结构的逻辑特点,各种操作的算法思想;其次,让学生运用编程语言编写程序实现这些算法;最后,把这些编程思想和设计思路运用到实际应用中解决问题。 5、加强师生交流,了解学生想法,了解学生遇到的问题,更好的有目的的教学。 关键词:数据结构;算法;教学;教学设计 中图分类号:G623文献标识码:A文章编号:1006-8937(2009)08-0172-01 1前言 1.1 “数据结构”课程的重要性 “数据结构”在计算机科学中是一门综合性的专业基础课,是介于数学、计算机硬件和计算机软件之间的一门核心课程。主要研究非数值计算的程序设计问题中计算机操作对象以及它们之间的关系和操作等。本课程可以为理解、应用和开发程序提供技术和方法支持, 是程序设计的基础。“数据结构”的教学旨在锻炼学生的抽象思维和创造能力, 培养学生的实践能力, 使学生学会用计算机解决实际问题时能有效地组织、存储和处理数据的方法, 并设计出相应的结构清晰、可读性好、质量高的高效率算法, 为后续课程的学习和计算机应用软件的研制打下坚实的理论和实践基础。 1.2 教学中普遍存在的问题 “数据结构”课程的先行课是相应的算法描述程序设计语言(如C++程序设计语言), 学习本课程要求学生掌握一定的用算法描述语言来编程解决问题的能力。 因此, 基础差的学生对本课程的学习会更加敬畏。另外, “数据结构”课程本身逻辑性强、抽象性高。因此在多年的教学实践中发现, 学生认为这门课程理论性太强、不好学, 学了不知有什么用、怎么用; 当面对具体问题时, 不知该如何应用学过的知识来给出切实可行的解决方案以及编制程序, 得到正确的结果。 2教学设计要点 要解决上述问题, 首先要加强理论教学, 教师在教学过程中尽量多采用一些动态效果来描述算法的思想, 使学生易于接受和理解, 并加深印象; 尽可能多地将前后内容联系起来从中寻找一些规律进行归纳提炼和使其系统化, 使学生能较好地理解各个知识点间的联系, 从而“削减”课程的复杂度。然后通过合理、有效地设计实验内容, 来强化理论教学的效果。 2.1以学生为主体, 温故而知新的教学方法 笔者在教学过程中发现, 由于C 语言是学生最先接触的程序设计语言, 编程思想与以往的思维方式不同, 教学难度比较大, 使得教学时间大部分花费在基本概念上。而学生对数组、结构体、指针这三种数据类型的认识和理解不深, 甚至印象模糊, 对函数、函数的参数、函数的返回值、函数调用的理解也不够, 对递归及递归过程更是难以理解。但是, 这些内容是数据结构课程的重要基础, 在数据结构课程中使用频率很高。对这些内容, 在数据结构课程教学中, 尽管老师费尽唇舌, 学生仍然模糊不清, 致使教学效果不理想, 学生甚至丧失对该课程学习的兴趣和信心。 为了解决这一具体问题, 要求学生在课余时间认真复习C++语言,课堂上结合课程实际适当补充C++语言必要的知识, 培养他们建立程序设计的思想体系, 逐步提高学生阅读和理解算法的能力。在本课程的教学过程中,同时设置、讨论、检查C++相关内容题目,穿插教学、温故知新。在教学中以学生为主体, 改变“ 填鸭式”的做法, 有效设计“ 提问—— 解决方法—— 再提问”的方式, 让众多的学生参与, 用问题去激发学生思考, 引导他们如何解决问题。 2.2多举实例, 调动学生学习兴趣 由于《数据结构》理论性很强, 直接从定义出发讲解相关概念学生不易接受, 在教学过程中, 结合日常生活中的事例引入, 可大大激发学生的兴趣, 从而调动学生的求知欲。 例如, 在讲解栈和队列这一章时, 分别举出日常生活中的事例。如栈的例子, 在刷洗盘子时, 依次把每个洗净的盘子摞到洗好的盘子上面, 相当于进栈; 取用盘子时, 又从上面一个接一个地向下拿, 相当于出栈。又如穿、脱衣服时, 一层一层往身上穿相当于进栈, 脱衣服时, 又反过来一层一层地向外脱相当于出栈。队列的例子, 人们为了购物或等车时所排的队就是一个队列, 新来购物或等车的人接到队尾(即进队) , 站在队首的人购到物品或上车后离开(即出队) , 当最后一人离队后, 则整个队列为空。通过引用实例既形象又直观, 即而使学生更加明确结构与算法的作用, 提高学生运用算法解决实际问题的能力。 2.3注重实验题目实用性和现实性, 提高学生兴趣爱好 在设计实验题目时应注重相关课程和实际生活和学习中的应用, 题目生动、接近学习和生活实际, 学生容易接受和理解, 易调动学习积极性。 2.4用普遍授课,不同设问的教学方法,提高所有同学的学习兴趣 教学中强调学生思考, 针对基础不同的学生采用不同提示和设问, 提高学生的学习信心。教师还应根据学生对基础内容的掌握情况来设计上机实践内容, 采用对不同学生进行不同提示和设问的教学方法, 在实验过程中充分发挥每个学生的思维能力和实践能力, 通过实验, 使每个学生都有不同程度的收获, 以提高他们对该课程学习的自信心。 2.5注意知识点的分类对比、适时总结 《数据结构》课程中很多内容是具有类比性的, 在具体教学过程中我们要把握这方面的特点, 充分挖掘出内容相关的知识点进行分类对比。比如对于《数据结构》内部排序的学习, 我们总共要讲述近十种排序方法, 对于每一种排序方法都要讲清楚排序算法的执行原理、算法的执行效率、算法的执行步骤以及所需存储空间的情况。内容非常多, 学生很容易把问题弄混淆。在教学过程中如果能够对所有算法从时间复杂度、空间复杂度、稳定性等方面进行列表、归类、对比; 然后给出具体的一组待排序数值序列用不同的排序方法通过多媒体演示的方法分别进行排序, 学生便可以一目了然, 轻松的掌握各种排序方法。 《数据结构》课程中同样有很多内容是层层递进, 前后联系的, 比如数据类型的存储结构始终是顺序存储和链式存储两种方式。与此同时, 学生对学过的知识又是分散的、片面的, 无法将知识相互衔接起来, 做到举一反三。这就要求我们在教学过程中要承前启后、不断总结、及时复习、注重理解。以链表学习为例,在线性表章节我们学习了单链表、双链表以及循环链表。它们三者是相互关联、层层深入的, 而后面章节中树的链表表示、图的邻接表和逆邻接表表示、拉链法解决哈希表冲突都是链表的应用。 在授课的时候应注意将前面的内容加以复习, 把有联系的内容相互串联起来形成一个完整的知识体系。 2.6设计综合性实验, 提高学生实践创新能力 综合理论教学和实践教学的结果, 组织学生以小组为单位,由教师布置综合性的题目, 或者由学生自己寻找感兴趣的题目,教师引导学生全面、综合地运用所学的基础知识来解决实际问题, 如开发一套具有售票、退票、查询、统计等功能的火车票自动售票系统, 或编一个学生爱玩的游戏等, 使学生进一步掌握数据结构的应用和软件开发的方法, 提高学生分析问题、组织数据、解决实际问题的能力。学生在整个过程中, 可以相互讨论、交流, 充分发挥学习积极性, 发挥团队精神, 共同进步。把优秀的解决方法放在校园网内供大家学习参考, 或者由完成者进行讲解, 让学生了解其他解题方法, 从中分析和比较不同算法的效率, 教师要及时了解学生对知识的掌握情况、题目的完成情况和学生意见, 有利于及时调整教学方法, 提高教学效果。 3结语 由于“数据结构”课程在计算机专业课程中的重要性, 及其较强的理论性和实践性, 使得它更需要合理、有效、系统地组织教学及实验,形成一个以教学方法、内容和手段为一体的教学体系, 才能有效地提高教学效果, 提高学生分析问题和解决问题的能力。 参考文献: [1] 严蔚敏, 吴伟民.数据结构(C 语言版)[M].北京:清华大学出版社,1997. [2] 严蔚敏, 吴伟民.米宁数据结构题集(C 语言版)[M].北京:清华大学出版社,1999. 数据结构课程是计算机专业中的一门综合性的专业基础课, 是计算机专业课程体系中的核心课程, 它所讨论的知识内容和提倡的技术方法, 无论对进一步学习计算机相关领域的其它课程, 还是对从事大型信息工程的开发, 都有着枢纽的作用。其学习效果直接影响到学生的数据抽象能力和程序设计能力。但是, 由于该课程的内容具有高度抽象性和综合性, 并且实践性很强, 因此, 当学生在完成作业或解决具体的实际问题时, 往往出现理论与实践相脱节的现象。本文针对如何将数据结构课程中的抽象概念形象化, 从教学观念和教学方法上进行相应的改革, 建立理论与实践相结合的“教、学、做”一体化的教学模式。 2. 数据结构课程教学的改革与实践途径 2.1 教学指导思想的改革。 数据结构这门课程的改革, 首先应该从教学理念方面来进行改革, 要改革其教学指导思想。作为老师我们不仅要熟练掌握知识, 更要将书本知识浅显易懂地传授给学生, 这就要求教师不能只掌握书本知识, 还要做到把多门相关课程的知识融会贯通。时刻关注学科的前沿发展, 在课堂引入新思路、新观点。并根据课堂教学状况而进行随时的变化。 2.2 激发学生的学习兴趣。 学好一门课, 首先应该先培养学生的学习兴趣。由于数据结构课程的知识和理论比较抽象, 所以学生们接触起来可能会觉得有些难度, 但是兴趣是一个人最好的老师。在数据结构课程的教学过程中, 教师要有目的、有计划地进行教学案例的选择与设计, 要充分体现出理论知识的实际应用性, 增强学生对于数据结构这门课程的学习兴趣与学习热情。在进行每一章的教学时首先说的一句话:为什么要学?然后再通过问题驱动, 从常识性思考开始;最后在每一章的结尾会让学生解决一个有趣的问题。再讲解每一个重难点之前我会问学生一个3W问题, 也就是why—how—what。激发学生的兴趣, 引导学生一步步学会编程。 2.3 对学生进行教学内容的调整。 数据结构中的算法描述也是许多学生学好本门课程的障碍。数据结构课程通常选择C语言作为算法的描述性语言, 而且对C语言中的函数、指针和结构体部分要求较高, 而这些部分又是C程序设计教学中的难点。在平时的教学中发现有一部分学生对数据结构这门课程非常感兴趣, 对于某些算法思想反应很快, 但是让他们进行算法描述或者编写相应的程序代码, 就是抓耳挠腮, 真是难啊。这就出现了数据结构与先修课程C语言程序与设计衔接不好的问题, 从而导致学生学习数据结构的难度增加。因此, 在数据结构的教学过程中, 教师应根据程序设计的实际需要来对学生进行教学内容的调整, 并充分考虑到学生在学习数据结构这门课程之前的基础性课程学习情况, 比如说首先要打好数据结构学习的基础, 在讲授C语言时将那些会在数据结构课程中用到的重点知识反复强调, 比如数组, 指针, 结构体, 类型定typedef, 动态内存分配等等。让学生对这些知识重点掌握, 另外加大实验课的强度, 先将用到的C语言相关内容让学生结合课本重新温习, 期间对其进行课外指导, 实验课之前先让学生把算法的思想, 算法的步骤以及用到的一些关键性的代码先自己写一遍, 然后实验课中将自己的算法进行编程实现。这样学生在学习数据结构时就会相对的轻松些。 2.4 利用演示性教学软件或Flash进行教学。 将演示性教学软件或Flash作为对传统教学的有益补充, 在课件中通过动画的形式演示程序执行算法的全过程, 不仅直观的展示了算法的步骤, 并且加深了学生对该数据结构的理解。实验课中再将每节实验课用到的算法动画演示发给学生让学生多看多想, 每看一遍这样的动画演示就会多理解一层。比如冒泡排序, 可以利用动画演示将冒泡排序的每一趟排序清晰的进行一遍演示, 从而使学生加深对冒泡排序思想的理解。如下图所示: 3. 结语 通过这些措施我发现实验课中独立成功完成作业的学生由1 个慢慢的增加到了80%的学生能真正领会算法并独立完成该算法的编写。这样, 既能激发学生学习知识的主动性和兴趣, 又能锻炼学生的编程动手能力。它高效地组织和开展了课程教学, 有利于理论与实践教学的有机结合, 有利于提高学生解决实际问题的综合能力, 在提高教学效果上起着较为明显的作用。 摘要:数据结构是计算机程序设计中的一门重要的基础性课程, 但是目前该课程的教学过程中还有不少问题, 从而大大影响了该门课程的教学效果。因此, 本文提出了利用演示性教学软件或Flash进行课程教学的方法, 通过一定的实践教学活动来提高其教学改革的成效。 关键词:数据结构,教学改革,教学实践 参考文献 [1]蓝雯飞.数据结构的面向对象描述方法研究[J].计算机工程与应用, 2006 (26) :79-80. [2]严蔚敏, 吴伟民.数据结构 (C语言版) [M].北京:清华大学出版社, 2007:3-17. [3]肖宏启.高职院校"数据结构"教学改革与实践[J].电脑知识与技术, 2010 (17) :4730-4731. 实践教学作为数据结构教学中的一个重要环节, 是对数据结构课程理论教学的延伸, 也是对数据结构理论知识的综合应用。 作为独立学院, 我校践行技术应用型本科的教育理念, 树立面向市场的办学宗旨, 着力于加强学生基本技能和实践能力的培养, 构建“以实践教学见长”为特色的课程体系, 培养适应市场需要的应用型人才。教师在教学过程中将学生实践能力的培养放在首要的位置上, 对实践教学的设计、实施等各个环节不断进行探索, 并总结经验教训, 逐步改进, 取得了较好的教学效果。 1 数据结构课程教学过程中存在的问题 数据结构是研究程序设计过程中如何设计和使用合理数据结构来解决具体的问题的课程, 是一门实用性很强的课程。但是在教与学的过程中, 往往出现教学与实践脱节的问题, 不能把教学和实践很好地联系起来, 影响了教学效果。同时, 独立学院生源的特殊性也给授课带来一定的困难。 笔者在教学过程中发现了如下问题: 1.1 内容抽象, 逻辑性强, 不易理解 数据结构课程的特点是概念多、内容抽象、逻辑性强。学生在学习的过程中不知道数据结构讲什么, 可以用在哪里。造成只注重理论学习应付考试, 而不考虑在具体程序设计中利用数据结构设计和解决具体问题的应用实践。 1.2 教学脱离实践, 实践课效果不理想 1.2.1 验证性实验达不到实践教学目的 数据结构的实验大部分是验证性实验。验证性实验仅仅要求学生对教师课堂讲述的内容用C语言进行翻译, 只需调试通过即可, 对掌握利用数据结构的知识解决具体问题的思路和方法不做要求。因此, 学生在解决实际问题时, 不能将所学数据结构应用到实际中。学生做课程设计时无从下手、思路混乱, 不知道如何选择数据结构。 1.2.2 实验题目结构单一, 不能满足不同层次学生的需要 数据结构实验题目内容差别小, 缺乏应用性和实效性, 很难调动学生的学习兴趣。另外, 基础较差的学生在完成难度较大的题目时存在一些困难, 而学习较好的学生感觉题目太简单, 没有挑战性。 1.3 学生基础较差, 相关课程之间衔接不好 从生源质量看, 独立院校的学生由于入学分数低, 学生整体水平不高, 基础不好, 对所学知识的理解和掌握不到位, 学习主动性不强, 特别是对数据结构这类理论比较抽象, 不好理解的学科学习兴趣不高。学生动手能力和编程能力普遍不强。 从课程衔接来看, 数据结构与C语言程序设计两门课程联系密切。C语言程序设计的学习一般安排在数据结构课程的上一个学期, 而且在后者学习过程中要用到前者的函数、指针和结构体部分, 但是这些内容往往是学生掌握得最薄弱的部分。很多学生对熟练使用指针和结构体等内容的数据结构的实验有畏难情绪, 直接影响了数据结构实践教学的效果。 2 数据结构实践教学探讨 2.1 案例讨论教学将理论教学与实践教学相互结合 为了提高数据结构的实践教学效果, 笔者改变原有的教学方式, 采用案例讨论的方式授课。在案例讨论教学法中, 笔者将学生分成若干个小组, 以小组为单位进行讨论, 学生在讨论过程中提出问题, 笔者针对提出的问题讲解相关知识, 引导学生利用所学知识提出解决方案, 并最终编程实现。在实现的过程中, 还可以进一步深化数据结构算法的讲解, 鼓励学生不断地改进和完善程序, 提高程序的性能和效率。 例如:针对线性表结构的讲解, 以学生最为熟悉的宿舍管理系统为例进行研究讨论。 首先, 引导学生分析基本的数据信息和功能需求。基本信息包括学生信息和宿舍信息。基本功能包括增加、修改、删除、读写、排序和查找。进一步讨论数据的特点, 操作对数据的结构需求, 从而引入线性表结构的知识, 帮助学生建立学生信息和宿舍信息的数据结构。 其次, 分析各个功能的实现方法, 从而引入线性表基本操作的具体实现。 最后, 通过分析各个操作的优缺点总结线性表的特点, 引导学生通过顺序表和单链表两种方式实现, 经过比较和分析, 最终掌握线性表的结构特点、表示方法、各种操作的实现以及不同实现方法的比较分析。 通过学习案例, 学生深切地体会到了线性表的特点以及具体应用的过程。理论教学与实践教学相融合, 达到了很好的教学效果。 我们为每种数据结构都设置了一个案例, 具体情况见表1。 这种案例讨论的教学方式改变了传统的教师为主的教学模式, 学生由被动学习变成了主动学习, 调动了学生学习的主观能动性, 增加了师生之间的交流和互动, 活跃了课堂气氛, 提高了学生分析和解决问题的能力。 2.2 打好语言基础, 扫清障碍 针对独立学院学生基础较差的客观情况, 教师在授课初期实验开始之前, 应先为学生扫清编程语言的障碍。笔者针对学生C语言学习中存在的问题, 结合数据结构课程中涉及的C语言的知识点有针对性地进行讲解和练习。对C语言中函数、指针、结构体部分的知识进行系统回顾, 并安排学生做一些和数据结构相关的C语言练习题, 帮助学生扫清数据结构学习中的障碍, 减轻学生对编程的畏难情绪, 轻装上阵, 更好地学习数据结构课程的内容。 2.3 实验题目设置多层次、多种类 2.3.1 多层次 我校学生的水平参差不齐, 我们针对不同水平的学生提供不同难度的实验题目。实验题目类型分为:基础题、进阶题、提高题、综合项目题。 例如:针对二叉树实验, 笔者设置了三类题目。 基础题:二叉树的顺序实现和链式实现。 进阶题:一个单位有10个部门, 每个部门有一部电话, 但是整个单位只有一根外线, 当有电话打进来时, 由转接员转到内线电话。已知各部门使用外线电话的频率 (次/天) 为5, 20, 10, 12, 8, 4, 3, 5, 6, 9, 如何设计内线电话号码, 才能使接线员拨号次数最少? (哈夫曼树的应用) 提高题:编写程序判断一棵二叉树是完全二叉树、满二叉树还是普通的二叉树。 综合项目题:身份证信息管理系统。 要求: (1) 能够进行身份证信息的录入, 包括身份证号、姓名、地址和手机号。 (2) 能够快速根据身份证号进行信息的查询, 并输出相关信息 (地址、生日、性别) 。 (3) 可以修改身份证号码对应的其他信息, 如姓名、地址。 (4) 可以完成身份证信息的删除。 (5) 可以根据姓名查询身份证信息。对于重名的人, 能够给出所有重名的人的身份证号和其他信息。 多层次的题目可以让学生从易到难、循序渐进、逐步提高编程水平。基础较差的学生, 可以从最简单的题目进行基础训练, 一点一点提高难度, 这样可以帮助学生建立信心, 提高学习的积极性。学习能力较强的学生, 可以直接做比较难的题目来检验自己的学习效果, 这样也可以激发学生的学习兴趣, 提高学习效率, 其学习能力也能获得更大的提高。 2.3.2 多种类 题目的种类应是多样性的。多种类的题目可以通过不同方式、不同角度考查学生知识掌握的情况。 基础题中包括一些选择题、填空题、写程序结果、程序改错以及基础编程题;进阶题和提高题主要以编程题为主;综合项目题一般采取小组合作的方式, 不仅可以锻炼学生的实践能力, 还能够培养学生的团队合作精神。多种类的题目有利于调动学生的学习兴趣。学生可根据个人情况选择自己喜欢的题目类型进行训练, 提高了学习主动性和积极性。 2.4 完善实验考核制度 我校设有数据结构实验课程, 该课程实践教学大部分在实验课中完成。我们对实验课的考核方法也进行了改进和完善, 具体成绩构成见表2。 通过对数据结构课程实践环节的严格考核, 学生养成了认真做好实验记录的习惯, 培养了严谨的学习态度, 形成了踏实的学习风气, 减少了上机过程中出错的次数。 2.5 增加设备投入, 完善现代化教学手段 增加设备投入, 完善现代化教学手段, 对提高教学质量尤为重要。我校充分考虑数据结构课程的实践性特点, 尽最大可能补充和更新计算机设备, 并建立了专门的数据结构实验室, 配备了品牌电脑和所需的软件, 确保软、硬件设施设备满足教学需要。同时, 还建设了数据结构教学辅导网站, 用于课程资料下载、在线测试、在线答疑等, 为学生学习数据结构课程提供了很好的平台。 3 结束语 通过对当前数据结构课程教学过程中存在问题的分析, 在教学方式方法、实践教学过程等方面采取了相应的改进措施, 改善实践教学效果, 使其更好地与理论教学相结合, 从提高学生的编程能力和学习兴趣。实践证明, 理论教学与实践教学相结合可以使学生更好地学习和掌握数据结构课程的内容, 切实提高教学质量。 参考文献 [1]马巧梅, 庞晓琼, 杨秋翔.数据结构课程设计案例教程[M].北京:人民邮电出版社, 2012. [2]王英, 柯新生.数据结构 (C语言) 实验教程[M].北京:电子工业出版社, 2007. 数据结构不仅是计算机专业的核心基础课, 也是其他诸如信息、通信、电子商务等许多非计算机专业的重要课程。该课程侧重介绍软件设计中的基本技术, 包括程序设计中所涉及的各种数据结构、基本运算、各种存储结构以及算法实现和性能分析, 排序和查找这两种常用的运算以及递归技术等内容。本课程的教学不仅要注重学生对理论的理解, 锻炼学生抽象思维和创造能力, 更注重培养学生的实践能力, 使学生学会用计算机解决实际问题时能有效地分析、组织、存储和处理数据的方法, 设计出相应的结构清晰、可读性好的高效算法, 并为以后的学习和应用打下坚实的理论和实践基础。由于培养目标、学生基础、课程设置、课时的不同, 非计算机专业数据结构的实践教学面临着许多问题。 一 数据结构实践教学中存在的问题 在多年的教学实践中, 常常遇到这种现象:学生上课时能看懂能听懂, 而课后自己独立解决问题时却无从下手, 理解别人的算法困难等问题, 造成这些问题有多方面原因: 1 知识点多, 课程抽象 数据结构涉及顺序表、链表、栈、队列、树、图等数据结构以及排序、查找、递归等众多算法, 具有概念多、内容多、算法复杂等特点, 所有内容又自成体系, 相互之间衔接少, 而且每个知识点都是比较重要、需要掌握的内容, 教学内容很难取舍, 所以在教学中难免面面俱到, 重点、难点不突出, 学生理解困难, 教学难度大, 同时由于实践教学学时有限, 因此在实践内容取舍和时间安排上往往产生矛盾。 学习数据结构最终是为了让学生获得求解问题的能力, 但是从实际问题抽象出数学模型, 选择合适的计算机程序, 再把解决问题的算法程序化, 这是一个复杂的抽象思维过程, 对初学程序设计的非计算机专业学生来说是一件非常困难的事。数据结构本身较强的逻辑性和抽象性决定了课程的难度较大, 造成学生的畏难情绪, 害怕实践, 常常不知所措。 2 前导课程学习不扎实, 调试程序能力差 C语言程序设计是数据结构的前导课程之一, 但是学生先前接触的只是简单数据类型和函数, 对于数据结构中大量用到的结构体、指针、头文件、递归等内容认识不够、理解不透甚至根本不清楚它们之间的关系, 因此在数据结构课程的应用上不能得心应手, 更谈不上融会贯通、应用和创新。 有很多学生程序调试能力较差, 对编译阶段出现的大量的英文报错信息不理解, 从而浪费了很多时间在编译排错上, 也影响了学生对数据结构和算法的理解, 很容易失去学习的积极性, 致使实践教学很难实现目标。 3 部分学生对实践环节重要性了解不够, 重理论轻实践 在数据结构的教学中, 许多老师都将精力放在课堂教学上, 实践任务布置给学生后, 指导较少, 非常容易导致学生对实践环节的忽视, 最终使实践流于形式。此外, 大多数高校开设数据结构课程都存在实践课时较少的缺陷, 要想兼顾众多的内容, 只能布置一些规模较小的实验题目, 缺乏系统性和应用性, 也会影响到学生运用数据结构知识处理实际问题能力的培养和训练。 4 传统教学模式限制了教学效果 以教师为主体, 学生被动学习的传统教学模式中, 很少考虑学生的需要、情感、态度, 对于数据结构这样抽象、复杂的课程来说, 采用传统教学模式就很难取得良好的教学效果, 达到预期的教学目的。近年来, 许多高校在数据结构的教学中大量使用多媒体教学, 但是简单采用PPT, 仍不能很好地解决这样的问题, 且存在授课信息量大, 学生听课时强度大, 理解困难, 严重影响了教学效果。 二 提升数据结构实践教学质量的有效途径 鉴于数据结构课程本身的特点和实践教学环节中学生容易出现的问题, 有必要从多方面入手, 提升数据结构实践教学的质量。 1 课堂教学方法多样化, 为实践课做好铺垫 在日常的教学中, 教师要充分体现主导和辅导作用, 除了讲解基本的理论知识外, 要积极地引导学生去分析问题, 理解问题的本质, 进而学会如何有效地组织数据、设计算法、解决问题, 以此来促进学生举一反三, 培养学生自己解决实际问题的综合能力。要做到这一点, 任务驱动法、案例教学法不失为有效的方法。 数据结构中抽象数据类型很多, 每一种数据类型需要的操作各不相同且都有它的应用背景, 可结合这些实际来进行任务驱动, 把教学内容融入到实际问题环境中, 让学生通过实际问题, 来理解隐藏于问题背后的知识。讲授新课前, 列举与授课内容相关的实际生活或与学生所学专业相关的实际例子, 化抽象为具体, 引导学生关注。如针对线性表的教学, 教师可以启发学生:成绩册、职工花名册等都可以看成线性表, 一个空成绩册可以视为空的线性表, 统计成绩册中有多少人, 相当于求线性表的长度, 查看某个学生的成绩就是线性表的查找、取元素, 看某个学生的前一个就是求元素的前驱, 后一个就是后继, 加入一个学生的成绩就是线性表的插入等。这样的联系有助于增加学生的感性认识和理解, 使学生知道拿到一个设计题目后该从哪入手, 排除对数据结构的恐惧心理。 另外, 教师可以采用案例教学法, 如在每章的教学中以一个案例的不断扩展和层层推进来带动课程的学习, 在一次的课堂教学中又以案例中的一个小实例不断驱动课堂教学的开展。案例教学具有系统性、可实践性, 涵盖知识点多等特点, 这样, 由教师引导学生从可以实现的小项目出发, 通过不断提出的任务自然而然的进行新知识的学习和操练, 在整个学习的过程中充分体现学生的主体作用, 激发学生的兴趣。 2 强化学生前导课的知识储备 针对非计算机专业学生C语言程序设计能力薄弱的特点, 教师一方面应积极与前导课程的老师沟通, 在前导课的教学中充分考虑后续课程的教学要求, 有重点的对后续课所需理论与实践技能进行训练, 如对于动态存储空间分配和结构体等内容。另一方面, 教师应结合班级的情况, 不断总结学生在程序设计中反映出的问题, 及时进行补漏、强化。实验中对学生碰到的问题进行及时讲解, 引导学生对于复杂问题进行分析, 减少出错的机会, 并让学生在调试程序中逐渐理解英文出错信息, 提高学生阅读和理解算法的能力。同时指导学生学会对复杂问题进行模块划分和分解, 降低问题难度, 分步解决问题。也可对学生分组解决不同问题, 培养团结协作的精神, 初步体验软件集成、模块化设计的思想。 3 实践教学内容的层次化 实践内容的设计必须以问题求解为主线索, 体现分析、设计能力的培养, 合理设计问题, 使学生在实践中加深掌握某种数据结构下数据的组织、加工、处理方法, 进一步锻炼编程和调试程序的能力。 以往的实践教学大多数都是教师按教材单元统一组织进行, 先理论后实践, 实践只是对理论的验证, 结果使学生对实验越来越没有兴趣。 在平时的教学中, 笔者认为对数据结构内容设置层次化的实践教学模式很有必要。首先对于课程中的实验区分必做题与选做题, 以适应不同层次的学生。 从能力训练上, 对实践课可区分基础性、设计性、综合性三个层次。其中基础性实验, 针对常用数据结构的基本运算如插入、删除等算法设计实践项目, 通过实验使学生掌握从算法转变为程序的方法;设计性实验是在基础性实验理解之上, 结合实际, 做一些小型的培养能力的实验, 意在锻炼学生从实际中抽象出相应的数据类型, 完成一定的功能, 如进行学籍管理设计、图书管理设计等;综合性设计可以整合某种数据结构的一些基本算法, 提高学生分析问题、解决问题、以及综合运用知识的能力, 如售票管理、停车场管理、公交线路设计等内容, 使学生在自由探索的过程中, 自主设计、开阔思路, 从而对于小型系统的开发有一个初步的尝试。 4 实践教学中多种手段的配合 数据结构实验课的目的就是让学生学会如何把书本上学到的知识用于解决实际问题, 培养软件开发的实践能力, 使书本的知识能活学活用, 所以在实践过程中需要多种手段并用。例如客观上数据结构的实验机房最好配备投影仪, 并且实验室对学生全天候开放, 增加实践机会。主观上改变实践课的方式, 除单一辅导外, 对于设计性和综合性实验应注重师生互动, 可以让学生在小组合作的基础上, 讲解自己的想法, 互相借鉴, 教师也可以做一些演示, 抽象的问题甚至可以事先准备, 做动态演示以增强直观性。另外, 由于数据结构实验耗时较多, 只依靠实验课内是远远不够的, 因此也可以将即时通讯工具 (instant messaging, 简称IM) 如QQ、MSN等用于延伸教学, 帮助学生解决当期实验中遇到的问题, 以突破时空的限制, 提升实践教学质量。 总之, 笔者经过多年的体会, 深深地认识到实践教学在数据结构学习中具有举足轻重的作用, 也感受到了实践教学中教与学的难度, 所幸的是在逐步的探索中所改进的方法在学生身上看到了效果, 这是令人欣慰的。 摘要:数据结构是一门抽象、难度较大又极其重要的课程, 实践教学是其必不可少的一个环节。本文通过对非计算机专业数据结构教学中存在的问题、原因进行分析, 从教学方法、教学内容、教学手段等多方面探讨了提升实践教学质量的有效途径。 关键词:数据结构课程,实践教学,教学探索 参考文献 [1]严蔚敏, 吴伟民.数据结构 (C语言版) [M].北京:清华大学出版社.2003 [2]朱占立, 刘天时.《数据结构》——使用C语言 (第三版) [M].西安交通大学出版社.2005 [3]江静.《数据结构》课程综合性实验的实践[J].实验科学与技术.2006 (6) :64-66 《数据结构》课程是计算机程序设计的重要基础课程, 它不仅是计算机专业的核心课程, 而且已成为许多高校信息类相关专业的重要课程, 是设计和实现编译程序、操作系统、数据库系统及其它系统程序和大型应用程序的重要基础, 研究数据结构的目的是为了编写更高效的程序。同时它也是计算机专业研究生考试、大专学生专升本的首选考试课程[1,2]。学生虽然认识到该课程的重要性, 但学生在学习这门课程时, 在课程中涉及到大量的概念、数据的存储结构以及各种各样的算法, 这些对于刚学过一门编程语言的新生来说, 是非常抽象的。在教学过程中学生普遍反映学习起来非常困难, 教师也反映教学效果不尽如人意。因此, 如何学好、怎样教好《数据结构》成为学生和教师普遍关注的一个问题。 1《数据结构》课程教学中存在的问题 1.1 学生的学习兴趣不足 在教学中, 学生刚接触到《数据结构》课程时, 总认为《数据结构》是一门理论课, 感到枯燥、乏味, 学习兴趣不浓, 甚至有学生认为不学数据结构照样能编出程序。数据结构是门理论性与实践性并重的课程, 注重培养学生利用理论知识解决具体问题的能力的培养。如果仅仅满足于讲解清楚, 而不注意教学的生动性, 学生的学习行为只能是种被动行为, 为了考试而学习。最后导致学生死记硬背课堂讲解的知识点, 把一门实践性很强的课程变成了一门内容枯燥、乏味, 需要大量记忆知识点, 与实践完全脱钩的课程。 1.2 对前导课程掌握不够扎实, 程序设计能力不足 学生在学习《数据结构》课程时, 由于其前导课程掌握不好或没能熟练掌握 (高级程序设计语言或面向对象程序设计) , 导致学习《数据结构》课程时感觉很困难。数据结构中的算法多数由类C/C++实现, 在学数据结构之前, 已经系统的学习过C语言的相关知识, 但由于学生刚刚开始接触程序设计语言, 对其中的很多知识的掌握只停留在纸面上, 没有能够融会贯通, 导致用计算机解决问题不可能得心应手。同时对C语言描述的高度抽象的算法理解困难, 算法思路有, 但编制程序又无从下手, 特别是C语言中的指针和结构体部分, 在数据结构用得较多, 在设计算法以及上机调试时有困难, 学生对程序语言的掌握程度直接影响算法设计的质量。 1.3 教学模式陈旧, 教学手段单一 在《数据结构》课程的教学过程中, 长期以来, 我们遵循以教师为主体, 学生被动学习的传统教学模式, 仅局限教师“满堂灌”、“填鸭式”。对于数据结构这样一门概念、算法繁多, 需要较强逻辑思维能力的课程仍采取传统教学模式, 就很难取得良好的教学效果和达到预期的教学目的[3]。数据结构中有些算法的演示利用传统的粉笔加黑板的教学方式, 缺乏直观性效果, 难以充分展示算法的动态变化过程, 学生难以想象数据之间的复杂关系。近年来, 数据结构的教学已经大量采用多媒体教学, 但是采用简单的PPT, 仍然不能很好的解决这样的问题, 且存在多媒体授课信息量大, 学生听课时强度大, 理解困难, 严重影响了教学效果。 1.4 理论教学与实际应用脱节 《数据结构》课程本是一门实用性很强的课程, 但内容抽象、琐碎、庞杂, 涉及很多概念和技术。所有这此内容均自成体系, 相互之间的衔接线索很少, 总体感觉内容零散, 没有个整体的知识框架体系。这些内容在实际应用中又都很重要, 而现行的教学计划实践课时普遍不足, 实验课安排的实验项目很难含盖课程的所有知识点。同时实验内容的设置上, 往往都是大量的验证性实验内容, 缺乏对实际问题的解决, 学生在实验之后仍然不知道学习数据结构在解决实际问题的。因而在具体应用上并没有教会学生解决问题的思路、算法思想和数据结构的使用, 在实验中只能停留在完成课本内容, 而对实际问题则是无从下手, 这些都是教学脱离实际的最现实写照。 1.5《数据结构》课程中的结构比较抽象 《数据结构》课程本身是一门抽象程度较高的课程, 对于缺乏实际应用经验的学生来说, 理解起来具有一定的难度。我们通常所说的数据结构, 指的是数据间的逻辑结构, 如线性表、二叉树和图结构[4]。尽管很多教材为了使理论更加直观和易于理解, 在编写时配了很多图示, 但在实现这些结构的操作时, 学生还是感到不知如何下手。不少同学反映学完该课程之后不知道能用在什么地方、能够解决什么问题, 即使教材上所讲内容都完全掌握, 仍然无法应用到实际问题当中, 除了课堂上讲的例子外, 找不出该知识点的其他应用, 同时遇到实际问题时, 也想不出该问题的抽象数据类型。 2《数据结构》课程教学改革措施 2.1 注重培养学生的学习兴趣 俗话说, “兴趣是最好的老师”, 如果要学生学得好, 首先就要让学生对该门课程产生兴趣。教好《数据结构》这门课, 一定要从培养学生的学习兴趣开始, 因此在进行数据结构课的第一次授课中, 并不急于介绍理论, 而是强调应用, 通过介绍数据结构在实践中的应用来激发学生的学习兴趣。如多岔路口交通灯管理问题;1997年轰动一时的国际象棋“人机”大战, 由国际象棋大师与IBM公司的计算机进行国际象棋比赛, 为什么最终计算机能够取得胜利问题;图书馆的书目检索系统, 如何组织图书的登录号、书名、分类号等数据才能快速实现查找、插入、删除操作;旅游路线设计问题, 如想去上海、南京、杭州、苏州等地旅游, 怎么样安排线路以求花费最少等等。以上应用都是贴近生活, 学生比较熟悉, 通过实际问题的分析, 明确数据结构课程的重要性与实用性, 激发学生学习学习兴趣。此外, 如果教师在讲授该门课程过程中, 同时, 能够引入一些生活中的实例, 引导学生巧妙处理生活中的日常问题, 让学生感受到《数据结构》这门课程与现实生活中的关系, 就更加能够提高学生的学习兴趣。 2.2 教学中补充前导课程的教学内容, 加强编程训练 《数据结构》课程是在学生有一定的程序设计基础的前提开设的, C语言程序设计是数据结构的前导课程之一, 学生对它的熟悉掌握程度, 直接关系到数据结构课程的教学效果。C语言本身的灵活性, 对于刚刚学完C语言程序设计的学生而言, 运用不一定很自如。另外, C语言难点就是指针、函数、数组作为函数参数以及结构体类型等, 而数据结构课程教学过程中主要运用这些知识点来分析、解决问题的。对于大部分学生来说, C语言运用能力不是很强, 如果上课时直接切入主题, 他们就会有“云山雾罩”的感觉。如何来解决这个问题呢?我们可以利用一、两次课的时间 (2-4学时) 来复习C语言的相关知识, 即数组、指针、函数和结构体等。可以将这些学时纳入到教学进度表中, 教师在复习并不是面面俱到, 而是将与本课相关的内容做以归纳总结, 这样既可以复习以前的知识, 加深印象, 强化理解, 又可以为数据结构课程的教学做铺垫。 基于C语言的数据结构, 一个算法对应一个函数, 这样做的目的是为了摆脱源程序的繁琐, 以便将精力集中在算法思想上。所以在大部分教材中, 几乎看不到一个完整的程序, 也正是这个原因, 给初学者带来了很大的不便。对刚进入本课程学习的前几个算法给出完整的程序, 并加以详细讲解, 使学生理解算法和源程序之间的关系。 当然, 进行一定的编程训练也是必不可少的。可以通过课堂练习、实验和大作业训练, 可以让学生对C语言各方面知识作一个整体掌握, 对比较重要的内容更要加强练习。同时, 还可以将所学的“数据结构”的知识具体化, 与实际问题相结合, 提高综合解决实际问题的能力。 2.3 搭建整体知识框架 “数据结构”内容繁复, 高度抽象, 广泛涉及软、硬件的各种知识, 应给学生理出清晰的几条主线, 在他们头脑中搭建课程的整体框架。在教学过程中, 首先, 要分析教材各个章节的关系, 从课程要求的大局出发, 由浅入深把握主线, 采用纵横对比的方法, 详细介绍《数据结构》课程体系。《数据结构》是研究非数值计算的程序设计问题中所出现的计算机操作对象 (数据) 、数据之间的关系 (数据的逻辑结构) 、对数据的操作 (各种不同算法) 、算法复杂性分析等内容的一门学科。每一种数据结构, 都要搞清其逻辑结构、存储结构、常用操作、算法性能分析、实际应用五个方面。其次, 要吃透教材、突出重点[5]。对于数据结构课程, 其基础的且为重点的内容应该是“表、树、图”三大数据结构和“查找、排序”两大类算法。还有很重要的是讲好课程介绍即第一堂课, 使得学生能够理解该课程在整个计算机专业体系中所处的位置和该课程的重要性, 为学好课程打好基础。 2.4 采用多种教学手段 在教学过程中要始终贯彻以学生为主体, 教师为主导的教学模式。教学方式要力求多样化, 对不同章节的不同内容可采用不同教学方法。 采用问题驱动教学法。问题驱动是指学生在教师创设的情景下, 应用已学知识提出相关问题, 继而解决问题的过程。在《数据结构》课程的教学过程中, 教学除了讲解基本的理论知识外, 还要注意引导学生去分析问题、抓住本质、组织数据、设计算法、解决问题, 并且要求学生能举一反三, 触类旁通, 从而培养学生的综合能力。 实例教学法。《数据结构》课程理论性和逻辑性较强, 学生理解起来有一定难度, 在讲授的时候, 结合生活中常见的实例进行讲解并与学生互动, 会有利于学生的理解。在教授过程中可以提出一些模拟现实的课题, 分组来组织学生对课题展开讨论, 在讨论的过程中发现问题, 提出问题, 老师参与学生的讨论, 并针对问题讲述解决问题所需要的数据结构的知识。这样既增强了师生之间的交流, 也让学生由被动的“听课”变主动地学习课程, 可充分调动学生学习的主观能动性;同时, 学生的分析问题、解决问题的能力也可得到很大提高。 为了让学生在有限的时间内更好的掌握知识, 可以采用融合了多媒体技术的计算机辅助教学 (CAI) 。还可以采用现有的DSDEMO数据结构课件演示系统, 进行演示, 这样可以使教学内容变得更直观、形象、生动和有趣, 从而取得良好的教学效果。 同时利用计算机网络构建教学支持平台。充分发挥校园网的作用, 利用计算机网络辅助教学, 将《数据结构》课程的教学大纲、电子教案、电子课件、程序案例以及相应的教学资料, 进行汇集整理, 逐步积累, 最终集成一个资料丰富的网站, 放在校园网上师生共享, 形成一种全新的教学模式, 因材施教, 以便充分发挥学生的学习积极性和主观能动性。另外也可以设立辅导答疑时间, 利用网络进行答疑, 解决同学们在课余时间遇到的问题。 2.5 加强实践环节, 培养学生实践能力 《数据结构》课程有很强的实践性, 应注重培养学生利用理论知识解决具体问题的能力培养。为使学生真正学好“数据结构”, 除了在课堂上要采用行之有效的教学方法外, 还要让学生勤动手, 多实践。上机实践是对学生综合素质进行训练的一种最基本方法, 是与课堂听课、课余自学和练习相辅相成的、必不可少的一个教学环节。在实践中遇到的问题往往比平时的习题要复杂得多, 也更接近于实际。在安排实训项目时, 从简单程序起步, 逐步加大难度, 使学生的编程能力得到锻炼。在授课过程中重点从以下几个方面进行了探索实践:第一, 合理设置实训内容, 力争与理论课的重点、难点及实用知识联系起来, 选择有具体应用背景的实训题目, 充分发挥学生的主动性;第二, 注重实践过程, 注重学生综合能力的培养;第三, 为了培养学生的创新意识和团队协作精神, 促进学生之间的交流和协作, 使不同水平的学生都能在大型实验项目中担负起相应的工作, 特别设计了一套针对综合型实验和探索创新型实验考核方法。 根据不同的实验项目采取不同的考核方式, 基础型和设计型实验项目安排在平时每周的上机实验课进行, 根据学生提交的实验报告进行考核。综合型和创新型实验项目较大, 需要学生分工合作, 共同完成, 一般对学生进行分组, 每组完成一个实验项目, 在课程设计环节完成, 一般有两周时间, 教师根据每个学生在组内的表现给出一个考核成绩, 项目完成后, 再根据各组提交的项目报告和项目的质量给出合理考核成绩。这样既激发了学生的创新能力, 又提高了学生的团队合作精神。 3 结束语 数据结构是计算机专业及相关专业的核心课程, 是计算机程序设计的重要理论基础。对该课程的教学改革是一项长期而艰巨的任务, 既要重视基础理论知识的学习, 又要重视实践教学环节。针对在数据结构教学过程中所发现的问题进行讨论和改革, 实践证明该措施取得了良好的教学效果, 对进一步的改革提出了一些建议, 希望能够更好地提高教学效果。 摘要:数据结构课程是计算机程序设计的一门核心课程, 学生通过这门课程的学习, 可以促进软件设计和编程能力的提高。针对现在教学过程中存在的问题, 从教学实践出发, 提出了相应的教学改革措施。 关键词:数据结构,教学改革,措施 参考文献 [1]严蔚敏, 吴伟民.数据结构 (C语言版) [M].北京:清华大学出版社, 2002. [2]彭波.数据结构[M].北京:清华大学出版社, 2006. [3]孙岐峰.“数据结构”课程教学反思与改革[J].计算机教育, 2009 (11) :66-68. [4]张敬芝.数据结构课程教学改革研究[J].长春师范学院学报:自然科学版, 2005, 2:147-148. 关键词: 趣味教学; 数据结构; 课程; 教学法 中图分类号:TP301.6 文献标志码:A 文章编号:1006-8228(2013)01-59-02 Exploration and practice of interest teaching course of data structure in higher vocational schools Yi Lihua (Hunan Vocational college of Science and Technology, Changsha, Hunan 410004, China) Abstract: The reforming method of course of data structure is explored. The existing problems in college course teaching of data structure are analyzed. The interest teaching method is combined with the traditional teaching theory to realize mutual improvement of two advantages and to obtain better teaching effects. Key words: interesting teaching; data structure; course; teaching method 0 引言 数据结构是计算机及相关专业的核心基础课程之一,是一门具有较强理论性和实践性的课程。本课程的教学不仅要注重学生对理论的理解,锻炼学生抽象思维和建模能力,更要注重培养学生的动手能力,使学生学会从现实问题中抽象模型,并利用计算机解决实际问题,从而为后续课程的学习和计算机软件系统的开发打下坚实的理论基础和实践基础。但是目前大多数院校数据结构课程的教学现状不容乐观,学生普遍反映课程学习比较困难,教师也感觉教学效果不理想,实验教学更是因为程序设计语言基础不扎实、课程内容太抽象等原因而较难开展。 1 高职数据结构课程教学中存在的问题 ⑴ C语言基础不扎实,教学效果不理想 C语言是数据结构的先修课程,学生掌握的熟练程度直接影响数据结构课程的教学效果。例如C语言中的指针、结构体、递归等知识点是学习数据结构的必备知识,如果没有掌握好这些相关知识,学生在学习数据结构过程中就会感觉茫然,致使学习兴趣不浓,学习效果不佳。 ⑵ 教学供需不对应,学习积极性不高 高职的学生比较喜欢简单实用的课程,如平面设计、网页制作等,与这类课程相比,数据结构无法达到所见即所得的效果,有些学生认为学数据结构实用价值不大,故不够重视,致使学习积极性不高。 ⑶ 课时有限,理论实践分配不合理,学习目标不明确 高职教育基础理论教学要以应用为目的,以“必需,理论够用”为度,专业课教学要加强针对性和应用性。各高职院校对“必需,理论够用”教学原则的理解不尽相同,有些学校认为数据结构理论性较强,枯燥难学,属于本科院校学生学习范畴,而数据结构知识在以后的工作中得不到直接应用,不符合“必需,理论够用”教学原则,就任意削减课时;更有甚者从教学计划中删除,这种做法既违背了高职计算机专业人才培养方案,也阻碍了学生的可持续发展。且课时总量和时间分配上严重失调,目前大部分教师只重视理论教学,课堂上通过板书或多媒体向学生讲解和演示,忽视实践教学环节,给学生实践和自主学习、自由思考的时间不足,学生感觉枯燥,不能真正理解数据结构中抽象数据类型的定义及相应的存储表示,难以实现算法与代码之间的转换,在面对实际问题时,更不能运用所学知识加以解决。 2 采用趣味教学,培养学生的学习兴趣 趣味教学[1]在国内外已有一定研究历史,但至今没有一个统一的定义。可以理解为是一种愉快教学法,实行寓教于乐。教师针对学生情况,分析选择教材内容,以一种有趣、易于接受的形式把相关教学知识点表现出来,给学生营造一个轻松、愉悦的学习环境和学习气,使学习内容更贴近学生的生活,从而唤起学生对知识的认同感,培养学生的学习兴趣。针对当前高校学生学习数据结构存在的问题,在数据结构课程教学过程中通过引入趣味教学,把枯燥、抽象的知识通过某种有趣的、贴近学生生活的、学生易于接受的方式表现出来,对于增强学生学习兴趣,保证教学质量都有很好的现实意义。 趣味教学可以采用很多具体方法,笔者在数据结构课程教学过程主要应用案例教学、动画演示、适当穿插计算机科学技术史来实施。 2.1 案例教学的应用[2] 案例教学法即教师根据教学目的和教学内容的需要,选取典型案例,设计学习情景,让学生进入角色,积极思考主动探索,以提高他们运用所学知识分析、解决问题能力的一种教学手段。 案例教学的应用效果很大程度上取决于案例的选择。数据结构课程中的案例选择应考虑以下因素。 第一,典型性,被选的案例能够起到举一反三,触类旁通的作用。 第二,适宜性,根据教学目标,以及学生的特点和老师的能力,适当的选择案例,使得老师容易把握,学生能够接受。 第三,简单明了,太复杂的案例需要花费太多的时间和精力去讲解分析,影响理论教学的时间,学生不易掌握,对于理论讲解起不到正面的效果。 第四,贴近生活,选取贴近生活的案例,更能激起学生的兴趣,引发讨论,吸引注意力。 《数据结构》不仅是计算机程序设计的重要理论和技术基础, 也是计算机专业中的一门重要的专业基础课程。它既是对以往课程的深入和扩展, 也是将来更加深入地学习其他专业课程的坚实基础。然而, 由于该课程涉及的知识面较为广泛, 学生除了需要多种数学理论基础, 同时也需要一定的程序设计语言基础, 所以在教学过程中常常出现"教师教得累, 学生学得苦"的尴尬局面。如何解决这一问题, 是当前数据结构教学改革的紧迫任务。 1、《数据结构》教学现状分析 1.1 课程较为抽象, 实际应用范例少 由于《数据结构》课程理论性较强, 每种结构都有其各自的提出背景、适用范围以及经典算法, 所以对于学生来说, 该课程较为抽象, 难以理解原理的精髓。虽然在该课程的学习中也有穿插上机实验课程, 但其内容多是对课本上已有算法的验证性实现, 与实际生活或工作的联系甚微, 使得学生在学习多种结构及其算法之后也不知有何实际用途, 更谈不上灵活运用。种种原因让学生产生了该门课在今后的软件开发中是用不到或者极少用到的错觉, 进而导致学生降低对该课程的重视, 失去学习积极性。 1.2 先行课程掌握不扎实 《数据结构》涉及的知识面较广, 学生要学好该课程, 必须要有扎实的数学理论基础和一定的编程能力。学生在数学方面所需的知识, 包括多个方面:在分析算法时间复杂度时需要高等数学的知识, 在分析数组计算时需要线性代数的知识, 在分析非线性结构时需要图论中关于树和图的知识等。而课程中的算法大都是用C或者C++语言来描述, 因此要求学生具有较为扎实的C或者C++语言的编程基础。 然而, 在学习数据结构前期, 大部分学生在C或者C++语言的学习中只是比较熟悉简单数据类型和结构化程序设计中的三种基本结构的应用, 对多维数组、结构体 (或者类) 和指针这三种数据类型的认识和理解不深, 对参数传递、函数调用的理解也不够, 对计算机语言的许多约定理解不透彻, 基本程序设计的思想并没有完全建立。然而后述这些内容又恰好是数据结构课程的重要基础和必备知识, 在整个课程学习中的使用频度相当之高, 贯穿整个数据结构课程学习的始末。这种现状必然导致许多学生使用C或者C++语言实现数据结构中的算法时不能得心应手, 更谈不上把所学知识融会贯通, 严重影响了学习效果。 2、教学方法改革初探 在数据结构的教学中结合与实际生活或工作中的例子, 一方面可以使数据结构的原理更加接近生活, 浅显易懂, 容易被学生理解并接受, 从而可以有效引导学生深入思考;另一方面也使学生能从生活工作实例中进行研究型学习, 主动运用所学知识来分析问题、解决问题, 使得学生认识到数据结构是学有所用的, 从而更加激发学生的学习积极性, 提高他们的理论联系实际的能力和上机动手实验能力。 2.1 强化学习数据结构的意义 在学生刚开始学习数据结构时, 要先让他们明确数据结构课程的地位, 即数据结构不仅是计算机相关专业的核心课程之一, 也是许多后续核心课程的先行课程。在众多的计算机系统软件和应用软件中都要用到各式各样的数据结构。如果只是掌握基本的程序设计, 是不可能解决众多复杂的软件问题的。因此想要高效地使用计算机设计应用软件, 就必须学习数据结构的相关知识。 2.2 采用案例教学 《数据结构》课程理论性较强, 每种结构都有其各自的提出背景、适用范围以及经典算法, 因此在教学中若仍然采用传统方式照本宣科, 那么对于学生来说, 该课程将十分抽象并难以理解。为了让学生更加充分更加深刻地理解和掌握数据结构中所包含的知识, 在教学中应将实际生活或工作中的案例与理论知识相结合, 使数据结构融入生活, 是其更加浅显易懂、丰富多彩。同时也可设计一些与学生互动的小游戏, 从而使学生由被动的旁听者变为主动的参与者, 培养学生的基本问题的求解能力以及创造性地解决问题的能力。 2.2.1 用实际生活中的例子引出理论知识 在第一堂课中, 要向学生强调说明数据结构课程的重要性。然而仅仅说明是不够的, 因为数据结构教材与实际生活或工作的联系甚微, 使得学生在学习多种结构及其算法之后也不知有何实际用途。因此在进行一段时间学习后, 学生容易产生该门课在今后的软件开发中是用不到或者极少用到的错觉, 进而导致其主动降低对该课程的重视, 失去学习积极性。为了使学生在整个学期的学习中都能保持积极主动的态度, 数据结构和生活的联系在整个教学过程中都是不可或缺的。 在第一堂课中, 除了向学生说明数据结构的重要性之外, 也应给学生举出数据结构在生活中的使用多举些和实际相关的例子, 让学生感到数据结构无处不在。例如:可以操作一个管理系统软件, 打开后台数据库, 让学生看到其中表的结构;可以从停车场的使用、食堂打饭或银行排队等生活中的平常事件让学生看到栈和队列的使用;从抢险救灾应急物资的投放、快递公司送快件的路径以及公交车站点的分布情况等例子让学生看到图在日常生活中的应用;从学院、系、年级和班级的组织结构让学生看见学习生活中的树结构;以学生学习成绩管理系统为例, 通过后台数据库基本表的操作来实际实现数据的添加、删除、修改、查找和排序等操作。 后续的每一堂课也应同第一堂课一样精心设计, 争取每次课都能抓住学生的心理, 注意与学生的互动, 可以尝试采用参与式、讨论式等多种教学方法调动学生的学习热情, 使学生由被动的旁听者变为主动的参与者。 例如, 在讲授《数据结构》的线性表链式存储结构时, 可以尝试着找几个学生来演示线性表的链式存储。我们假设每一个学生是一个数据元素即链表中的一个结点, 每个学生的左手是prior指针域, 右手是next指针域, 如果学生之间是通过右手放在下一个学生的肩膀上, 这样就形成了一个单链式的结构, 第一个同学即为表头;如果同时把左手放在前一个同学的肩膀上, 这样就形成了双向链表结构。在形成了这样一个结构之后, 学生可以很容易地认识和理解链表的基本结构。接着让指定的学生从队伍中离开即链表删除操作;加入新的学生, 即在链表中插入新元素。原本链表的插入与删除操作是学生很容易出错的地方, 因为指针这种数据类型他们在之前C或者C++语言的学习中认识理解不深, 记不清结点连接和断开的语句顺序。但是, 面对学生组成的链表, 他们很容易了解新结点的插入过程和指定结点的删除过程, 对要求执行的插入或删除操作能够得出相应的结果。这样的教学形式既生动, 又记忆深刻, 比照本宣科地给出操作语句的效果要好得多。 除了链表这种知识点可以用游戏引出之外, 其他很多知识点也可以采用类似的方法引出。例如通过去银行ATM机取款时需要排队的情况, 让学生理解队列"先进先出"的特点;和学生一起进行汉诺塔的游戏, 使学生在娱乐之中理解栈的思想;通过学生成绩管理系统, 和学生一起研究怎样才能快速实现查找、插入、删除、修改和排序的操作;和学生一起设计进行全国旅游的路线, 怎样走花费最省, 从而让学生深刻理解图的最短路径的经典算法;和学生一起下"五子棋", 帮助学生理解树和图的搜索概念;让学生做猜数游戏, 是学生在轻松娱乐中理解有序表的折半查找算法等。 等学生对案例理解后, 给学生一些时间讨论怎样实现该案例。最后老师可以引导学生对案例的实现思路进行总结, 并分析每一个步骤如何运用C语言实现, 最后详细地实现程序。 通过这种与实际生活相结合的方式, 能较为充分地调动学生学习这门课程的积极性, 同时引导学生尝试如何把生活中的实例用数据结构的方法去解决, 以提高学生使用知识的灵活性和创造性。 2.2.2 设计案例作为上机实验内容 课堂上使用案例能够充分调动学生的学习积极性, 上机课同样也应通过案例来提高学生的动手能力。 传统的数据结构上机课, 往往是对课本上已有算法的验证性实现, 与实际生活或工作的联系甚微, 学生上机时也就兴趣索然。因此上机课除了要实现基本算法外, 也应给学生大量的实例, 提高他们解决实际问题的能力。例如:在线性表的学习中可以设计排班和轮休的问题;在栈的应用中可以设计数制转换和计算表达式的计算;在二叉树的学习中可以安排搜索问题的实现;在图的应用中可以让学生设计旅行的最短路径等。 由于上机案例相对较为复杂, 因此可以将学生分组, 进行分组讨论和研究。对于同一问题, 学生的解决方案往往不同, 教师便应引导学生尽量从多个角度去思考问题, 找出不同的解决方法, 而不能仅仅局限于找到一种解决方案。 这些程序的实现不仅仅有助于提高学生的编程能力和解决问题的实际能力, 有效地发散和开阔学生思维, 更有助于培养学生的团队协作意识, 为学生以后的工作和学习打下坚实的基础。 3、总结浅谈数据结构教学实践与体会 篇3
数据结构实践教学的改革与实践 篇4
《数据结构》课程教学反思 篇5
《数据结构》教学探讨 篇6
数据结构课程教学改革与教学实践 篇7
“数据结构”实践教学 篇8
“数据结构”实践教学 篇9
《数据结构》课程教学改革与实践 篇10
“数据结构”实践教学 篇11
《数据结构》教学改革思考与实践 篇12