数据结构范文

时间:2023-03-29 04:39:14

导语:如何才能写好一篇数据结构,这就需要搜集整理更多的资料和文献,欢迎阅读由公务员之家整理的十篇范文,供你借鉴。

数据结构

篇1

【关键词】数据结构;知识体系;教学设计

1 课程的地位与作用

《数据结构》是计算机科学与技术专业的核心专业基础课程,是计算机程序设计的重要理论和实践基础,是计算机理论与技术的重要基石。《数据结构》上承高级语言程序设计,下启算法分析与设计,是计算机科学与技术人才素质框架中的脊梁骨,对学生能力培养至关重要,向来是计算机本科教学的重中之重。调查表明已毕业的学生通过他们的工作实践认为《数据结构》是最有用的课程之一,这也从另一方面说明了该课程的重要性。

计算机科学与技术专业的培养目标之一是掌握计算机科学与技术的基本理论、计算机软/硬件基本知识及应用技术,《数据结构》在培养目标的实现中具有举足轻重的作用,是理解计算机科学与程序开发技术的关键课程。作为一门重要的专业必修课程,《数据结构》课程既是对以往课程的深入和扩展,也是为将来更加深入地学习其他专业课程打下基础。课程中所学习的排序问题的算法,以及基本的树、图等数据结构,是计算机科学的基本功。B+树等高级数据结构,也是数据库、操作系统、编译原理、计算机网络等后续课程的基础。《数据结构》是计算机专业考研的统考课程,也是很多大赛(“蓝桥杯”、ACM等)必涉及的知识。

《数据结构》与其它课程关系如图1所示。

图1 《数据结构》与其它课程关系

《数据结构》在培养目标中的作用如图2所示。

图2 《数据结构》在培养目标中的作用

2 课程的教学目标与主要内容

2.1 课程的教学目标

学习本课程后,应达到下列基本要求:

(1)理解数据结构的基本概念;

(2)熟练掌握线性表、栈、队列、树、图等常用数据结构的基本运算的实现及应用;

(3)熟练掌握排序和查找的常用算法及应用;

(4)能够对算法进行时间复杂度度、空间复杂度的分析;

(5)培养学生分析数据、组织数据的能力,能够根据实际问题来选择合适的数据结构,设计有效的算法。

2.2 教材与主要参考资料

教材

耿国华《数据结构(用C语言描述)》,高等教育出版社,2011年

教材选择的依据:

(1)该教材跟踪技术发展需要,体系科学,是“十一五”国家级规划教材。

(2)该教材理论的阐述由浅入深、通俗易懂。

(3)该教材理论结合实际,配有大量的例题、习题与实习题。

主要参考资料

[1]严蔚敏,吴伟民《数据结构(C语言版)》,清华大学出版社,2006年

[2]张铭,王腾蛟,赵海燕《数据结构与算法》,高等教育出版社,2008年

[3]朱战立《数据结构――使用C语言(第4版)》,电子工业出版社,2009年

[4]王晓东《数据结构(C语言版).》电子工业出版社,2007年

[5]西北大学数据结构精品课程网站

http//:/datastr

[6]北大数据结构与算法课程网站

http:///pkujpk/course/sjjg/

[7]洛阳理工学院数据结构精品课程网站

http//:/sjjg

[8]洛阳理工学院数据结构精品资源共享课程网站

http//:/ds

2.3 知识体系

《数据结构》知识体系可分为分为三大块,如图3所示。

图3 《数据结构》知识体系

数据结构课程的基本知识模块是以数据的逻辑结构为主线,顺序介绍线性结构(线性表、栈、队列、串、数组、广义表)、树形结构、图结构。在介绍每种数据结构时,再讨论其存储结构以及相关的算法。在介绍完基本的数据结构及其存储结构和相关的算法后,介绍了两种常用技术:查找和排序。

3 课程教学内容安排

3.1 课程重点、难点

重点:线性表、栈、队列、二叉树、图典型数据结构的逻辑结构、存储结构和操作的实现方法,各种典型的排序和查找算法思想。

难点:各种数据结构的操作实现和应用

第1章是对数据结构课程的认识,基本概念比较多,概念要讲清楚、准确,第一章要通过丰富的例子讲解如何分析算法时间复杂度,这是贯穿整门课程的内容,也是本课程的一个难点,第2章是整个课程的重要基础,要讲得十分详细,为后面的章节打下良好的基础,第3章的栈与递归的实现是本书的一个难点,要通过例子讲透,并且在第6章还要进一步地讲递归到非递归的转换。第四章内容较简单,而且学生在高级语言程序设计中学习过字符串,因此留给学生自学,也可以培养学生的自学能力。第五章数组和广义表一般讲解即可。第6章的二叉树要详细讲解,第7章的几个关于图的算法较难,要结合例子讲解,第8章中的难点是平衡二叉树的调整和B树,要通过例子把算法的思想讲清楚,使学生能实际操作。第9章要把各种排序的思想、特点讲清楚,特别是较难的希尔排序、快速排序、堆排序、基数排序一定要结合实例讲解。

3.2 课时分配

表1 总课时:72;理论授课:58,实验:14

4 课程实践环节

数据结构是与实践紧密结合的课程,学生学习的理论必须经过大量的实践才能更好的掌握,因此必须强化实践教学。数据结构实践分两部分:一部分是随课程进行的实验,另一部分是课程结束后为期一周的课程设计。通过合理、有效地设计上机题目,改进实验考核方式,调动学生的积极性,启发引导学生掌握基础理论并能创新应用,增强学生综合运用有关知识的能力。

实验内容包括六个实验项目,分别为:线性表的基本操作(2学时),栈的基本操作(2学时),队列的基本操作(2学时),二叉树的建立及遍历(2学时),图的遍历的实现(2学时),宿舍管理查询系统(4学时)。其中宿舍管理查询系统实验为三性实验。

课程设计是课程结束后进行的很重要的实践环节,本课程课程设计给出14个题目,这些题目都是综合性的,学生可任选一题,完成后要写出课程设计报告。通过课程设计,使学生进一步理解和掌握所学各种基本知识,培养学生综合运用所学的理论知识和方法独立分析和解决问题的能力;训练学生用系统的观点和软件开发一般规范进行软件开发,使学生具备软件工作者所应具备的科学的工作方法和作风。

学生完成实验后,不仅要求学生提交高质量的规范的实验报告,还要引导学生互相交流,开阔视野。好的实验作业要放到班级公共邮箱里和所有学生共享。

5 课程的建设情况

5.1 课程资源情况

该课程教学文件完备。通过多年的教学,积累了必要的一些辅助教学资料(包括教学参考书、参考课件、声像、影像等),并且使用效果良好。补充的学习资料有:

(1)教学网站:http:///sjjg/

http:///ds/

(2)搜集了大量探讨数据结构理论与算法、介绍学科前沿动态的中、英文学术论文和硕、博论文,对其分类整理后在课程教学网站上提供下载链接,以供学生深入研究、学习;

(3)自编《数据结构实验指导书》;

(4)多媒体电子教案的纸制版和网络版;

(5)数据结构与课程实验指导书的纸制版和网络版;

(6)自编的算法演示器;

(7)Flash课件和Flash算法演示;

(8)图书馆内,国外优秀的经典教材。

5.2 实验实习条件

所有实验在计算机系机房进行,机房现有的实验平台功能齐全,课程中所涉及的实验项目均可在平台上完成。目前课程实验大纲中所列的实验开出率达到100%,实验教学效果良好。

5.3 课程成果

该课程2010年被评为河南省级精品课程,2012河南省级精品资源课程。

6 教学设计

《数据结构》是一门理论与实践相结合的课程。由于理论的抽象性,学生难以建立起数据结构的相应算法概念,容易产生畏惧和茫然的情绪。因此教学中在积极引导学生、启发学生,激发学生学习的积极性。教学以课堂讲授为主,同时借助网络教学平台,拓展课堂讲授的相关知识,便于同学自主学习、巩固课堂所学内容。另外,组织独立习题课,针对学生作业中出现的典型问题进行深入探讨。

在教学中要贯彻“以理论学习为主线,以课程实验、课程设计为补充”的教学思想。

6.1 精心组织教学内容

分析学生的需求和现实,同时紧紧抓住教学目的,参考相关院校的教材和教学计划,取长补短,参考考研大纲、软考大纲,对课程的内容进行严格的筛选,删除一些较深且应用不是很广泛的内容,对于重点的内容要精讲、细讲,而对于有些较简单且与先修课程交叉的内容(如字符串与数组),就粗讲,甚至可以留给学生去自学。这样重点突出,简洁明了。在课程内容的安排上由浅入深,循序渐进。对每种数据结构都按三个层次来组织教学内容,并且把这三个层次的思想贯穿于数据结构教学的各个环节。第一个层次,基本概念、方法,这是最基本的内容,学生必须掌握,在学生很好地掌握了这个层次的内容后,可进入第二个层次,基本概念、知识的简单应用,这一层次是对基本概念、知识加深理解,这个层次学生必须达到。第三个层次就是基本概念、方法的深入应用,把所学的知识、方法串起来灵活运用。要达到这个层次,需经过大量的训练才行。

6.2 实现数据结构课程与其先修和后续课程的无缝衔接

