高职《数据结构》教学改革重在应用的探索

时间:2022-02-07 03:57:29

高职《数据结构》教学改革重在应用的探索

摘要:《数据结构》是一门重要的课程,但是又是学生反映难学的课程。通过教学改革的探索,分析了《数据结构》的教学内容和高职的状况,提出高职的就业教育决定高职《数据结构教学改革重在用的思想。

关键词:数据结构;教学改革;应用

中图分类号:TP311文献标识码:A 文章编号:1009-3044(2009)36-10155-02

The Teaching Reform and Exploration of the Course of Data Structure in High Vocational Education

WANG Yong-hong

(Jiangsu Animal Husbandry & Veterinary College,Taizhou 25300, China)

Abstract: Data structure is an important course, but it is difficult for students to learn it in high vocational education. Through the exploration of teaching reform, this text analyses the Data structure teaching contents and status of vocational education, proposes the idea that the character of vocational education decide application about Data StructureTeaching Reform.

Key words: Data Structures; Teaching Reform; application

《数据结构》是计算机应用技术、软件技术、网络技术等专业的重要专业基础课,是计算机科学的算法理论基础和软件设计的技术基础,也是我校计算机大类专业教学改革的重点课程之一。

《数据结构》研究的对象是数据之间的逻辑结构,以及如何把它们存储起来并便于访问和处理[1]。组织数据时,数据之间有四种逻辑结构(集合、线性结构、层次结构和网状结构)。存储数据时,也有四种存储结构(顺序结构、链接结构、索引结构和散列结构),它们的组合可以构成更复杂的存储结构[2-3]。对数据进行处理通常包括输入、输出、查找、更新、排序、插入和删除等运算。当数据的存储结构不同时,相应运算的实现算法也不同。

在高职《数据结构》教学改革中,如何更好地进行教学,取得好的教学效果,是我们一直探索的问题。

1 《数据结构》学习中的问题

1.1 高职的性质和特征

我们《数据结构》教学的对象是高职学生,而高职教育就是就业教育。计算机专业,如软件专业,其出口是符合企业岗位入门需求,具有相当于一年软件开发经验的软件开发工程师(资格证书)[4]。就业教育的特征是以就业为导向,以就业岗位的需求为基础,明确培养目标和教学的程度。以实用技能为核心,选择课程内容,学以致用。以动手能力为突破点,培养自学能力、解决问题能力。以项目经验为学习目标,了解行业规则。《数据结构》也应紧紧围绕这一特征展开教学。

1.2 《数据结构》教学的状况

从以往《数据结构》教学的情况看,效果没有完全达到,高职学生的来源、现状、特点,如学生理论应用能力欠缺,不能正确认识课程的作用,学习积极性不高等,影响了课程的教学[5]。在《数据结构》教学改革中,我们从课程本身入手,分析存在的问题,课程理论偏多,使得高职学生掌握困难,实践课程难度偏大,起不到应有作用,应用不具体,缺乏应用示例。我们提出,高职《数据结构》课程的改革不宜理论太抽象,而应重在应用。

2 《数据结构》教学改革重在应用

2.1 《数据结构》教学理解

数据结构是指数据间的相互关系。具体到计算机环境,一种结构自然地联系着作用在这种类型的数据上的运算,为了执行运算,必须把数据以某种方式存储在计算机中。因此,我们认为,数据结构就是由某种逻辑关系组织起来的一批数据,按一定的存储方法被存储于计算机中,并在这些数据上定义一个运算的集合[6]。

通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的存储结构。每种数据结构从逻辑结构、存储结构和操作运算等方面进行教学,全篇从集合、线性结构等基本数据结构入手,实现层次结构和网状结构等较复杂结构教学,这是《数据结构》教学的共同切入点[7]。

2.2 高职《数据结构》教学应发生变化

在《数据结构》教学改革中,我们研究认为,由于高职自身的特点和办学的现状,作为高职《数据结构》的教学,其内容和要求应有所变化,侧重点适当改变,理论的教学在内容和课时上应减少,课程的重点应转移到数据结构的应用上。最终的目的是学生应能够把基本的数据结构作为对象来看待,能够把常用的数据结构与面向对象的程序设计方法联系起来,进而掌握常用的线性表、堆栈、队列、二叉树、向量等数据结构及各种排序、查找算法应用[8],达到高职学生学了《数据结构》能够在系统开发中应用数据结构的目的。

具体地说,通过课程的教学,学生能够具备常用的基本数据结构主要算法的应用能力;具备常用的排序、检索和索引算法应用能力;具备在进行程序设计、调试、测试的课程项目训练过程中,能够合理地组织数据、有效地表示数据、有效地处理数据,书写的程序结构清楚、正确易读,提高程序设计的质量等能力[6]。

所以,教学重点也应随着相应改变为:基本数据结构在解决实际问题中的应用;基本的算法策略在解决实际问题的应用;新兴数据结构的相关问题;新兴算法的相关问题及实践;经典问题的经典算法;典型系统的计算机模拟;需自行设计数据结构和算法来解决的实际问题[9]。

算法描述语言采用广为程序员所使用的面向对象的语言,使得ADT (抽象数据类型)的概念得到更自然的体现,更本质地体现数据结构的思想,而且所定义的数据结构类能够方便地被重用[6]。

3 《数据结构》教学改革实践

