浅析《数据结构》实践教学

来源:岁月联盟 作者:薛小锋 时间:2010-08-15
 摘  要 本文针对“数据结构”课程逻辑性强、抽象性高,以及当前实践教学中存在的问题,结合自身的教学经验,提出了“数据结构”课程实践教学的新思路。
    关键词  数据结构;算法;实践教学
 


    1  引言
    “数据结构”是机程序设计的的重要理论技术基础,它不仅是计算机学科的核心课程,而且已成为其它理工专业的热门选修课。“数据结构”并非一门纯数学课程。它要求学生能根据所学的“数据结构”理论完成较复杂的程序设计。而程序设计能力的提高有个学习、观摩、借鉴和实践的过程。
    学生在学习“数据结构”课程时,虽然已学过程序设计语言,但仅是初学,并不精通。对于抽象的数据类型、动态分配存储空间等概念,在理解上还是有一点困难的。如何理解数据存储结构,消化算法,将算法转化成程序设计语言的函数并能编写出运行该函数的主程序,往往是摆在他们面前的一道难关。
    2  实践教学新思路
    笔者多次讲授“数据结构”课程,所用教材为清华大学出版社的严蔚敏、吴伟民编著的《数据结构》(C语言版)(以下简称为教科书)。该教科书内容全面,有较高的深度,但在叙述一些基本概念和算法时过于精练,使学生在理解上有一定的困难。另外,本课程的教学不仅注重学生对理论的理解,锻炼学生的抽象思维和创造能力,更注重培养学生的实践能力。笔者在多年的教学实践中发现,学生认为这门课程理论性太强,太枯燥,不好学,学了不知有什么用,怎么用,当面对具体问题时,不知该如何应用学过的知识来给出切实可行的解决方案以及编制程序,得出正确的结果。
    针对以上问题,可以看出教师除了加强理论知识的讲授外,更应注重实践环节的教学,提高上机实验课的教学效果。以下是笔者在“数据结构”课程实践环节教学中的几点想法,希望与广大读者探讨之。
    2.1 思想上重视实践教学
    有些教师在教学的过程中,重点给学生讲授数据对象的特性,数据的组织方法,数据的逻辑结构和存储结构以及相应的运算(操作),对实验不够重视,认为可有可无。在实际教学中,教师只介绍各种操作的算法,而忽视将算法转换为具体程序设计语言中的函数以及编写出运行该函数的主程序。这种教学方式,势必导致多数学生对算法和程序概念的混淆,再加上教科书中也仅仅是将算法转换成程序设计语言中的函数,学生在两课时的上机实验中往往编制不出完整的程序,得出正确的结果。
    上机实验是对学生全面综合素质进行训练的一种基本方法,是课堂教学的一种延伸,是必不可少的一个教学环节。实验中的问题往往比平时的习题要复杂的多,也更接近实际。实验能使学生所学到的书本知识“活”起来,起到深化理解和灵活掌握教学内容的目的,同时,上机实验也是对学生软件设计综合能力的训练。
    在“数据结构”课程堆栈的教学中,针对教科书中进制转换的问题,笔者除了详细讲授教科书中堆栈的顺序存储结构及其基本运算的实现算法与函数外,还在课堂上编制出运行该函数的主程序,包括数据的输入与输出,具体如下:
    #define Maxsize 100   //顺序栈初始分配空间
    Typedef int Elemtype
    Typedef struct{
      Elemtype data[Maxsize];
      int top;
    }STACK;
    char B[]=”0123456789ABCDEF”;
    void conversion(int n , int b)  //将非负的十进制整数n,输出等值的b进制数
    {
     int x;
     STACK st;
     initstack(&st);
     while(n)
       {
         push(&st , n%b);
         n=n/b;
       }
     while(!Empty(&st))
       {
         pop(&st , &x);
         printf(“%c”, B[x]);
    }
    void main()
    { 
    int n , b;
    printf(“将十进制整数n转换为b进制数,请输入n与b:”);
    scanf(“%d , %d”, &n , &b);
      conversion(n , b);
    }
 
    程序运行如下:
    将十进制整数n转换为b进制数,请输入n与b:13,2↙ 
    1101
    通过这种方式,学生清楚地认识到程序不仅仅是算法,在学习算法的同时,更应注重程序总体结构设计、用户界面设计、软件开发规范等方面的学习和锻炼,这为“数据结构”实践教学取得较好的效果奠定了基础。
    当然,这种尝试也遇到了一些问题,主要在课程总学时方面。笔者所在学校“数据结构”课程作为一门专业基础课,课时为64学时,其中包含上机16学时。部分教师也认识到了数据结构实践教学的现状,但迫于课时的限制,也打消了尝试新的教学方法的念头。因此,还得要让学校、教师转变观念,认识到应着眼于未来,应以学生为中心,而不是急于求成,追求功利。
    2.2  编制好的实验指导书
    一本好的实验指导书能给学生的上机实验带来事半功倍的效果。现在有关“数据结构”课程的实验指导书较少,而且其中大部分都没有提供完整的上机实验操作过程。笔者认为一本好的实验指导书应该能和课本独立开来,学生在理论课学习的基础上,通过阅读该书,应该能够解决实际问题。
    笔者在“数据结构”课程的教学中,编制了一本实验指导书。书中做到了以下三个方面:
    (1)明确实验步骤
为了培养学生良好的工作作风和方法,并且为后续课程做准备,书中按软件工程方法要求学生遵循相应的实验步骤,先需求分析,抽象出数据结构,再明确数据类型,详细设计,最后进行编码及调试。
    (2)明确每个实验的具体要求
有了具体要求,学生实验时才有章可循。书中对每个实验都提出了具体要求。开始部分的实验除给出要求外,还给出问题的需求分析、设计以及完整的程序,学生上机主要是验证程序,后期的实验则要求学生独立设法,编制并调试程序。整个实验指导书在难度上有一定的梯度,便于学生循序渐进的学习。
    笔者在介绍完线性表的链式存储结构后,要求学生完成的第一个上机任务为实现以单链表作存储结构的线性链表的就地逆置。关于这一问题,实验指导书中给出了两种实现方法,具体如下:
    第一种,将原链表中的头结点和第一个元素结点断开(令其指针域为空),先构成一个新的空表,然后将原链表中各结点,从第一个结点起,依次插入到这个新表的头部(即令每个插入的结点成为新的第一个元素结点)。这种方法较易,学生容易想到,由于是单链表部分的第一个实验,书中除给出思想外,还给出了详细的算法,只要求学生编写出实现该算法的函数和主函数,上机验证该算法。
    第二种,修改原链表中每一个结点的后继指针,使其指向其前驱。考虑到锻炼学生的算法设计能力,书中只给该出了该方法的思想,要求学生独立设计算法,并编制出完整的程序。
    (3)要求学生在上机之前,预习实验指导书中的内容
实验指导书独立于教材,上机实验学时又有限,这就要求学生在上机实验之前预习实验指导书中的内容。在实验内容之前给出了一些与本实验有关的思考题,让学生在阅读中思考,同时列出相应的资料或参考书,让学生在上机之前通过查阅参考资料或参考书,加深对实验内容的理解。这种方式还可以锻炼学生独立解决问题的能力。
    2.3  加强一线教师队伍的建设
    课程的教学最终是由一线教师来完成的,一线教师队伍的素质决定了教学的质量。“数据结构”课程的一线教师应具备实验教学的素质。
    实验教学能力的培养有一个过程。作为一名教师,应具备钻研和创新精神,提升自己的知识水平和实验教学能力。同时,在教学过程中,也应该吸收其他优秀教师的教育思想,学习其他教师的教学方法。在实验教学方面,一线教师更应注重相互之间的沟通,取长补短,共同提高。学校、院系在条件允许下,还应定期组织教师进行培训或进修。
    3  结束语
    由于“数据结构”课程在计算机专业课程中的重要性,必须加强实践环节的教学,提高学生分析问题、解决问题的能力。可以相信,只要我们思想上重视实践环节的教学,提高自身实践教学的能力,采用合理的教学方法,“数据结构”课程的实践教学必将取得良好的效果。
    参考
[1]严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,1997
[2]严蔚敏,吴伟民. 数据结构题集[M]. 北京:清华大学出版社,1999
[3]高一凡. 《数据结构》算法实现及解析. 陕西:西安科技大学出版社,2004