程序设计语言(如C语言)是本课程的一门非常重要的先修课程,数据库原理、编译原理、操作系统是该课程的后续课程,这些课程不能各自为政,而要无缝衔接,教这些课程的老师要互相交流,这样在讲程序设计语言时可以有的放矢的把和数据结构联系紧密的内容预先告知学生,这样学生就会对相关知识印象深刻,到数据结构课中就很容易用的得心应手。在数据结构课中讲到各种后续课程中用到的数据结构时也告诉学生,并且在后续课程中用到相关数据结构时提醒学生这是这种数据结构在本课程中的应用。这样使学生的知识一脉相承,使学生在学习各门课程时把知识融会贯通。

6.3 精讲多练,加强实践环节,培养学生分析问题解决问题的能力

数据结构既有大量的理论又是实践性很强的课程,学生要很好地掌握这门课,必须要有一定的理论知识,又要经过大量的上机实践。因此,针对应用型本科的特点,在教学过程中,即注重理论,又重视实践,加大上机实践的力度。实践由与理论课同时进行的上机实验和理论课讲授完毕后的课程设计两部分组成。对所学的每一部分内容都要要求学生完成相应的实验习题。整个实践过程要结合教学进度与学生的实际情况,制定实践的内容。每部分的实验习题必须精心挑选,和上述三个层次对应,分为基础与验证型实验、设计与综合型实验,开发与创新型实验。既要把基本知识掌握好,又要会灵活运用。基础与验证型实验是基本的、较简单的题目,主要结合课堂理论教学内容展开,学生可以对在课堂上学到的基本算法进行验证;设计与综合型实验是具有挑战性的较难的新颖有趣的题目,让学生充分利用所学的理论知识进行相对较复杂的应用设计,培养学生综合能力;开发与创新型实验培养学生的创新意识,提高综合能力和创新实践能力。

6.4 多样化的教学方法

6.4.1 启发式教学

教师主要起引导的作用,激发学生的学习兴趣,发挥学生的学习积极性,与学生进行互动,鼓励学生对教学内容提出问题,师生共同讨论,提高教学和学习水平。鼓励学生多动脑子进行思考,在学习过程中不拘于以往的解法,对同一个问题可以提出不同的解法,深化对问题的理解。另外还要强调学生自己学会对知识的总结、梳理、推演和挖掘。总结是教学中一个非常重要的环节,不可忽视。通过对所学内容的总结、梳理、推演和挖掘,理清内容的内在联系,使知识条理化、系统化,加强对知识的理解和掌握,培养学生的归纳总结能力和思维创造能力,对所学内容提炼出精华的东西。(下转第260页)

(上接第167页)6.4.2 对比式教学

对同一问题,引导学生从不同的角度去思考,找出多种方法来解决。比如,在解决约瑟夫环问题时,可以采用循环链表作存储结构,或采用线性表的顺序存储结构,也可以采用数组作存储结构。这种对同一问题寻找不同算法实现的教学方式,有效地开阔了学生的思路,同时通过对不同算法的比较,加深了学生对算法的理解和掌握。

6.4.3案例教学

通过实例引入知识点。比如讲最小生成树可以通过城市间建立通信联络网为例引入最小生成树及其求解算法,再比如讲最短路径可以通过去旅游选择最短路径为例引入最短路径及其求解方法。

6.5 把课程与考研、软考、相关竞赛有机的结合起来

数据结构是计算机专业考研和软考的必考科目,在教学过程中有意识地把考研和软考引入教学中,使学生学完本课程后能够从容应对考研和软考中的数据结构题目。组织和鼓励学生参加程序员,高级程序员证书考试,辅导学生参加各种编程竞赛比如ACM大赛。

7 考核方法

要加强平时的学习过程管理,不定时地进行一些随堂的小测试,课堂提问等。考试以学生完成日常作业和实验环节为必要条件,期末考试采用笔试方式。成绩评定由三部分组成:期末考试占总成绩的60%,平时成绩占总成绩的20%,实验占总成绩的20%,综合考核学生该科成绩。

8 结语

《数据结构》对计算机科学与技术专业的学生来说是非常重要的课程,组织好教学,使学生通过该课程的教学,很好地掌握数据结构的相关知识,为今后的学习奠定良好的基础是非常重要的。

【参考文献】

篇2

关键词:数据结构;实践教学;指针;结构体;C语言

中图分类号:TP311.12

1 指针和结构体的概念

在程序中定义一个变量,如int x;在编译时系统就根据定义的变量类型,给这个变量分配相应的内存单元。内存中每个字节都有一个编号,称为“地址”,在地址所标识的内存单元中存放数据。在程序中,一般通过变量名对内存单元进行存取操作,称为“直接访问”,如x=7;printf(“%d”,x);假设定义一个变量p,用于存放整型变量x的地址,int*p=&x;则变量p称为“指针变量”,我们称指针p指向x。通过指针p访问x,称为“间接访问”,如*p。

因此定义指针变量的格式是:基类型 *指针变量名;

引用指针变量的格式是:*指针变量名。

结构体将不同类型的数据组合成一个有机的整体,定义一个新的数据类型,格式:typedef struct

{成员列表}结构体名;

结构体变量的引用格式:结构体变量名.成员名。

2 线性结构中指针和结构体的使用

线性结构中数据元素之间是1:1的线性关系,线性表是最基本的线性结构,有顺序存储结构和链式存储结构两种存储方法。顺序存储结构是在内存中用一段连续的存储单元来依次存储线性表的数据元素,用元素在机内的物理位置相邻表示逻辑相邻关系,常借助于数组来表示数据存储区域。因此顺序表类型定义如下:

#define MaxSize 100 // MaxSize是数组的容量,便于后期进行插入运算

typedef char DataType; //程序中的DataType设定为char型,便于统一修改

typedef struct{

DataType data[MaxSize];//data数组用于存放数据元素

int Last;//整型变量last存放当前顺序表中最后一个数据元素的下标值

}SeqList;//SeqList为顺序表的数据类型

SeqList*L;//定义一个指针变量L

L=new SeqList;//new用来申请顺序表的存储空间,L指向此顺序表

顺序表表长:L->Last+1

顺序表中的数据元素:L->data[0]~L->data[L->Last]

比如顺序表的插入运算Insert_SeqList(SeqList *L,int i,DataType x)基本语句如下:

for(j=L->last;j>=i-1;j--)

L->data[j+1]=L->data[j];//从最后一个元素到第i个元素逐一后移

L->data[i-1]=x; //在i位置处插入元素x

L->last++; //表长加1

链式存储结构是用一组任意的存储单元存放线性表的数据元素,逻辑次序和物理次序不一定相同,元素之间的逻辑关系用指针表示。单链表的类型定义如下:

typedef struct Node{

DataType data;//数据域,存储数据元素

struct Node * next;//指针域,存储后继结点的地址

}Lnode,*LinkList;

LNode*p;//定义一个LNode类型的指针变量p

p->data //p所指结点的数据域

p->next //p所指结点的指针域,即后继结点的存储地址

LinkList:指向LNode类型的指针变量,通常用于定义头指针的数据类型,如

LinkList head; //定义了一个头指针head

比如在p所指向的数据元素之后插入新结点,基本语句为:

LNode*s;//定义一个LNode类型的指针变量s

s=new LNode;//申请结点空间

s->data=x;

s->next=p->next;

p->next=s;//注意:两个语句的操作顺序不能交换。

3 树形结构中指针和结构体的使用

树形结构中数据元素之间是一对多的关系,以二叉树为例,一般采用链式存储结构,便于进行插入、删除运算。二叉树类型定义如下:

typedef struct node{

DataType data; //数据域

struct node *lchild,*rchild; //左右指针域

}BiTNode;

typedef BiTNode *BiTree; //指向二叉树结点的指针类型

如构造二叉树算法如下:

void CreateBiTree( BiTree*t) //构造二叉链表

{ char ch;

scanf("\n%c",&ch);

if(ch=='0') *t=NULL; //读入0时,将相应结点置空

else{*t=new BiTNode; //申请结点空间

(*t)->data=ch;

CreateBiTree(&(*t)->lchild); //构造二叉树的左子树

CreateBiTree(&(*t)->rchild); //构造二叉树的右子树

} }

4 图形结构中指针和结构体的使用

图形结构中数据元素之间是多对多的关系,一般采用邻接矩阵进行存储,存储顶点和边(或者弧)的信息。以邻接矩阵存储图的类型定义:

typedef struct{

int visited[MaxV]; //顶点表

int edges[MaxV][MaxV]; //边表

int vertexN,edgeN; //顶点数和边数

}Graph;

比如图的深度优先遍历算法如下:

void DFS (Graph*G,int v){

int w;

G->visited[v]=1;

for(w=0;wvertexN;w++){

if(G->edges[v][w] && !G->visited[w]) { DFS(G, w); }

} }

5 结束语

指针和结构体在数据结构中频繁使用,希望通过本文的讲解,帮助学生理解结构体定义数据类型的方法,掌握利用指针完成操作的方法,学好《数据结构》这门课程,为后续专业课奠定良好的基础。

参考文献:

[1]谭浩强.C程序设计(第二版)[M].北京:清华大学出版社,2002.

[2]刘振鹏.数据结构(第六版)[M].北京:中国铁道出版社,2010.

[3]杨丽萍.数据结构中指针的应用及分析[J].计算机时代,2012(02).

[4]孔兵.数据结构实验中指针相关问题[J].教育教学论坛,2014(01).

篇3

关键词:数据结构;教学模式;教学方法

中图分类号:G424文献标识码:A文章编号:1009-3044(2008)24-1219-02

Discussion on the Tteaching Practice of "Data Structure"

CHEN Pei-zheng, ZHANG Hao-ming