以线性表为例阐述《数据结构》教学改革的思路。《数据结构》线性表在全篇中处于基础、入门的地位。我们在教学改革中,按照先讲清概念,再结合图像、动画理解逻辑结构和存储结构,重点讲解线性表的应用的方式进行教学,有意识地弱化理论性,强调动手能力的培养。讲解应用时,采用了Java语言作为描述语言,因为Java语言提供了许多预定义好的和已经实现的标准库,能够直接全面支持数据结构原理[10]。

在讲解线性表的概念时,通过举例,学生能够理解具有相同属性的数据元素的有限序列,逻辑结构通过示意图讲解也能接收。但线性表如何实现,就涉及到数据的存储结构,存储结构有顺序、链接、散列多种方式。我们讲解两种基本的存储结构。

在讲解存储结构时采用图像示意,加在其上的算法采用动画演示,但算法的具体代码描述已不再是重点。学生听懂后,重点转向数据结构的应用。就线性表而言,顺序表采用ArrayList类实现,链表采用LinkedList类实现。在Java语言中,与《数据结构》一样,ADT是一个仅保存数据类型和可能在这个数据类型上进行的操作定义。开发者只能通过ADT的操作方法来访问ADT的属性,无需知道ADT内部操作如何实现[11]。这就为我们《数据结构》教学改革的重在应用提供了可能性。

所以,线性表无论是采用何种存储结构,对外的接口总是不变。ArrayList类、LinkedList类都是List接口的实现。List接口中void add(int index,Object element)在指定位置index上添加元素element,Object remove(int index)删除指定位置上的元素,Object get(int index)返回List中指定位置的元素,int indexOf(Object o)返回第一个出现元素o的位置,如果没有该元素则返回-1,int size(),List subList(fromIndex, toIndex)等方法,ArrayList类、LinkedList类同样具有。LinkedList类增加特有的方法,如void addFirst(Object o),void addLast(Object o),Object getFirst( ),Object getLast( ),Object removeFirst( ),Object removeLast( )。

该处数据结构应用举例为模拟扑克发牌。采用ArrayList实现。首先生成52张扑克牌,然后用Collections.shuffle( )方法打乱牌的顺序,这个操作即模拟扑克洗牌操作,之后根据运行参数进行模拟扑克发牌。发牌方法dealHand(List deck,int n),参数n指明每人发牌张数。部分代码如下:

public static List dealHand(List deck,int n){//发牌

int deckSize=deck.size();

List handView=deck.subList(deckSize-n,deckSize);

List hand=new ArrayList(handView);

handView.clear();

return hand;

}

再通过调用main()方法来调用dealHand(deck,cardsPerHand)。

int numHands=4;//发牌人数

int cardsPerHand=11;//每人发牌张数

String[]suit=new String[]{"spades","hearts","diamonds","clubs"};//四种花式

String[]rank=new String[]{"Ace","1","2","3","4","5","6","7","8","9","10","Jack","Queen","King"};//13张牌

List deck=new ArrayList();//

for(int i=0;i

for(int j=0;j

deck.add(rank[j]+" of "+suit[i]);

Collections.shuffle(deck);//打乱牌的顺序,模拟洗牌操作

for(int i=0;i

System.out.println(dealHand(deck,cardsPerHand));//发牌

当我们将

for(int i=0;i

System.out.println(dealHand(deck,cardsPerHand));//发牌

增加在

Collections.shuffle(deck);//打乱牌的顺序,模拟洗牌操作

之前,可以对照洗牌前后的线性表的元素,顺序发生了变化,加强了对有序概念的理解。

这样的数据结构讲解,学生特别有兴趣,在不知不觉中,理解了数据结构的概念,学会了线性表的应用,达到了《数据结构》课程的教学目的。

4 结束语

《数据结构》课程是我校的精品课程,通过多年教学改革,我们做了许多有益的探索,学生通过共享教学改革的成果,对《数据结构》课程的学习收到了很好的效果。通过不断努力探索,我们将《数据结构》课程的教学从理论较重,改变为注重应用,走出一条适合高职学生的教学之路。

参考文献:

[1] 马秋菊.数据结构[M].北京:中国水利水电出版社,2006.

[2] 唐策善,黄刘生.数据结构[M].北京:高等教育出版社,2004.

[3] 严尉敏,吴伟民.数据结构[M].北京:清华大学出版社,2000.

[4] 全国高等院校计算机基础教育研究会[M].高职院校计算机教育经验汇编. 北京:中国铁道出版社,2007.

[5] 刘建国.高职《数据结构》课程教学方法改革探讨[J].北京市经济管理干部学院学报.2007.6:78-80.

[6] 张铭,等.数据结构课程的知识体系和教学实践[J].计算机教育.2004.3:89-91.

[7] 帅训波,等.数据结构间的纵横联系,计算机与信息技术[J].2007.8:39-41.

[8] 王志华,等.高等职业教育中《数据结构》课程建设研究[J].忻州师范学院学报.2007.4:59-61.

[9] 李治军,等.数据结构与算法课程设计教学模式的探讨[J].计算机教育.2006.2:54-57.

[10] J. Pinson著,罗英伟等译,Java数据结构与面向对象编程基础[M].北京:人民邮电出版社,2002.

[11] 孙杰,Java程序设计[M].北京:中国计划出版社,2007.

上一篇:基于VB.Net水晶数据报表设计 下一篇:题库管理系统中OLE技术对WORD的控制实现