(Department of Medical Informatics, Guangdong College of Pharmacy, Guangzhou 510003, China)

Abstract: The course of "Data Structure" is the foundation of computer theory and technology, which is abstruse and hard to understand. It is a discussable topic on the teaching pattern and teaching method. In this paper, to prompt the teaching effect, how to take good teaching method on the process of teaching the course of "Data Structure" are discussed.

Key words: data structure; teaching pattern; teaching method

1 引言

《数据结构》是计算机应用专业的专业基础课程,也是整个计算机学科体系中的四大支柱课程之一。该课程主要介绍各种离散结构(如表、向量、集合、树、图等)在计算机上的存储和处理,以及一些常用算法。《数据结构》也是一门理论性很强的课程,是从事计算机软件开发的基础,对培养学生良好的编程思想和风格也有很大的帮助作用。《数据结构》重在理论,其概念的抽象性、算法的经典性和复杂性、描述语言的先进性,导致在以往的教学中,理论教学和实践教学未能很好的结合起来,加上通常大学学生的编程经验相对较少,学习起来难度特别大,被公认为是高校计算机课程中最难学好的课程之一。

2 《数据结构》教学方法和措施

《数据结构》课程具有较高的抽象性,学生普遍反应难学。针对学生的特点,笔者在《数据结构》的课程教学实践中总结了一些教学方法和措施,并取得了较好的效果。主要体现在以下几个方面:

2.1 使学生合理认识《数据结构》课程

在课程开始阶段,首先要强调这门课程的重要性,及其在计算机学科体系中的地位。数据结构对于计算机专业的学生来说很重要,特别是对于从事计算机专业,特别是软件开发的人心里都清楚这点。有些爱好计算机的发烧友,自己学习了某种开发工具(编程语言),也能动手编程,但编出的程序总是显得很“业余”,很难再做修改,或者进行移植,为什么呢?这就是缺乏了学习数据结构这门课程。事实上,凡是真正学习了这门课程,都会认为它是计算机专业与非专业的一个分水岭。它不仅是计算机专业的核心课程, 也是其他理工科专业的热门选修课,特别是非计算机专业攻读计算机辅修专业的学生,或者学习计算机程序设计的其他人员必须要学习的。

2.2 介绍《数据结构》课程的特点和学习方法

说明这门课程的特点。很多同学反映数据结构很抽象、很难学而且内容又多。确实,本课程需要一门程序设计语言的知识(例如C++语言),还需要一些离散数学的知识。有些同学由于没有这方面的基础,导致在看书时无法理解各种算法的思想,更无法看懂实现这些算法的程序。针对这种现状,就要求这些学生首先要补习相关知识,如有必要,还要专门增加课时进行补习。在介绍课程的主要内容时,需要用明白易懂而又概括性强的语言来描述。

数据结构中涉及很多C++算法,学生直接阅读很困难,事实上所有计算机程序都这样,读别人的程序,如果不清楚算法的思想,可能比自己写程序还难,即使自己写的程序,过了较长一段时间,再读会很困难。因此,本人制作的教学课件中,将一些比较重要又较难的算法做成了动画演示,这样其中的算法思想看起来就很直观,易懂。然后,再对照C++算法的每一条语句,来演示其实际变化过程,这样一步一步理解整个算法,这对同学的帮助很大。还有,准备一些由浅到深的算法过程,让同学来读算法写结果,帮助同学理解算法的意义。

另外,由于数据结构涉及的内容很多,教学中必须说明、区分重点内容,否则教师和学生将花费太多的精力和时间(事实上,辅导时间也不允许)。例如,针对算法描述,我会说明算法思想更重要,而算法的C++函数定义只重点要求几个基本而典型的算法。事实上,中央电大历届的考题是这样,电大学生的实际状况也是这样。在平时教学过程中,特别是期末复习时,我会重点要求各种算法的基本思想,再针对部分算法的C++语言描述重点要求掌握。对这些重点内容,不仅要多讲解习题来印证,还要求同学下来完成平时作业,并适当补充一些往届考题。

2.3 实例教学,形象生动

所谓“实例教学”,就是对课程中的重点、难点内容,选配适当的例题、运用恰当的比喻进行演示和说明,把抽象的内容具体化、形象化,帮助学生理解掌握这些内容,并适当加以引伸,引导并激发学生作进一步的思考和探索。

应该结合学生实际情况,使用更加通俗、形象、生动、直观的教学语言和教学方法进行讲授,注重激发学生的学习兴趣,更有效地帮助学生理解和掌握课程内容。例如在讲解堆栈和队列的时候,学生对这两个概念比较陌生,于是我们通过与日常生活中的叠盘子、食堂排队买饭等现象联系起来进行比喻说明,学生不仅听起来较有兴趣,易于理解,而且效果也远比只单纯地念定义要强得多。

从学生的角度来看,通过一个比较有趣的实例,学生可以较容易地弄懂一个较复杂的知识点,在克服困难的过程中会不断地获得成就感,从而更大程度地激发他们的求知欲望,逐步形成一个感知心智活动的良性循环,更能激发其继续学习的欲望。

2.4 重视上机实践,提高学生的学习兴趣

本门课程强调对上机实验的要求,专门有实验指导教材,并要求每个实验都要写出实验报告,就这门课程而言,不同教材采用不同的程序设计语言,以前还有自定义的一种语言,而现在都采用实际的计算机语言,例如Pascal语言,C语言,C++语言等,之所以要用一门计算机语言来数据结构的算法,就是要达到这样一个目的:让学生在实际上机实践操作时,在程序的运行、调试过程中,也即与计算机交流的过程,体会计算机解决问题的方式。而当学生意识到这一点后,就会体会到软件开发的奥秘,激发其兴趣,慢慢就会自己上路从事软件开发工作了。这就是学习数据结构,学习数据组织和对已组织好的数据的基本处理对计算机专业,特别是软件开发专业学生的深刻影响。

2.5 联系实际,学以致用

《数据结构》是一门理论性课程,重在对编程思想和风格的培养,简单的死记硬背一些概念、定义没有任何的用处,我们讲课的目的就是要让学生在学习完《数据结构》之后,能够主动的将书中的知识灵活运用到生活中去,所以在教学的过程中联系实际非常重要。在教学过程中,我们努力使每个知识点都与具体的应用实际联系起来,促进了学生的理解,提高了他们的实践应用能力。

例如我们在讲授图的概念时,学生不理解图的最小生成树有何用处,于是我们列举了网络布线,城市道路建设,邮递员送信等大量应用实例,同时启发学生自己去发现其他的一些应用实例。结果学生很感兴趣,对这个知识点记忆非常深刻。

2.6 多课程结合,融会贯通

几乎每一门课程都有前驱和后续课程,《数据结构》也不例外。而且《数据结构》作为一门专业基础课程,同时又是计算机学科的支柱课程之一,其中的很多知识将贯穿计算机知识学习的整个过程。所以讲授《数据结构》更应该注重与其他相关课程的联系,通过《数据结构》的讲解使学生对整个计算机课程有一个较全面的了解,让学生在头脑中形成一条清晰的学科主线。

例如在讲解稀疏矩阵的时候,我们先简单回顾《多媒体》课程中图像压缩的方法,然后告诉学生之所以可以压缩图像,是因为图像中含有大量的稀疏矩阵,同时,稀疏矩阵的存储方法和访问方法会直接影响图像的压缩效果和压缩效率。通过这个例子,学生不但理解了稀疏矩阵的相关概念,同时也将本门课程同《多媒体》课程中的相关知识有机地联系起来了。

3 结束语

由于《数据结构》是计算机专业的骨干、核心课程,也是大多数学校研究生入学考试的必考课程。因此,对于该课程的教学不仅要从理论上进行探讨,还要从内容结构、教学方法等方面进行研究,作者根据自己的教学经验和体会完成本文,与各位同行交流,希望共同搞好《数据结构》课程的教学工作。

参考文献:

[1] 周娅.“数据结构”课堂教学与学生创新思维培养[J].桂林电子工业学院学报,2006,26(4):326-328.

篇4

关键词 数据结构 微课 碎片时间

中图分类号:G642 文献标识码:A

数据结构是计算机专业一门重要的基础课程,其中涉及到了大量难度较大的算法描述,例如在模式匹配中的KMP算法,树中的二叉树搜索树和图中的迷宫,最短路径问题等。

学习过程中,学生们普遍遇到的问题是,经常当堂无法领悟难度较大的算法,或者当堂领悟了,过后由于算法的复杂度较高,个别知识点的的遗忘造成无法理顺整个思路。但几乎所有从事计算机编程的学生都会有这样的反馈:数据结构在实际应用中非常重要且实用。综上所述,如何提高数据结构课程的当堂授课效果,或者提供一些学生可以很容易自学的课下辅助教学平台,是非常有意义和值得探讨的问题。

“微课”是指以视频为主要载体,记录教师在课堂内外教育教学过程中围绕某个知识点(重点难点疑点)或教学环节而开展的精彩教与学活动全过程。与传统的教学视频相比,“微”体现在时间的短和内容的精悍,能够充分满足人们生活的快节奏所带来的利用“碎片时间”进行学习的需求,而移动互联网的迅猛发展,为这一需求提供了必要的硬件基础,以手机为载体,随时随地观看微小视频进行知识的学习和补充成为可能。数据结构课程的微课化是指,利用微课形式,通过视频,将数据结构中的难点算法进行有效的讲解和展示,让学生或自学人员可以不受时间、地点的限制,进行相关知识点的学习,跟传统的视频教学相比,克服了时长(一般为40到60分钟)所带来的畏难心理,以10分钟左右为一个单元,可以在短时间内轻松获取知识。但这也对视频的制作和知识点的提炼、组织提出了更高的要求,短小而又精悍,给人以深刻的印象,又能达到学会的目的,是微课制作的难点所在。

以数据结构中的二叉搜索树为例,二叉搜索的概念其实在现实生活中就经常使用,例如看商品猜价格,就用到了二叉搜索的方式,设计该微课时,就可以以此为切入点,首先通过看商品猜价格游戏的方式进行知识点的引入,在猜价格的过程中,通过软件编程控制,提示价格猜高或者猜低,最终引导用户猜中价格,根据用户猜测的次数给出一个不同的提示,如果成绩不理想,用户可以进一步学习失败的原因(猜测策略),然后提高猜中效率。兴趣是最好的老师,通过这个有趣的开端,大家就有了进一步学习的欲望。接下来是二叉搜索树的创建,一组需要查找的无序数据,如果组织,才能尽可能地高效地完成搜索任意一个数据的过程,利用二叉搜索树,可以在避免传统排序的基础上,进行高效的查找,于是如何建立出这样一棵二叉搜索树,成为大家进一步关心的知识点。通过前期自动演示,学习者可以很容易地掌握算法的思想,然后借助于一些交互功能较强的软件,可以实现由用户自己创建二叉搜索树的过程。通过这一系列的演示过程,用户可以很容易地学到二叉搜索树的相关知识点。

以上所说,对于制作微课的人员来讲,技术上的难度是存在的,制作者要求会录制,编辑视频,还要掌握一些交互式课件的制作软件,以及声音的录制,多媒体合成等等,但教授数据结构课程的教师,不同于其他专业,本身就是从事计算机技术的,有着这方面的独特优势,因此,只要根据需求稍加学习,就能很快地掌握这些技术,这也是数据结构课程可以微课化的一个优势条件。微课质量的好坏,关键还在于设计,好的设计可以弥补技术上不足,因此千万不要因为过于重注技术而忽略设计。

随着移动互联网技术的发展,通过网络进行随时随地的学习已经成为一种必然的方式,对于数据结构中较难的知识点,传统的课堂视频录制时间长、效果差,不便于学生利用碎片时间学习,通过巧妙的设计,利用多种形式,多种技术将其呈现为可视化的小视频,可以大幅度提高学生的学习效果。通过微课这种新型的教学手段,可以让类似数据结构这种难度大、难理解的课程,更好地辅助学生完成知识点的回顾和难点的掌握,快速地完成复杂算法的学习,为后续课程的学习打下坚实的基础,对全面提升学习效率有着积极的意义。

篇5

关键词:数据结构;Floyd最短路径算法;医院选址;C语言

中图分类号:G642.41 文献标志码:A 文章编号:1674-9324(2014)36-0280-02

一、引言

《数据结构》课程是计算机类、信息管理类、电子商务、经济类及相关专业的一门重要的专业基础课程。早在1968年,美国一些学校的计算机系就开设《数据结构》课程。20世纪70年代中后期,我国也开设《数据结构》课程作为计算机专业的核心课程。开设该课程的目的在于让学者了解数据的计算机外部逻辑结构和计算机内部的存储结构以及相关操作,它为后续的专业课程,如编译原理、数据库原理、操作系统、系统分析与设计等课程提供必要的知识和技能准备。本人认为数据结构学习中的难点包括递归程序的阅读、非线性结构中图和树的相关算法,尤其是图的最短路径、拓扑排序、关键路径的基本应用,学习难点在于:图的存储结构、图中顶点的定位、图中各个顶点的访问方法等。本文试图就图的最短路径算法的学习过程进行探讨。在学习中,我们发现:在图形结构中,节点之间的关系可以是任意的,图中任意两个元素之间都有可能相邻,如果对图进行操作或者遍历的话,必须先确定图中第一个访问的顶点,才能对其他顶点进行访问(操作),因此,图是一种比线性表和树更为复杂的非线性数据结构。图之所以仍然作为《数据结构》课程的重要内容出现,是因为图的存储结构容易定义和掌握,但是需要通过图的形式化定义及其相关操作来实现具体问题的求解,这就是我们所说的在《数据结构》的图中需要掌握的重要知识点。图的运算已经成为人们解决实际问题的重要工具,比如通过Prim算法或Kruskal算法求最小生成树以构造最低价的通信网;通过关键路径求解确定一个工程中的“关键工程”;通过Dijkstra算法求某个源点到其余各个顶点的最短路径,解决物流配送的最短路径选择;通过Floyd算法计算每一对顶点之间的最短路径,用于确定设施的选址。本文重点讨论Floyd算法在医院选址问题中的应用。

医院是社会的重要基础设施,医院建设的选址必须本着以人为本、服务社会、经济效益的原则,如何使群众就医路径较短,是医院选址需要充分考虑的问题,本文以患者就医路径最短为切入点,选址问题转化为数据结构图论中的求解最短路径的问题,并采用Floyd算法对最短路径问题进行求解,为医院的选址问题提供定量分析。

二、Floyd算法基础概念

1.图:顶点和连线的集合,G=(V,VR),其中V是图中顶点的有穷非空集合,VR是两个顶点的关系的集合,即图中连线的集合。若VR中顶点对是有序的,则为有向图,否则为无向图。

2.连通图:在无向图或者有向图G=(V,VR)中,若任意两个顶点v,w都能找到一条路径连接v和w,G即为连通图。

3.网:带权值的图称为网。

4.邻接矩阵:表示顶点之间连接关系的矩阵。网的邻接矩阵定义如下:

A[i,j]=w■,(v■,v■)或∈VR∞,其他

三、Floyd算法基本思想

最短路径问题是数据结构图论中的一个典型问题,这里的最短路径,不仅仅指的是距离的长短,还可以引申为经济费用、时间等广义上的最短。在数据结构中求解网络中任意两个顶点之间的最短路径的典型算法是Floyd算法。

Floyd算法的基本思想是:从带权邻接矩阵出发,若(vi,vj)存在,则存在路径长度D[i][j],但该路径不一定是最短路径,需要进行n次试探。如果存在一个k,且D[i][k]+D[k][j]

四、实例应用

(一)医院选址问题建模

现假设给定n个村庄之间的交通图,现在要从这n个村庄中选择一个村庄建一所医院,要求离医院最远的村庄到医院的路程最短。

上述问题中,可将地理信息中的交通网络抽象为数学模型,以顶点表示村庄,以连线表示村庄之间的道路,因此交通图转化为由有限顶点和有限条边组成的无向图,图中顶点之间的关系由权值表示,定义权矩阵为前述网的带权邻接矩阵,wij的值为村庄之间的道路距离。这样医院选址问题就转化为在全部顶点之间最短距离的最大值中寻找最小值的问题,按照Floyd算法进行运算。

(二)医院选址算法示例

1.假设有6个村庄,村庄v0、v1之间道路距离为12,v0、v2为3,v0、v4为9,v0、v5为10,v1、v3为2,v1、v4为6,v2、v3为2,v2、v5为6,v3、v4为4,v3、v5为7,v4、v5为4。将6个村庄作为顶点,有直接道路的村庄之间连线,顶点之间的边所对应的权值为村庄之间的道路距离。

2.按照上文的算法,建立带权邻接矩阵D0。

3.第一次迭代,插入v0后计算最短路径,即两点之间可以有一个中间点的最短路径,D1[i][j]=min{D0[i][j],D0[i]+D0[j]}。

4.第二次迭代,插入v1,D2[i][j]=min{D1[i][j],D1[i]+D1[j]},在D1的基础上构建D2。

5.第三次迭代,插入v2,D3[i][j]=min{D2[i][j],D2[i]+D2[j]},在D2的基础上构建D3。

6.第四次迭代,插入v3,D4[i][j]=min{D3[i][j],D3[i]+D3[j]},在D3的基础上构建D4。

7.第五次迭代,插入v4,D5[i][j]=min{D4[i][j],D4[i]+D4[j]},在D4的基础上构建D5。

8.第六次迭代,插入v5,D6[i][j]=min{D5[i][j],D5[i]+D5[j]},在D5的基础上构建D6,D6就是最后求得的最短距离矩阵。

9.以各个顶点为源点的最短距离的最大值maxdis={9,9,6,7,9,9},min{maxdis[i]}=6,对应顶点为v2,因此本例的最终医院选址为v2村庄。

(三)选址算法的C语言实现

1.图的邻接矩阵存储结构表示。

#define MAX_VERTEX_NUM 20 //最大顶点个数

#define INF 100000 //代替∞

vexs; //顶点向量,用于存储顶点名称

arcs; //邻接矩阵

typedef int VRType;

typedef int VertexType;

//图的邻接矩阵存储表示

typedef struct

{

VRType adj;

}AdjMatrix;

typedef struct

{

VertexType vexs; //顶点向量,用于存储顶点的信息(名称)

AdjMatrix arcs;

int vexnum,arcnum; //顶点数和弧数

}MGraph;

typedef int DistancMatrix; //距离矩阵

2.主要算法。

void shortesPath_Floyd(MGraph G, DistancMatrix * D)

{

?摇for(v=0;v

for(w=0;w

(*D)[v][w]=G.arcs[v][w].adj;

for(u=0;u

for(v=0;v

for(w=0;w

if((*D)[v][u]+(*D)[u][w]

?摇 ?摇?摇(*D)[v][w]=(*D)[v][u]+(*D)[u][w];//更新最短距离

}

void compare(MGraphG,DistancMatrixD)

{

?摇 for(i=0;i

?摇{

maxdis[i]=0;

for(j=0;j

if(maxdis[i]!=INF&&maxdis[i]

{

maxdis[i]=D[i][j];

maxi[i]=G.vexs[i];

}

}

for(i=0;i

if(maxdis[i]>maxdis[i+1]) //比较maxdis中的最小值,mini为医院选址

{

min=maxdis[i+1];

mini=maxi[i+1];

}

}

五、结论

实际应用中,医院选址问题需要考虑众多因素,可以设置权值为各项耗费总值。本文运用Floyd算法将医院选址问题进行了量化,并采用C语言实现,在实际的设施合理选择中,具有一定的理论意义和实用价值。除了选址问题,物流配送的路线选择、旅游中最短路线的设计等问题都可以通过建立数学模型进行算法设计。在数据结构的学习过程中,我们更需要学会的是如何将实际问题抽象为合理的数学模型,然后设计一个解决该模型的算法,最后进行编程、测试得到最终解答。

参考文献:

[1]陈燕,曹妍,贾红雨.数据结构(C语言版)[M].北京:科学出版社,2014.

[2]王军,王伟,公长春.基于多因素评价法下的社区医院投资研究[J].中国全科医学,2010,13(10A):3143-3144.

[3]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2009.

[4]王晓东.算法设计与分析[M].北京:清华大学出版社,2011.

[5]赵丽娜,李慧.基于Floyd最短路径算法的教材中心选址问题[J].中国教育技术装备,2014,(4):40-42.

篇6

关键词逻辑结构存储结构操作运算横向联系纵向联系

1引言

数据结构作为计算机核心学科,其主要研究内容:逻辑结构,物理存储结构,操作(或算法)[1]。通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。

根据数据元素之间不同特性,把数据结构划分四种基本结构:(1)集合,(2)线型结构,(3)树型结构,(4)图状结构或网状结构。针对每种数据结构均从逻辑结构、存储结构和操作运算等方面进行研究,是贯穿数据结构研究始终的“红线”,也是数据结构研究的共同切入点,称之为数据结构的“横向联系”。从集合、线型结构等基本数据结构入手,以实现树形结构、图或网状结构等较复杂结构研究,实现数据元素间的关系从简单到复杂探讨,称之为“纵向联系”。

2逻辑结构、存储结构、操作运算的思想模式——数据结构间的横向联系

逻辑结构的定义、存储结构的实现、操作运算的实现是对数据结构研究的基本思想,一种数据结构的研究首先对这三方面内容有一个清晰的探讨。

集合数据结构与数学中集合概念是一致的,其逻辑结构元素间只是同属关系。存储结构实现只是在计算机内存储,它的操作就是一些交、差、并、补等。

线型结构是N个数据元素的有限序列,至于每一个数据元素的具体的含义在不同的情况下各不相同,其长度可根据需要增长或缩短,其逻辑结构就是它的数据元素间的线形关系,即一个对一个,一个元素最多有一个前驱,最多有一个后继。它的存储结构的实现一般有顺序存储和链式存储两种方法。顺序表是指用一组地址连续的存储单元依次存储线性结构中的数据元素,这是一种随机存取的存储结构;链式存储是数据元素之间的逻辑关系由结点中的指针来表示并且每一个结点有且只有一个指针域。线性结构的操作中,最基本的操作是在线性结构中插入、删除数据元素。存储结构为顺序存储有线性顺序表、数组、串等。存储结构为链式存储结构时有链表等。根据线性表的操作的不同便产生了两种重要的数据结构即栈和队列,这两种数据结构是线性结构的典型例子[2]。

树型结构是一种重要的非线性结构,其中的树和二叉树最为常用。直观看来,树是以分支关系定义的层次结构,其逻辑结构是一对多的关系,而在二叉树中是一个根结点对应左右两个孩子的层次关系。存储结构的实现当采取顺序存储时用一组地址连续的存储单元依上而下、自左向右存储树中的结点元素。在链式存储结构中可采用二叉链表表示法即链表中结点的两个链域分别指向该结点的第一个孩子和下一个兄弟结点,树形结构的最基本的操作是遍历,其它复杂的操作大部分就是遍历操作的衍生与扩展。在树型结构中最有特色的一种数据结构就是二叉树,其独特的逻辑结构是每个结点至多有二棵子树并且还有左右之分,这就决定着它独特的链式存储结构,每个数据元素有且只有两个指针分别指向该结点的左右孩子。二叉树的最基本的操作是遍历二叉树,对每个结点的访问是对其它复杂操作的基础,例如统计结点个数、统计叶子结点数、交换二叉树的左右孩子等一些复杂的操作运算均是遍历二叉树操作的扩展和衍生。基于二叉树的递归定义可得到遍历二叉树递归算法,前序遍历、中序遍历、后序遍历二叉树。

图状结构是一种较线型结构和树更复杂的数据结构,图的逻辑结构是多对多的关系即在图形结构中结点之间的关系是任意的。因此在存储结构中无法以数据元素在存储区中的物理位置来表示数据元素间的关系。即图没有顺序映象但可以借助数组的数据类型表示元素之间的关系,用两个数组分别存储数据元素(顶点)的信息和数据元素之间的关系信息[3]。另一方面图的存储结构也可由多重链表实现,即一个由一个数据域和多个指针域组成的结点来表示图中的一个顶点,其中数据域存储该顶点的信息,指针域存储指向邻接点的指针,但由于图中各个结点的度各不相同,结点的指针域设定不易确定,则图的链式存储结构可用邻接多重表表示法,对图中每个顶点建立一个单链表,第一个单链表的结点表示依附于顶点V的边,每个结点由三个域组成其中邻接点域指示顶点V的邻接点在图中的位置,链域指示下一条边或弧的结点,数据域存储和边或弧相关的信息,如权值等。每个链表附有一个表头结点。在表头结点中除了设有链域指向链表中第一个结点外还设有存储顶点的名或其它有关信息的数据域,这样实现了图的链式存储。遍历是最基本的操作也是最重要的操作运算,它是求解图的连通性、拓扑排序和求关键路径的基础,然而图的遍历比树的遍历复杂的多,因为图的任一顶点都有可能和其余的顶点相邻接。所以在访问某个顶点之后可能沿着某条路径搜索之后又回到该顶点上。因此要设有一个辅助数组V[0..n-1],它的初始值置为假,一旦访问顶点Vi,便置V[i]为真,这样避免了同一个顶点被访问多次,对图的遍历有深度优先搜索和广度优先搜索。图的深度优先搜索遍历类似树的先根遍历,是树的先根遍历的推广。广度优先搜索类似树的按层次遍历的过程。图状结构中复杂的操作大部分都是以图的遍历为基础。

因此无论对于线型结构、树性结构、网状或图,它们都遵循着逻辑结构的定义、存储结构的实现、操作运算方法的实现模式来实现每种数据结构的类型。在数据结构研究中对每种数据结构的研究只有对它的这三个方面内容的研究,才能对它进行探索、掌握、改进。这是数据结构研究中的基本思想。在数据结构研究中当前面向各专门领域特殊问题的多维数据结构和从抽象数据类型的观点来讨论数据结构,都不能背离这个思想。

3由栈和队列实现树、图的遍历——纵向联系

遍历操作对树、图结构是很基础、很重要的运算,它是实现一个数据结构的核心部分,虽然根据树、图的递归定义能设计出树、图的遍历的递归算法,但从线型结构到树、图的发展也是数据结构从简单到复杂的逐步发展过程。线型结构中栈和队列是两个非常重要的数据结构,对于树、图的遍历可用栈和队列来实现。对树、图复杂的数据结构,可通过栈和队列的操作来实现复杂数据结构的操作,体现了数据结构间的“纵向联系”。

用栈实现二叉树的前序遍历算法:

Statuspreorder(bitreet)

{P=t;

Initstack(s);

Push(s,p);

While(!stackempty(s)){

pop(s,p)

while(p){

visit(p);

push(s,prchild);

p=p-lchild;}

}}

用栈实现二叉树的中序遍历算法:

Statusinorder(bitreet)

{p=t;

Initstack(s);

Push(s,p);

P=Plchild;

while(!stackempty){

while(p){

push(s,p);

p=p-lchild;}

pop(s,p);

visist(p);

p=prchild;}}

用栈来实现二叉树的后序遍历算法:

Statuspostorder(bitreet){

P=t;

inistack(s);

While(p||!stackempty(s)){

If(p){

push(s,p);

P=plchild;}

ElseIf(!stackempty(s)){

pre=null;

Gettop(s,p);

While(prchild==pre){pop(s,p);

Visit(p);

Pre=p;

Gettop(s,p);}

P=prchild;}

}}}

用队列实现二叉树层次遍历算法:

VoidLayers(bitreet){

if(t){

p=t;

Initqueue(q);

Enqueue(q,t);

while(!empty(q)){

p=Dlqueue(q);

visit(p);

if(Plchild)Enqueue(q,plchild);

if(prchild)Enqueue(q,prchild);}

}

用队列实现图的广度优先搜索算法:

VoidBfs(Graphg,intv){

Visit(v);

Visited[v]=true;

Enqueue(q,v);

While(!emptyqueue(q)){

Dlqueue(g,vex);

For(w=firstadjvex(g,vex),w,w=nextadjvex(g,vex,w)){

If(!visited[w]){visit(w);

Visited[w]=true;

Enqueue(q,w);}}

}}

VoidDfs(Graphg,intv){

Visit(v);

Visited[v]=true;

Push(s,v);

While(!emptystack(s)){V=gettop(s);

For(w=fistadjvex(g,v);w&&!visited[w];w=nextadjvex(g,v,w))

If(!w)pop(s)

Else{visit(w);

Visited[w]=true;

Push(s,w);}}

因为二叉树、图的其它的操作大部分是对遍历基本操作的拓展或综合应用,灵活运用栈和队列可实现,并且算法描述比较直观。线性结构是数据结构学科的基础,树、图的发展在线性结构的基础上而发展,因树、图发展促进着线性结构中和一些算法的完善和改进,线型结构、树型结构、图状结构是紧密相联的。

4抽象数据类型的研究

数据结构间纵横联系明显且紧密。运用与把握这种“纵横联系”,对从抽象数据类型的角度来进行数据结构的学习与研究有着重要的借鉴意义。

抽象数据类型(ADT)的研究越来越被人所重视[4-8],它可理解为数据类型的进一步抽象。即把数据类型和数据类型上的运算捆在一起,进行封装。引入抽象数据类型的目的是把数据类型的表示和数据类型上运算的实现与这些数据类型和运算在程序中的引用隔开,使它们相互独立。对于抽象数据类型的描述,除了必须描述它的数据结构外,还必须描述定义在它上面的运算(过程或函数)。抽象数据类型上定义的过程和函数以该抽象数据类型的数据所应具有的数据结构为基础。它仍遵循逻辑结构、存储结构、操作运算的数据结构基本思想,所有的抽象数据类型都可有简单的分类策略获得,这个策略就是抽象数据类型对象像什么和对它们做些什么。逻辑结构定义、存储结构表示、操作的实现在抽象类型中它们被称为数据类型说明、抽象数据类型的表示和抽象数据类型的实现[3]。抽象数据类型具体的表示和实现依赖所采用的语言,用户可以用某高级语言的固有数据类型和自定义类型并借助于过程和函数来表示和实现抽象数据类型。

5结论

逻辑结构、存储结构、操作运算等核心方面是贯穿数据结构研究与发展的一条基本线,也是数据结构研究中所看到数据结构间的“横向联系”。应用基本数据结来实现复杂数据结构的方法与途径,这是对数据元素之间关系从简单到复杂的探讨,即为“纵向联系”。数据结构联系是对数据结构的整体把握,体现在这种“横向联系”和“纵向联系”之中。灵活运用与把握这种数据结构间的关系,对抽象数据结构类型的研究有重要的借鉴意义,同时对数据结构的实际教学过程有着一定的指导意义。

参考文献

[1]陆松年.数据结构教程[M].北京:科学出版社.2002年

[2]严蔚敏.数据结构(C语言版)[M].北京:清华大学出版社.1997年

[3]帅训波.数据结构间普遍整体联系[D].曲阜:曲阜师范大学计算机科学学院.2003年

[4]蓝雯飞.数据结构的面向对象描述方法研究[J].计算机工程与应用,2006;42(26):79-80

[5]刘毅.关于Treap数据结构问题的研究[J].计算机应用与软件,2005;22(8):36-38

[6]胡泽明,岳瑞生,王志刚.嵌入式GIS线要素无缝拼接的数据结及实现算法[J].测绘科学,2006;31(5):102-103

篇7

【关键词】数据结构;算法;软件设计

1.经典算法的选择

选择经典算法的重要性,PASCAL语言的创始人、著名的计算机科学家N.沃思说得好“程序=数据结构+算法”,足以见得算法在程序设计中的重要地位。在合理的数据结构基础上,算法是对数据结构的操作(运算),是数据处理的核心。在《数据结构》中介绍的基本数据结构有线性表、堆栈、队列、数组、树、二叉树、图以及相应的算法。一个算法是建立在某种数据结构的基础上,一个算法不可能脱离数据结构而孤立存在。只有通过学习算法,才能真正掌握某种数据结构。可以说学习《数据结构》的过程基本上是学习各种算法的过程。在众多的算法中有简单的、有复杂的、有容易的、有难度大的,在有限的学时情况下,不可能也没有必要逐一讲解每一个算法。大多数的算法,要靠学生自己理解消化。在这种情况下,如何选择少量的经典算法进行分析讲解,显得尤其重要。一个经典算法往往能起到以一当十、以点带面的关键作用。通过经典算法的分析,一方面让学生加深对数据结构基本理论的理解另一方面让学生学习程序设计方法。

选择好经典算法后下一步就是要对其展开综合分析,下面以具体的算法为例进行讨论。

2.利用经典算法说明基本原理

2.1 经典算法应能体现某个数据结构的基本特征

我们知道线性表顺序存储时其优点是能够对每个数据元素随机访问,存储密度高,其缺点是插入、删除操作时需要移动大量的数据元素,操作效率低。“向有序(由小到大或由大到小)的线性表(顺序存储)插入一个新的数据元素”,这一经典算法集中反映了线性表顺序存储的这些特点。

分析:将一个值为X的数据元素插入到有序(由小到大或由大到小)的线性表(顺序存储)中,可以分两步进行,首先查找到值为X的数据元素在线性表中应有的位置,采用从头到尾循环比较的方法确定其位置I,然后,将第I个以后的全部数据元素向后移动一个存储单元,最后将值为X的数据元素存放到第I个位置上,线性表元素个数增1。

【算法1】

PROCEDURE INSERT(V,m,n,X)

//将值为X的数据元素插入到V数组中,(线性表顺序存贮在V中)m为最多元素个数,n为当前实际元素个数

IF (m=n) THEN{“OVERFLOW”; RETURN}

FOR I=1 TO n DO

IF (X〈V(I))THEN BREAK

FOR J=n TO I BY -1 DO V(J+1)=V(J)

V(I)=X

n=n+1

RETURN

分析:【算法1】的优点是简单,便于理解,缺点是:

①循环体内有提前退出语句,不利于结构化程序设计;

②确定新数据元素位置和移动数据元素分两步进行,有重复操作,可以改进之,将两步合并一步完成,即将循环比较与移动数据元素同时进行。从线性表的尾部开始向前循环比较,比新数据元素大者后移,直到小于等于时停止。

【算法2】

PROCEDURE INSERT(V,m,n,X)

IF(m=n)THEN{“OVERFLOW”;RETURN}

I=n

WHILE (I〉=1)AND (V(I)〉X)DO {V(I+1)=V(I);I=I-1}

V(I+1)=X

n=n+1

RETURN

分析:注意【算法2】中循环条件,当循环结束后I=0或V(I)〈=X,新数据元素的位置为I+1,【算法1】的时间复杂度为0(2n),而【算法2】的时间复杂度为0(n),效率提高一倍。循环结构是结构化程序设计中最基本最核心的部分,归纳循环条件是关键。【算法2】能进一步推广。

2.2 利用经典算法学习算法设计

经典算法能给学习者以启示、示范作用。

分析:可以将【算法2】用于对线性表(顺序存储)排序算法中。在直接插入排序算法中,其算法思想是从第2个数据元素开始直到第n个数据元素,逐一插入到已有序的子线性表中。

【算法3】

PROCEDURE SORT(V,n)

FOR I=2 TO n DO

{ Y=V(I)

J=I-1

WHILE (J〉=1) AND (V(J)〉Y) DO {V(J+1)=V(J);J=J-1}

V(J+1)=Y }

RETURN

分析:【算示3】其结构分为双重循环,外循环完成逐一取数据元素,即取第I个数据元素,内循环完成将第I个数据元素插入到前I-1个已有序的子线性表中。内循环完成的功能可以独立成为一个子函数(子过程),可以借用【算法2】。这正是结构化程序设计思想的体现,即主程序完成任务的划分,说明“做什么”,子函数(子过程)完成任务的具体实现,说明“如何做”。结构化程序设计方法采取“分解”的手段来控制系统的复杂性,将大系统划分为若干个相对独立的、功能单一的子模块。一方面子函数(子过程)可以实现软件的重用性,在不同的程序段有相同的处理过程时调用子函数(子过程),减少软件开发的工作量;另一方面子函数(子过程)对具体的实现技术细节进行隐藏,便于开发人员集中精力把握软件开发的核心和主要问题,降低了软件开发难度,从而保证软件质量。在利用【算法2】时要稍加修改,见【算法4】。

【算法4】

PROCEDURE INSERT(V,I,X)

//将值为X的数据元素插入到已有序的前I-1个数据元素中

J=I-1

Y=X

WHILE (J〉=1) AND (V(J)〉X) DO {V(J+1)=V(J);J=J-1}

V(J+1)=Y

RETURN

相应的主程序也要作修改,见【算法5】

【算法5】

PROCEDURE SORT(V,n)

FOR I=2 TO n DO

INSERT(V,I,V(I))

RETURN

3.结束语

在众多的算法中选择好少量的经典算法对于教好、学好《数据结构》至关重要;经典算法要有助于学生理解对应的数据结构,经典算法的分析要侧重于程序设计能力的提高。

参考文献

[1]欧建圣.数据结构教学研究――经典算法的综合分析[J].武汉工程职业技术学院学报,2004,16(1):58-60.

篇8

关键词:数据结构;教学效果;存在问题;改革总结

一、课程的重要性

《数据结构》课程是计算机专业中一门重要的专业基础必修课,它为操作系统、数据库原理、编译原理、单片机原理等后续专业课程的学习奠定了基础。其次,数据结构课程是计算机相关专业的考研专业课之一。该课程的重要性显而易见。

二、教学中存在的问题

《数据结构》课程的教学目标是全面系统地介绍数据的逻辑结构、存储结构和算法实现,并介绍常用的非数值计算方法,如数据插入、删除、排序、查找检索等,使学生掌握各种数据结构的特点和算法思想,并能结合具体应用,运用各种数据结构和算法解决实际问题。但大部分高校《数据结构》课程的教学效果都不尽如人意,影响课程学致有如下原因:

1.程序设计课程掌握较差,基础薄弱。

2.实践机会少,动手能力差。

3.缺乏课外辅导,学生自学时障碍重重。

三、解决方法

鉴于以上几点,可以从这几方面进行教学改革:

1.加大对先行课程的重视程度。首先加大C程序设计课程的课时。C程序设计课程是数据结构课程的直接先行课,因此,学好C语言,为后续若干课程的学习打好坚实的基础。另外,增加数学及线性代数课程的课时。学习算法离不开数学的思想,学习数组的存储结构也离不开线性代数的应用。最后,增加了32课时的C程序设计课程设计。

2.实际操作方面,计算机专业要求有很高的实际操作技能,而我们的学生在长期被动的学习过程中却养成了勤于动脑,懒于动手的学习特点,这样教出的学生却是不能满足实际工作要求的。因此,数据结构的实验教学要紧密配合理论教学,通过相关实验与课程设计,帮助和加深对数据结构的整体理解,所以在本课程结束前安排两周实践进行课程设计,不要求实现过多的项目,但每个学生都要动手去做,亲身经历从需求分析到算法分析,最后的代码编写与调试这样的过程,从而更深刻的理解数据结构的逻辑结构、存储结构以及在某种具体的存储结构下的运算及其实现方法。

3.构建《数据结构》网络视频课程,加强师生互动环节。为了弥补课外辅导的缺陷,制作与《数据结构》课程内容相适应的视频,尤其是该课程中典型的算法及其实现过程,学生在课外学习时遇到问题可随时登录校园网观看视频,进行查漏补缺,达到巩固知识的效果。另外,在网站上可以设置在线答疑或留言功能,从而实现师生互动。

四、改革成果

根据以上改革方法,经过实施,数据结构课程教学效果颇见成效,简单做以总结:

1.加大C语言程序设计课程的课时,教师能够在足够的课堂时间将课程内容系统化的进行讲解,尤其是数组、指针、结构体等重要知识。从而给数据结构课程的学习打下了夯实的基础。

2.网络视频的构建,给学生提供了更为丰富的学习参考资料。学生在课外复习时遇到不理解的算法,随时登录校园网观看视频,好像再一次回到了课堂,从而解决了疑难问题。另外,校园网上开通了该课程的在线答疑功能,学生可以通过在线答疑功能随时和任课教师进行沟通。

3.加强数据结构课内实践与课程设计的实施,学生可以将课堂上的理论知识应用于实践中。尤其是课程设计的开设,如:简单文本编辑器的设计与实现、科学计算器的设计与实现等,通过案例让学生真正体会到数据结构课程的实用性,并从本质上理解该课程的内容。

五、结束语

《数据结构》不仅是计算机科学与技术专业的专业基础课,也是大多数院校研究生入学考试的专业必考课,因此,《数据结构》课程教学的讨论将会持续下去,最终能找到一条行之有效的教学方法。以上是作者结合自己多年教学经验和体会,提出的若干改革方法,不足之处会继续探讨研究。

参考文献:

[1]李春葆.数据结构(C语言)[M].北京:清华大学出版社,2013

[2]严蔚敏.数据结构(C语言)[M].北京:清华大学出版社,2011

篇9

关键词 数据结构课程;MOOC教学模式;教学设计

中图分类号:G642.3 文献标识码:B

文章编号:1671-489X(2017)01-0037-03

1 引言

随着互联网时代的到来,涌现出来一种大规模开放在线课程(MOOC)教育模式。那么什么是MOOC呢?MOOC一词是由加拿大学者Dave Cormier和Bryan Alexander提出的[1]。MOOC(Massive Open Online Course)是指大规模的免费网络开放课程。参与MOOC学习的人数规模庞大,全球各地的参与者都可以免费注册使用MOOC,参与信息提供、评价过程[2]。MOOC的核心是教学设计的改变以及参与者的互动性。

2012年,MOOC在美取得空前成功,Coursera、edX、

Udacity三大课程提供商的兴起,给更多学生提供了系统学习的可能[3]。国内的知名大学如北京大学、清华大学、浙江大学等纷纷MOOC课程。MOOC的到来为高等教育带来新的机遇,可以促进优质教育资源共享和教育公平[4]。

高等教育的传统教学方式作为主流的教学模式[5-8]不会被替代,但MOOC将导致现有教学体系的全面革新,几千年来低效率的课堂教学将在今后若干年内有根本性的改变[9]。

在MOOC框架下如何利用一些新技术和新手段提高课程的教学质量?数据结构课程是计算机相关专业的核心专业课程,是一门实用性很强又抽象程度比较高的课程,课程内容抽象、复杂,涉及很多概念和算法技术,学习起来较困难。长期以来,传统的数据结构课程通过以教师为主体、学生被动学习的模式开展教学,使得学生的学习困难增加,学习兴趣得不到激发,教学效果并不理想。本文通过探讨数据结构课程的MOOC教学模式,希望通过MOOC提供给学生一种与传统课堂教学和网络公开课不同的学习渠道,激发学生的学习兴趣,引导学生探索知识,更好地掌握数据结构这门课程。

2 传统数据结构课程教学存在的问题

通过长期的数据结构一线岗位的实践摸索和对学生学习情况的调查分析,总结数据结构课程教学过程中主要存在的几点问题。

学生学习难度大,学习兴趣低 数据结构课程主要是培养学生分析解决问题能力,但由于该课程抽象程度高,对学生的抽象思维和逻辑思维能力要求较高,学生学习起来难度较大。如果教学过程中运用生动形象的教学方法,让学生自发参与学习,不仅教师能够取得较好的教学效果,提高教学质量,学生也不再是为了考试而死记硬背知识点,而是能真正把所学的知识点与实际应用相结合

传统教学模式不能满足教学需求 一直以来,数据结构课程的传统教学模式都是把教师作为主体,用讲授式的教学方法把相关知识点大量传输给学生。然而数据结构课程涉及繁多的概念和算法,传统的教学模式显然已不能满足这门逻辑思维能力要求很高的课程,否则教学目的、教学效果都会和预期相差甚大。另外,传统的教学方式主要是运用黑板和PPT,但PPT很多时候只是代替黑板和粉笔,演示数据结构的算法得到改进,直观性更强,而学生对数据之间的繁杂关系还是很难想象。并且信息量更大后,难以一直吸引学生的注意力,互动及延续性不能得到很好的改进,教学效果也受到很大影响。

3 数据结构课程MOOC教学模式设计

数据结构课程MOOC制作流程 在进行MOOC课程规划设计时,要充分了解MOOC教学模式的特点,以期能够有针对性地对课题进行规划。数据结构课程的MOOC制作流程如图1所示。

MOOC课程制作要想做得引人入胜,容易学习消化,需要专业技术团队的配合,经过专业技术团队的录制和后期制作,内容质量和视觉风格都会得到很好的提升,使得课程脱颖而出,取得理想的传播影响力。

数据结构课程的MOOC教学内容必须合理碎片化 传统教学是教师把学生召集到指定教室一起学习,这种强有力的组织性形成外在驱动力。在这个驱动力下,学生虽然学习动力低,也会从枯燥的教学内容和呆板的教学方式中学到部分知识点。另外,传统教学的教学对象是年龄相仿、教育基础相仿的学生,教师的教学内容容易组织准备。然而,MOOC的学习对象有不同学习目的,来自不同的地方,有着不同的年龄,教育基础也不相同,因此,MOOC教学模式与传统教学模式相比,挑战性更大。开展MOOC教学模式要想增加吸引力,教师要在自己的课程内容设计上下功夫,增强吸引力,推动学生向前走。

在数据结构传统50分钟课堂上,一般教师会讲授至少30分钟抽象复杂的知识点。各种心理学研究显示,人类的注意力最有效的集中时间段是6~10分钟,超过这段时间就会下降,接受信息的能力也会随之降低,因此,信息获取的趋势必须是碎片化,如此才能被人类更好地接收。MOOC课程教学设计的一个重要内容就是把系统化的知识转化为碎片化的信息。在数据结构的MOOC教学设计中要把传统课堂50分钟教学内容,切分为多个10分钟的小视频,把整个课程精确地切分转化成多个独立的小视频讲授。这样不同学习目标的学生可以选择需要的小视频学习,每个学生还可以根据自己的业余时间随时随地学习,在注意力最集中的时间里学到相关知识点。

碎片的内容要紧扣主题,切割碎片时,内容不可以太长。比如堆排序,如果切割成一个视频,必然要至少20分钟,就要把内容进一步碎化,但又要使切割后的内容各成一主题。因此,如何使得内容切割的碎片更合理,使得逻辑组织更清晰,需要在PPT制作部分就考虑这个问题。

数据结构课程MOOC教学小视频制作要有吸引力和实效 视线引导是吸引学生注意力的一种方式。在传统课堂上,学生的视线跟随教师多样的肢体语言和教鞭等教学工具的指引发生变化,视线也会跟着讲台上教师位置的移动发生变化,增强了对学生的吸引力,让学生的思路跟随教师的节奏。在MOOC小视频制作中,可以通过讲授者的动作、动画播放、PPT放映中文字或者图片的层次进入以及视频编辑软件提供的高亮、笔画等功能达到同样的效果。至于讲授者和课件是穿插出现的,出现的比例、频率到底应该多少为宜,并没有具体的标准,关键是保持屏幕上要尽量变化,并且变而不乱、引人入胜。像静止的画面,或者充满文字的画面,在视频中不能持续较长时间。

思路引导较视线引导更为重要。课件设计风格应该是简单的,对所有课件中动画的设计,原则上是对思考过程的展示,所有无助于此的元素都不必出现。例如:在展示一个复杂算法的伪代码时,并不是一次性将全部伪代码放映出来,再逐行讲解其功能――这是计算机执行的过程,并不是人类思考的过程;应从整体思路入手,先根据算法流程展示出代码框架,再逐步演示框架内各个模块的细化过程,必要时辅以实例的动画演示。

数据结构课程MOOC教学模式的互动性 传统课堂上教师习惯于通过提问、设问的方式进行互动,在MOOC教学过程中可以通过在视频炔迦胩嵛省⒃谑悠导湎恫迦氩庋榈姆绞浇行师生互动,有助于增强教学效果。

在MOOC视频内插入提问,等同于传统课堂上教师提出一个简单问题,用来吸引学生的注意力,避免学生的思维懈怠。在传统课堂上,教师提出问题后,懈怠的学生可能不会思考,只是等其他学生的回答。但在MOOC教学过程中,看视频的所有学生必须对插入的问题做出思考及回答,才能继续观看视频。

在MOOC视频之间插入测验,是在一个小视频播放结束后,插入前一段小视频的相关测验,学生给出回答结果,MOOC系统会自动判题,立即给出测验结果。这样学生尽快发现问题,掌握自己对知识点的理解程度,对于不明白的还可以再次观看前一段视频。然而传统课堂测验会对教学进度造成影响,而且教师课后批改测验的工作量会增加,学生存在的问题也不能及时反馈。因此,在师生互动方面,MOOC比传统课堂的互动效果要更好。

MOOC的互动性优点,除了师生互动,还有生生互动。学生提交的作业是需要交流和分享的,并且还有学生的互评,这是MOOC的一个创新。通过互相之间的分享、观摩,可以提高学生的学习积极性,端正学习态度,这是传统的教学互动层次做不到的。

4 总结

数据结构课程重在培养学生的实践能力,在教学过程中希望通过教学手段如互动式学习等方式来激发学生的学习动力。在设计和实施数据结构课程MOOC教学时,重点要考虑如何组织教学内容,使得碎片化后的内容组织更合理,以满足不同对象的学习需求,以及如何制作更有吸引力的视频、动画或数字特效等,能突出算法的设计、清晰问题的求解思路以及不同方法之间的特点。

参考文献

[1]王文礼.MOOC的发展及其对高等教育的影响[J].江苏高教,2013(2):53-57.

[2]杨丹.MOOC(慕课)初探[J].教育教学论坛,2014(12):

105-106.

[3]张铭,奚春燕,彭远红.微课:唱响中国MOOC的前奏[J].计算机教育,2013(20):11-13.

[4]苏小红,赵玲玲,张彦航,等.MOOC浪潮下,我们该做些什么[J].计算机教育,2015(7):64-68.

[5]邢立峰,邢立群,张晓燕.翻转课堂模式在计算机基础课程中的应用研究[J].计算机光盘软件与应用,2014(24):

231-232.

[6]刘华敏.“翻转课堂”教学模式的探讨:以《数据结构》课程教学为例[J].广东技术师范学院学报,2016(5):70-72.

[7]张小刚.CDIO理念下的“数据结构”课程实践教学改进探索[J].赤峰学院学报:自然科学版,2016(10)20-21.

篇10

【中图分类号】G642 【文献标识码】A 【文章编号】2095-3089(2014)04-0147-01

1.引言

随着计算机处理数据量的剧增,数据之间的关系也越来越复杂。“数据结构”的前期基础课程有高等数学、离散数学和C语言程序设计等课程;同时又是专业课程操作系统、数据库原理、图像处理等课程的基础,具有承上启下的作用。由于该门课程实验性很强,内容抽象不易理解,所以近年来围绕如何上好该门课程,学校实施了一系列的课程改革,培养学生运用各种算法编写程序的能力,并初步取得了不错的效果。

实验课程是理论课程的检验者和发挥者,通过实验,学生不仅可以验证一些理论知识的正确性,同时还可以通过灵活多样性的实验题目提高上机编程能力,进一步提高软件设计能力、提高学习的积极性和能动性,并逐渐形成科学的思维方法和严谨的科学态度。

2.“数据结构”实验教学的措施

数据结构实验课程的改革是以课堂教学为基础,以实验课为中心,以学生为主体的模式,重在培养学生独立自主、创新动手能力,因此实验课之前的准备工作很重要。实验课程改革实施过程主要有以下几个方面构成:

2.1 修订实验大纲和实验指导书

进行实验教学改革,首先对原来的实验大纲和实验指导书进行重新修订,应该遵循培养学生实际动手能力的的特点,体现以理论为基础,以实验为检验手段的学科特色。通过实验课程的教学,让学生明白理论课程中的哪些内容是基础点,哪些内容是难点和重点,并让学生有针对性的进行实验锻炼。在2011年的数据结构理论和实验教学中,课题组成员老师按照理论教学大纲,几次讨论研究,从而形成了新的实验大纲和实验指导书。2011年新的实验大纲和实验指导书开始实施,效果比较良好。

2.2 合理设计实验题目

对于实验题目,按照内容和难易程度共分为三个层次,即验证型、综合型和设计型题目。按照循序渐进的顺序进行,最开始的几个题目由于理论知识讲授较少,让学生做的是验证型的题目;随着所学知识的增加,开始让学生解决综合性的实验题目,这部分题目需要学生融会贯通前后的知识点才可以完成;最后,在课程的收尾阶段,为了检验学生掌握该门课程的情况,老师提出实验目的和要求,学生自行设计,完成实验内容。设计型的题目一般安排在课后进行,学生可以根据要求去图书馆查阅资料,不仅丰富了学生的第二课堂,而且大大培养了学生动手解决实际问题的能力。

实验内容上去掉了部分抽象性比较强的题目,增加了几个竞赛内容题目。这部分内容的增加不仅提高了学生的兴趣,并为以后参加程序设计大赛打下了坚实的基础。

2.3 内容讲解和上机实验

实验课一般先安排老师进行实验理论知识的大致介绍和实验内容的详细讲解,时间大致掌握在二十分钟左右,剩下时间是学生进行验证和自行编程时间。在这个时间如果个别学生有疑问,实验老师可以进行有针对性的讲解,同时逐步引导学生排除错误。另一方面,学生在老师讲解完毕后要对实验内容进行全面分析,对验证型实验内容要在实验完毕后巩固所学理论知识;对于综合型实验内容要联系各个知识环节,综合解决复杂问题。

为了及时解答学生在做实验中遇到的问题,教师可以不时在学生中巡回一下,以便帮助学生排忧解难,确保学生的问题可以及时有效的解决。另外,在实验结束后必须要撰写实验报告,提交实验结果。

2.4 内容考核

为了验证学生掌握实验的情况,必须进行实验课程考核。按照数据结构大纲要求,平时成绩、实验成绩和理论课程考试比例为1:4:5。同时针对实验成绩,又分为平时成绩占30%,实验考核成绩占70%,这样可以有效的避免学生最后单凭考试成绩一锤定音的情况。

对完成的实验内容进行验收时,尽量做到公平、公正。可以分为多个考核指标,分别进行实物验收和答辩情况打分。老师根据每个同学的演示、汇报、提问回答情况给出一个综合成绩,再结合该同学平时的实验课表现情况,给出一个综合的实验成绩。

3.实施效果

数据结构实验课程改革,从修订实验大纲到制定合适的实验题目,最后到考核环节,每一阶段都是以提高学生的学习兴趣、加强学生的掌握力度和培养学生的实际能力为主要导向。实验课程的改革在这实施的两年中,根据观察和实验考核情况,有效提高了学生遇到问题、分析问题和解决问题的能力。

经过实验教学的改革和实践,我们取得了明显效果,在2012年的广西大学生程序设计竞赛中,学院选派的代表对,分别取得了一、二、三等奖的好成绩。实践证明,通过实验课程的改革,学生的编程能力有了明显提高,为日后工作打下良好基础。

4.结束语

从进行数据结构课程改革以来,我们一直致力于这门课程的建设,从修订大纲、选用教材、师资队伍、课程教学、实验教学等各个环节进行了不断的探索和实践。在这2年多的实践教学中,取得了比较满意的教学效果。通过课程实践,学生不仅深入理解了数据结构的基本原理和基础知识。同时,学生普遍感觉自己的动手能力得到提高,遇到问题、分析问题和解决问题的能力得到了锻炼。

参考文献:

[1]严蔚敏. 数据结构(C语言版)[M]. 北京:清华大学出版社,2001

[2]汪沁. 基于“数据结构”实验的探讨和研究[J]. 中国教育信息化,2007.(1):17-19

[3]徐大华. 程序设计语言教学方法探讨[J]. 高等理科教育,2007(1):36-38