数据结构课程设计10篇

数据结构课程设计篇1

关键词:课程内容;结构分析;教师素质;学习能力

随着我国综合实力的不断增强和国际地位的不断提升,大学计算机教育的重要性逐渐突显出来,而计算机教育中数据结构课程则是重中之重。进入21世纪,计算机科学与技术及相关的专业一度成为热门专业,而数据结构是该学科的基础课程,要想掌握良好的计算机技术就一定要打好基础,学好数据结构课程。然而,数据结构课程内容较为抽象、复杂,具有动态性,学生在学习的过程中感觉无从下手,到实践的过程中更是由于没有理论知识的支持而感到疑惑重重。因此,培养学生的自信心,激发学生的热情便成为当务之急。笔者将在下文中结合自己几年的执教经验对数据结构课程进行探究,不足之处,还请指教。

一、数据课程内容及体系结构分析

数据结构是计算机科学与应用专业的基础课程,该课程内容主要是介绍了软件设计中最常见的数据结构及其储存结构,本课程的难点是数据组织方面的动态储存结构及递归技术。笔者认为,可以从以下几个方面进行教学:

1.做到学以致用

在进行数据课程教学的过程中,教师可以结合实例向学生展示整个课程的内容及每个章节的重难点知识,最大限度地激发学生的学习热情和积极性,这样不仅可以使学生对本课程有个大致的了解,使学生很好地掌握理论知识,还可以培养学生运用理论知识解决实际问题的能力,真正做到学以致用。

2.为学生总结知识框架

教师要采用科学的方法对教学内容进行整理,为学生总结知识框架,这样便于学生自主学习。知识框架要由多个相互关联的模块构成,便于课程中多种知识的组合。

3.进行严格的训练

由于数据课程知识较为抽象,对于一些难度较大,较难理解的知识一定要进行及时、严格的训练,这样可以很好地培养学生严谨的学习态度,在试题之中,教师要适当地考查学生对知识的深入理解情况,便于掌握学生的学习情况。

4.对疑难点知识的补充教学及总结

针对数据课程中某些重难点知识,教师一定要进行深入地剖析,并且可以根据实际情况对教材之中的原理部分进行转化便于学生接受,还可以对教材中未提及的简易算法等进行补充,使学生便于掌握、理解。

5.注重对学生能力的培养

数据课程具有较强的实践性,在理论教学的过程中隐含了许多重要的技术知识,但教材中多是一笔带过,使学生很难理解。针对这种情况,教师一定要对教材中没有展开讨论的重点技能性知识进行解析,以培养学生解决问题的能力。

二、解析课程设计对计算机教师的要求

课程设计主要是针对学生的学习能力进行的,教师一定要根据学生的实际情况及兴趣爱好进行,要注意课题的难度,尽量控制在通过学生的努力可以完成的范围内,既不要太难,也不要过于简单。需要注意的是,计算机教师一定要对整个过程进行掌控,如果发现这个课题较难,学生花费了很长的时间也不能解决,教师就是及时进行指导,帮助学生渡过难关。因为,如果经过长时间的思考还没有解决问题,学生的兴趣和信心都会在一定程度上减弱,最终会出现消极心理,这非常不利于学生的发展;不仅如此,还要对数据结构课程的设计进行严格的验收,严谨的对待学生的成绩评定。在设计完成后,教师要进行现场评定,要充分地检查各种数据,明确指出设计之中存在的缺陷,以便于学生形成良好的治学态度,此外,对于学生设计中的闪光点,教师也要及时肯定,不吝啬鼓励、表扬的语言,使学生感受到教师对其的期望感,激发起学生的学习动力。

通过对上文的论述可知,对数据结构课程设计进行探究具有重要的意义,对我国整体高校计算机教育事业的发展是大有裨益的。数据结构课程作为计算机技术与应用专业的基础课程,对该专业学生的未来发展起到很大的作用,我们数据课程教师任重而道远。尽管在当前的数据结构教育中还存在很多问题,在未来探索的道路上更是阻碍重重,但我坚信,天道酬勤,只要我们广大高校计算机教育工作者恪尽职守,无私奉献,不断对数据结构课程进行探究,一定能够有效缓解我国当前的教育现状,为祖国培养出一批又批的综合素质较高的计算机专业人才,最终为祖国的发展和社会的进步奉献自己的一份力量。

参考文献:

[1]任雪萍,王立波,赵葆华.融入PIC-CDIO理念的“数据结构”课程教学改革[J].计算机教育,2012(12).

[2]查建中.面向经济全球化的工程教育改革战略:兼谈CDIO工程教育模式实施[J].计算机教育,2010(11).

数据结构课程设计篇2

数据结构是计算机科学的基础理论知识,也是软件设计的技术基础。本课程设计的性质是检验理论科学系的效果以及综合运用的能力,目的是训练学生进行复杂程序设计的技能和培养良好的程序设计习惯。本课程设计的任务是要求学生使用C或C++语言编程,解决具有一定规模的、具有实际意义的应用题,实现理论课所要求的数据组织、存储、处理的基本方法。

二、课程设计所用到的工具

这次课程设计所用到的工具Microsoftvisualc++6.0PC机一台。

三、这次课程设计我所选择的两个题目

1、一元多项式计算。

设计分析

一)一元多项式计算

1、需求分析

要求按照指数将序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输入。

2、概要设计

在分析题目要求的基础上,我首先设计了一个结构体,定义如下:

structpoly

{floatcoef;

intexp;

polytypenext;};

在这个结构体中,定义了一个浮点型的系数coef,还定义了一个整形的指针exp。接下来要做的就是定义各个不同用途的函数,以满足课程设计的需要,所用到的函数定义如下:

polytypeCreate_Empty_Node(int);创建一个空链表

voidInput_Values(polytype,int);输入值

voidInsert_Node(polytype,float,int);插入接点

voidAdd_Poly(polytype,polytype);将两个多项式相加

voidSub_Poly(polytype,polytype);将两个多项式相减

voidOutPut_Results(polytype);将结果在显示器上显示

3、源代码

#include"stdio.h"

#include"stdlib.h"

typedefintdatatype;/*定义多项式节点的结构*/

typedefstructnode

{floatcoef;/*系数*/

intexpn;/*指数*/

structnode*next;/*指向结构体的指针*/

}PotyNode;/*建立连表,返回指向多项式头节点的指针*/

PotyNode*Creat_PotyNodeTail()

{PotyNode*L,*s,*r;/*声明结构体指针*/

floatc;/*系数*/

inte;/*指数,建立头节点,头节点指针设置为空*/

L=(PotyNode*)malloc(sizeof(PotyNode));

L->next=NULL;/*是指针r指向头节点*/

r=L;

printf("\ninputcoefandexpn:");

scanf("%f%d",&c,&e);

while(c!=0)/*输入的第一项系数不允许为0,防止无意义的输入*/

{/*初始化节点*/

s=(PotyNode*)malloc(sizeof(PotyNode));s->coef=c;s->expn=e;s->next=NULL;

r->next=s;/*连接节点*/

r=s;/*指针r指向当前节点,用于连接下一节点*/

printf("\ncoefandexpn:");

scanf("%f%d",&c,&e);

}returnL;

}/*获得多项式的长度,参数为多项式头节点指针*/

intGetlength(PotyNode*L)

{PotyNode*p;intcount=0;p=L->next;

while(p)

{count++;p=p->next;}

returncount;}/*获得指向i节点的指针,在删除节点的时候来获得准备删除的前一节点*/

PotyNode*GetElem_PotyNode(PotyNode*L,inti)

{PotyNode*p;intj=0;p=L;

while(p->next&&j!=i)/*当p不是尾节点,并且不是第i个节点*/

{j++;p=p->next;}

if(i==j)

returnp;/*找到节点*/

else

returnNULL;/*没有找到节点*/}/*删除节点i*/

intDelete_PotyNode(PotyNode*L,inti)

{PotyNode*q,*p;/*获得节点i的前一个节点,便于删除节点i*/

p=GetElem_PotyNode(L,i-1);q=p->next;

if(q)/*如果P为空,则说明节点p也就是节点i-1就是尾节点,节点i实际并不存在*/

{p->next=q->next;

free(q);return1;}

else

return0;}/*对输入的多项式LA,LB进行相加,结果为LC,返回指向LC头节点的指针*/

PotyNode*Add_PotyNode(PotyNode*LA,PotyNode*LB)

{PotyNode*LC,*q1,*q2,*r,*s,*p;

intx=1;q1=LA->next;q2=LB->next;LC=LA;

LC->next=NULL;/*指针r是当前指针便于进行各种操作*/

r=LC;

while(q1&&q2)/*当多项式LA,和LB都没有结束的时候*/

{if(q1->expn<q2->expn)

{s=q1;q1=q1->next;}

elseif(q1->expn>q2->expn)

{s=q2;q2=q2->next;}/*指数相同,相加*/

else{q1->coef+=q2->coef;

s=q1;q1=q1->next;q2=q2->next;}/*结果连接到多项式LC*/

s->next=NULL;r->next=s;r=s;}/*如果LB已结束,把LA剩余的部分连接到LC上*/

if(q1)r->next=q1;

if(q2)r->next=q2;/*去除多项式中系数为零的项,我对代码作了小的修改*/

p=LC->next;

while(p->next)

{if(p->coef==0)

{p=p->next;

Delete_PotyNode(LC,x);}

else

{p=p->next;x++;}}

returnLC;}/*打印多项式*/

voidprint_PotyNode(PotyNode*L)

{inti;PotyNode*p=L->next;

for(i=0;i<Getlength(L);i++)

{printf("%fX%d",p->coef,p->expn);

if(p->next==NULL)

return;

elseprintf("+");

p=p->next;}}

voidmain()

{PotyNode*LA,*LB,*LC;

intx;

printf("inputLA(endby0):\n");

LA=Creat_PotyNodeTail();

printf("f(LA)=");

print_PotyNode(LA);

printf("\ninputLB(endby0):\n");

LB=Creat_PotyNodeTail();

printf("\n");

printf("f(LB)=");

print_PotyNode(LB);

printf("\n");

LC=Add_PotyNode(LA,LB);

printf("Afteraddf(LA)andf(LB),f(LC)is:");

print_PotyNode(LC);

scanf("%d",&x);}

3、运行结果

提示输入一个多项式LA(以0结束)然后输入每项的系数和指数,输入后再提示输入另一个多项式LB(以0结束)然后输入每项的系数和指数。按回车键后得出f<LC>=f<LA>+f<LB>。

1、需求分析

1)输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。

2)输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出“全部字母数”、

“数字个数”、“空格个数”、“文章总字数”(3)输出删除某一字符串后的文章

2、概要设计

a、建立文本,存储结构用链表

voidCreateTXT(LINE*&head){

printf("\n请输入文本,每行最多输入80字符!\n");

printf("输入Ctrl+E(^E)则结束输入\n");

LINE*p=newLINE;//首先为链表建立一个附加表头结点

head=p;//将p付给表头指针

chartmp[80];

b、计算空格数

intCount_Space(LINE*&head){//统计空格数

LINE*p=head;

intasc_space=32;//空格的ASCIC码值

intcount=0;

do

{intLen=strlen(p->data);//计算当前data里的数据元素的个数

for(inti=0;i<Len;i++)

if(p->data[i]==asc_space)count++;}//计算空格数

while((p=p->next)!=NULL);//遍历链表

returncount;}

c、统计数字数

intCount_Num(LINE*&head){//统计数字数

LINE*p=head;

intcount=0;

do

{intLen=strlen(p->data);//计算当前data里的数据元素的个数

for(inti=0;i<Len;i++)

if(p->data[i]>=48&&p->data[i]<=57)count++;}//计算空格数

while((p=p->next)!=NULL);//遍历链表

returncount;}

d、统计文章的总字数

intCount_All_Word(LINE*&head){//统计文章的总字数

LINE*p=head;//保存链表的首地址

intcount=0;//总字母数

do

{count+=strlen(p->data);}//计算当前行内的字符数!除''''\0''''结束符外!注意,该统计包含“空格的长度!”

while((p=p->next)!=NULL);//遍历链表

returncount;}

3、源代码

/*definemacrovariables*/

#definetrue1

#definefalse0

#include<stdlib.h>

#include<stdio.h>

#include<malloc.h>

#include<string.h>

#include<conio.h>

#defineSTACK_INIT_SIZE100/*variablesinthesavestoragespace*/

#defineSTACKINCREMENT10/*incrementofdistributioninthesavestoragespace*/

typedefstruct

{char*base;/*beforeandafterthecreatingoftheshed,baseisNULL*/

char*top;/*shedpointer*/

intstacksize;/*thesavestoragespacedistributivebytheelement*/

}SqStack;

SqStackS,q;

/*constructastructuerarray*/

typedefstruct{

charcc[9999];

intno;}Array;

/*definethewholebureauvarible*/

Arraya[10000];

intm,n,i,j;

charname[40];

chart=''''\n'''';

FILE*fp;

/*constructanemputyshed*/

voidInitStack()

{S.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));

if(S.base==NULL)

exit(1);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;}

/*usingcharactershed,acceptthedatafromtheterminal*/

voidpush(chare)

{if(S.top-S.base>=S.stacksize)

{/*applyanewroom*/

S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));

if(!S.base)

exit(1);

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;}

/*acceptthenextcharacter*/

*S.top++=e;}

/*carrythewholedatainthestackintothedatasection*/

charpop()

{chare;

if(S.top==S.base)

returnfalse;

e=*(--S.top);

returne;}

/*emptythedatainthestack*/

voidClearStack()

{S.top=S.base;/*letS.topandS.basepointtothesameplace*/}

/*destroythestack*/

voidDestroyStack()

{free(S.base);/*freethedatainthestack*/

S.top=S.base;}

/*judgetheemputyoftheshed*/

intStackEmpty()

{if(S.top==S.base)

returntrue;

returnfalse;}

/*takeoutthedatafromthestackandtheputinthestucterarray*/

voidBuffer(){

n=0;m=1;

/*movethedataintheshadeuntillthestackisempty*/

while(S.top!=S.base)

{n=n+1;

a[m].no=a[m].no+1;

a[m].cc[n]=*(S.top-1);

S.top--;}}

/*savethedata*/

voidsave()

{printf("\n\nfilename:");

scanf("%s",&name);

fp=fopen(name,"wb");

for(i=1;i<=m;i++)

{for(j=a[i].no;j>=1;j--)

{fwrite(&(a[i].cc[j]),1,1,fp);}

fwrite(&t,1,1,fp);}

fclose(fp);}

/*mainfunction*/

voidmain()

{charch,e;

printf("\n\n\n\t\t\twelcometousethewholescreeneditor");

printf("\n\npressF6ifyouwanttosavethefile,youcansavethefilewhenyousee\"^Z\"\n");

printf("\n******************************************************************************\n\n");/*SqStackS_stack,D_stack;*/

InitStack();/*InitStack(D_stack);*/

ch=getchar();

while(ch!=EOF)

{while(ch!=EOF&&ch!=''''\n'''')

{switch(ch)

{case''''#'''':e=pop();break;

case''''@'''':ClearStack();break;

default:push(ch);break;}

ch=getchar();}

Buffer();

ClearStack();

if(ch!=EOF)

ch=getchar();}

save();

DestroyStack();}

4、运行结果

三、这次课程设计的心得体会

通过实习我的收获如下

1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。

2、培养了我选用参考书,查阅手册及文献资料的能力。培养***思考,深入研究,分析问题、解决问题的能力。

3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。

4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。

根据我在实习中遇到得问题,我将在以后的学习过程中注意以下几点:

1、认真上好专业实验课,多在实践中锻炼自己。

2、写程序的过程中要考虑周到,严密。

3、在做设计的时候要有信心,有耐心,切勿浮躁。

数据结构课程设计篇3

摘要:本文针对传统数据结构课程设计教学过程中出现的问题,提出一种案例驱动的数据结构课程设计教学方式,以帮助学生理解和掌握分析问题、解决问题的方法,提高自主学习能力,锻炼设计创新能力。实践表明,此教学方式能够弥补传统教学的不足,开阔学生的思路,提高自主完成率,达到课程设计目的。

关键词:课程设计;数据结构;案例驱动;教学改革

中***分类号:G642

文献标识码:B

1引言

数据结构课程是计算机相关专业的专业基础课程,属于专业课程体系中的核心课程。该课程着眼于对基本数据结构进行阐述和分析、讲解基本数据结构的应用并介绍典型的基本算法等三个方面,内容比较抽象枯燥,掌握起来相对困难。数据结构课程设计是一门***的实验环节,是对数据结构课程教学理论的延伸和补充,是对理论知识的综合应用,其目的是发挥学生的主动性,培养学生分析实际问题并加以解决的能力,锻炼学生的设计创新能力。

传统的数据结构课程设计教学轻讲授,主要以对学生的单独辅导为主,督促学生完成课程设计。这种方式存在后文所提及的一些问题,随着互联网资源的日益丰富,部分问题更加突出了。为了能让学生通过课程设计更好的掌握数据结构的内容,我们设计了案例驱动的数据结构课程设计教学改革,实践证明,该项教改能够填补传统教学过程的不足。

2传统教学过程中暴露的问题

(1) 缺乏驾驭全局的能力。本科二年级学生计算机建模能力弱,没有软件工程的思想,因而缺乏驾驭全局的能力。软件工程课程一般都开设在数据结构课程之后,在进行数据结构课程设计前,学生也基本没有分析、编写较大程序的经验,这种情况造成了学生拿到问题后不知该从何下手和如何规划好课程设计的整个过程。

(2) 生搬硬套基本数据结构。数据结构教材中都是最原始的数据结构,不进行扩展和修改基本上是不能直接用到课程设计中解决实际问题的,而采用多种数据结构解决问题并加以比较找寻最优方案对于学生来说就更为困难。

(3) 对高级程序语言掌握不到位。数据结构课程设计是需要用高级程序语言来编写的,学生对该程序语言的掌握程度直接影响到课程设计的质量,常见的问题包括:变量定义不规范、函数功能划分不合理、代码可读性较差、文件读写掌握不好、调试程序能力较弱等。

(4) 照搬、照抄他人课程设计的现象存在。由于完成课程设计的时间有限,有的学生在无法自主完成的情况下,通过网络、书籍等方式来查找解题方法。本来通过查阅资料消化吸收他人的解题思路来求解自己的课程设计问题是毋庸置疑的正规途径,然而一方面课程设计的题目每个学校每届学生都相对比较固定,致使存在抄袭往届学生程序的现象,另一方面互联网的发展使得查找相似题目的课程设计源代码并非难事。此外,市面上还存在着大量快餐式的课程设计书籍在售,这类书籍良莠不齐,多是搜集、罗列了若干课程设计题目,源码、光盘附上,草草分析讲解了事。许多学生也习惯了这种快餐式的学习,能做到***思考、举一反三的越来越少。

3案例驱动的数据结构课程设计教学改革特点

案例驱动的数据结构课程设计教学改革是将案例教学法引入数据结构课程设计教学中,教师通过讲解一个完整的案例分析解决过程,辅以多媒体的手段与学生交流、互动,达到培养学生分析并解决实际问题的能力,锻炼学生的设计创新能力的目的,同时也弥补了目前数据结构课程设计教学重实践、轻讲授的不足,丰富该项课程设计的教学内容。该方法有以下特点:

(1) 提前熟悉软件工程思想。案例的分析解决过程就是一个实践软件工程思想的过程,学生可以在讲解的过程中体会软件开发的完整流程,进而对自己的课程设计有全局性的考虑。

(2) 举一反三,定制合适的数据结构。对于案例讲解中所涉及到的数据结构,教师将进行细致的分析。采用不同数据结构解决同一问题,在性能和功能上会有所区别,学生可以在与教师的互动讨论中提高对各种数据结构的认识,从而设计适合解决自己课程设计的数据结构,甚至能够采取多种解法。

(3) 养成良好的编程习惯。优秀的代码就像优美的文章一样能使阅读者心情舒畅,教师讲解的案例都是代码级别的,定义规范、流程清楚、可读性强、具备参考价值,这样就促使学生养成良好的编程习惯。教师以多媒体手段演示代码的编制调试过程,使学生对编程环境更加熟悉,能够灵活运用跟踪、断点等调试手段,开发过程事半功倍。

(4) 最大限度避免抄袭课程设计的现象。大多数学生事实上都希望能够自主完成课程设计,只是因为不会做才导致抄袭往届学生或是市售相关书籍源码的现象存在。授之以鱼不如授之以渔,通过对典型案例的讲授,教师教给了学生解决课程设计的方法,学生找到了突破口,便愿意通过自己的努力完成任务,自己能制作“大餐”,也就不再求助于“快餐”了。

4典型数据结构课程设计案例分析

“活期储蓄帐目管理”是常见的数据结构课程设计题目,下面以其讲解过程为例简单描述一下案例驱动的数据结构课程设计教学的过程。

此课程设计需要实现的功能一般是:(1)采用交互工作方式;(2)实现储户开户;(3)实现储户销户;(4)向某账户存款;(5)从某账户取款;(6)排序显示所有账户信息;(7)查询某账户余额;(8)查询某账户交易记录;(9)所有账户及其交易信息存储至文件,程序运行时从文件中读入。该课程设计考察的知识点包括:选择并构造数据结构;使用与特定数据结构相应的算法来实现具体功能;对文件读写结构化数据;对程序设计语言的灵活运用等。

首先应对题目进行大致的分析,该题目包括两方面的信息。一方面是储户的信息,可设计为包含账号、姓名和余额等字段;另一方面是交易记录信息,可设计为包括账号、存取时间、存取标志、金额等字段,两方面信息通过账号字段关联起来。使用顺序存储结构、链式存储结构或树形结构都可以存储这些信息,但其中各有利弊。顺序存储结构设计简单,但容量固定,账户插入删除需要进行记录的移动,单个账户的交易记录信息存储不易连续导致列举时需要对全部交易记录进行完整遍历,对已排序顺序表查找某一记录时可以采用特定算法(如二分法)提高效率,总体上来说实用性和整体效率相对较差。链式存储结构设计略复杂,容量不设上限,账户插入删除较方便,采用链式结构存储的交易记录形式上连续,列举时很方便,但在查找某一记录时需要遍历整个链表效率较低,总体上来说实用性和整体效率中上。树形存储结构相对最复杂,容量也不设上限,插入、删除算法也相对复杂,采用特殊树形结构(如二叉排序树)能够提高查找记录时的效率,交易记录仍可采用链式结构存储,总体上来说实用性和整体效率较好,现实中的数据库管理系统(DBMS)多是用树形结构来实现的。从实现难度上来说,顺序存储最简单,链式存储次之,树形存储最难。因此,对学生一般要求其用链式存储来实现,对能力较强的学生可以鼓励其用树形存储来实现,以链式存储为例继续讨论。

账户信息和存取记录之间是通过账号来关联的,在链式存储结构中可以用指针来表示两者的联系,即每个账户节点(数据域可包含账号、姓名和余额等字段)具有两个指针域,一个指针指向下一个账户节点,另一个指针域指向该账户的存取记录链表(存取记录节点的数据域可包含存取时间、存取标志、金额等字段),如下***所示。

从功能上分析,储户开户、储户销户就是在账户链表中进行插入和删除操作;对账户存、取款时,首先找到相应账户,然后添加一条存取记录,同时修正该账户的余额;排序显示所有账户信息,就是对账户记录依据某一关键字进行排序并显示排序结果;查询某账户余额,就是遍历账户链表,找到对应记录并显示出来;查询某账户交易记录,就是先找到该账户,然后遍历显示该账户对应的存取记录链表。可以看出,对账户链表进行遍历查询在账户存取款、查询余额和查询存取记录是都有用到,因此在设计时,可以考虑编写查询账户函数,以供其他功能模块调用。

在文件存取方面,存取时都是以存储节点为单位进行的,即一次性存取一个结构体。该课程设计有其特殊之处,有两种类型的结构体需要存取,即账户信息和存取款记录,这两种结构体所占用的空间不尽相同,若是都保存在一个数据文件中则需要一定的技巧。以保存记录到文件为例,可以采用存一个账户信息,再存一个整形数,该整形数的数值为此账户对应存取记录节点的数量,然后再逐一保存每条存取记录,存储完毕后再用相同方法保存下一个账户的记录。读取文件过程则是存储过程的逆过程,这样可以保证存取时,账户信息和存取记录一一对应,不至于混淆。

在确定了上述思路后,便可以着手编码,值得注意的是数据结构的定义。由于采用了链式结构,许多同学便直接将链式结构的节点(包括指针域)直接存储到文件中。事实上,这个指针域是没有保存价值的,尤其在读取时如果也将指针域读出并赋值,将很有可能导致不可预知的错误。可以采取的方法是,先定义只包含数据域的数据结构体,再定义链表节点结构体将数据结构体封装起来并加上指针域,在文件读写时只对数据结构体进行操作。给出该课程设计数据结构参考定义如下:

typedef struct log //存取记录

{

char DateTime[25]; //存取时间

char W_D; //存取标志

float Amount; //存取金额

} log;

typedef struct node_log //存取记录节点

{

log data; //存取记录

struct node_log *next; //下一存取记录节点指针

} node_log, *p_node_log;

typedef struct account //账户记录

{

char ID[10]; //账号

char Name[10]; //姓名

float Balance; //余额

} account;

typedef struct node_account //账户记录节点

{

account data; //账户记录

struct node_log *nlog; //存取记录节点指针

struct node_account *next; //下一账户记录节点指针

} node_account, *p_node_account;

其他功能模块便可以参照数据结构教材上的相关算法设计实现。

5结果与结论

我们将来自3个不同专业(计算机、网络工程、软件工程)10个班级的57名同学分成了两组,一组(试验组)通过上述方法进行了课程设计教学,一组(对照组)仍采用传统方法教学,课程设计题目相同。课程设计对比统计情况如下表,其中试验组优良率达到44%,不合格率13%,对照组优良率21%,不合格率26%。同时,试验组采用了多种方式来实现了课程设计,且雷同情况较少,对照组多数采用顺序存储方式实现,程序雷同情况较多。很明显,试验组的学生思路更加开阔,自主完成率更高。

时代在变迁,信息获取更加便捷,部分学生的学习积极性在某种程度上也发生了蜕变,随之的教学方式也应有所改变,教师应从正面加以引导。在以案例驱动的数据结构课程设计教学改革实践中,教师通过对典型案例的细致分析,比较不同数据结构的优缺点,一方面使学生更加牢固的掌握了数据结构知识,另一方面让学生找到入手之门,激发学习兴趣,提高动手能力,更重要的是能让学生掌握分析和解决问题的方法,自主完成课程设计,这对今后其他课程的学习也是有所裨益的。

参考文献:

[1] 张培,肖天庆. 基于网络环境下教学设计与课程开发的合作模式研究[J]. 电化教育研究,2007,(9):60-63.

[2] 吴宏伟,张殿龙,梅险. 高校网络辅助教学的探索与实践[J]. 计算机教育,2007,(7):18-21.

[3] 张敏霞. 程序设计语言课程教学方法改革的探索与实践[J]. 中国高教研究,2004,(2):90.

数据结构课程设计篇4

关键词:算法;数据结构;程序设计竞赛;实践教学;改革

“算法与数据结构”是计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课程,也是一门实践性很强的专业技术基础课。其在计算机学科的课程体系中起着承上启下的作用,它为操作系统、编译原理、数据库原理、软件工程等后续课程的学习打下基础,学好“算法与数据结构”对于提高学生的理论认知水平和实践能力有着极为重要的作用。

ACM国际大学生程序设计竞赛(ACM/ICPC:ACM Internation Collegiate Programming Contest)是由美国计算机协会(ACM: Assiciation for Computing Machinery)组织的年度性竞赛,开始于1970年,是全球大学生计算机程序能力竞赛活动中最有影响力的一项赛事。ACM/ICP竞赛涉及学科知识面广,有助于培养学生自主学习的能力、创新能力,也有利于团队精神的培养。参加此竞赛能使学生将“算法与数据结构”课程所学充分应用于竞赛中,将理论转化为实践,用实践验证及加强理论知识,二者相得益彰。

1面向问题求解的实践教学模式

“算法与数据结构”是一门理论性和实践性都很强的课程。在传统的课程教学过程中,存在着理论教学与实践运用的矛盾。由于该课程内容较抽象,不好讲解,若非精心准备,很难取得好的课堂教学效果。学生学完该课程后,普遍存在理论知识不扎实、编程实践能力差的现象。

近年来,针对传统教学存在的问题,不少学校都在进行该课程的教学改革[1-3],其中很重要的一个改革就是实践教学改革,提倡要加强实践环节的训练,在每个章节的理论教学后要求学生完成若干上机实验作业,以此达到提高学生实践能力,深化理论教学的目的。

我校从2005年起开展课程实践教学改革,构建面向问题求解的实践教学模式[4]。面向问题求解的实践教学模式主要包括以下几个方面:(1)面向实际问题,精心设计实践教学内容;(2)作业自动评测;(3)解题报告交流;(4)优秀作业评选。

通过以上多方面的改革,学生的实践能力也得到了较大的提高。

2结合程序设计竞赛的数据结构课程实践教学改革

针对近几年来我校学生对参与ACM/ICPC竞赛热情高涨,而且该竞赛所涉及的很多知识与“算法与数据结构”课程息息相关等因素,自2007年以来,课程教学组将程序设计竞赛与课程实践教学改革相结合,依托程序设计竞赛,进一步推进“算法与数据结构”课程实践教学改革。具体措施主要有以下几个方面:

2.1与竞赛题目描述形式相同的课程实验作业

我们借鉴程序设计竞赛题目规范、求解目标明确和背景描述有趣等特点,将“算法与数据结构”课程实验作业题目描述成程序设计竞赛题目的形式,这样便于学生明确问题求解的目标以及结果的表示形式,为自动评测做了准备。同时,采用竞赛题的描述方式也大大激发了学生解决问题的兴趣,提高了学生学习的积极性和主动性。

2.2离线和***评测相结合的作业评测方式

先用离线评测系统测试学生提交的作业,测出每次作业的成绩,并在网站上公布评测结果,平时作业成绩将是期末成绩的重要组成部分。成绩公布后,开放程序设计竞赛所用的***评测系统,作业成绩不理想的学生可再次改进自己的作业,并利用***评测系统实时进行评测。

2.3竞赛形式的课程半期考

福州大学每年的程序设计竞赛举办的时间都在四月下旬,时值“算法与数据结构”课程教学进行至中期。鉴于程序设计竞赛所涉及知识与“算法与数据结构”课程密切相关,我们将此竞赛当成课程的半期考试,要求每一位修读“算法与数据结构”的学生都要参加。

竞赛形式的半期考有如下几个好处:(1)通过竞赛可以检验学生对“算法与数据结构”课程内容的掌握情况;(2)由于此竞赛是全校性的赛事,各专业的学生均可参加,作为科班出身的计算机专业学生若在竞赛中输给非计算机专业学生,那将是一件很不光彩的事情,因此竞赛形式的半期考将给修读“算法与数据结构”的学生带来无形的压力,这必将促使他们在平时投入更多时间去学习;(4)竞赛形式的半期考也让学生亲身感受到程序设计竞赛的氛围,从而激发学生参赛的兴趣,为我校ACM/ICPC集训队员的选拔奠定坚实的基础。

2.4开展“有奖月赛”活动

为了让学生在课堂之外能自觉加强对“算法与数据结构”课程的学习,进一步提高他们分析、解决问题的能力,我们在每月末开展一次“有奖月赛”活动。

“有奖月赛”的奖励只颁发给大一、大二的学生,以此来激励修读“算法与数据结构”的学生参加该项活动,提高自身动手实践能力。该活动至今已开展两年多,取得了显著的效果。

3实践教学改革的成效

3.1激发了学生的学习兴趣

竞赛题有趣的背景描述在很大程度上激发了学生的学习兴趣和主动性。如利用循环链表解决猴子选大王问题,利用栈帮助小鼠走出迷宫,利用Huffman算法设计文件解压缩软件和利用***的最短路径算法寻找换车次数最少的公交线路问题、套汇问题等。

3.2深化理论教学

“算法与数据结构”是一门理论性和实践性都很强的课程。结合程序设计竞赛的实践教学改革不仅大大提高了学生的动手实践能力,而且也在很大程度上使学生加深对课堂教学内容的理解,达到通过实践教学深化理论教学的目的。

3.3提高了学生分析和解决实际问题的能力

从近几年的改革实践来看,大部分学生经过“算法与数据结构”课程的学习与实践训练,已经具备在一定的时间内***解决问题的能力,能够在规定的时间内选择合适的数据结构和算法设计策略,并在计算机上编程实现。我校计算机专业学生在各类与程序设计相关的学科竞赛中频获佳绩。我校ACM/ICPC代表队先后在ACM/ICPC亚洲区预赛中共获9个银奖和11个铜奖,且成功晋级第30届ACM/ICPC全球总决赛,并喜获第39名。

3.4为各类与程序设计相关的学科竞赛培养大量人才

经过本课程的实践教学改革,我院学生的动手实践能力得到极大的提高,涌现出了许多编程好手。近年来,我院学生除了组队参加ACM/ICPC竞赛,许多学生纷纷加入到诸如数学建模、电子设计、机器人大赛等各大学科竞赛小组中,并在历年的学科竞赛中均取得很好的成绩,为学校赢得了荣誉,这些荣誉的取得都与“算法与数据结构”课程的实践教学改革是分不开的。

5结语

结合程序设计竞赛的实践教学模式的实施深化了课堂理论改革,大大提高了学生的实践能力和人才培养质量。此教学模式先后在我校计算机专业近三年的“算法与数据结构”课程教学中得以实施,取得了显著的效果。

注:本文为“算法与数据结构”国家精品课程建设项目。

参考文献:

[1] 刘亚波,刘大有,高滢. 以实验教学深化“数据结构”理论教学[J]. 吉林大学学报:信息科学版,2005,23(8):135-137.

[2] 殷人昆,邓俊辉. 清华大学“数据结构”精品课程介绍[J]. 计算机教育,2006(5):20-22.

[3] 廖明宏,张岩,李秀坤,等. 哈尔滨工业大学“数据结构与算法”精品课程介绍[J]. 计算机教育,2006(5):17-19.

[4] 吴英杰,王一蕾,王晓东. 面向问题求解的实践教学模式――“算法与数据结构”实践教学改革[J]. 计算机教育,2007(4):29-31.

Deepening the Practice Teaching Innovation of the Algorithm and Data Structure

Combining with Programming Contest

WU Ying-jie, Wang Yi-lei, FU Yang-geng, WANG Xiao-dong

(College of Mathematics and Computer Science, Fuzhou University, Fuzhou 350108, China)

数据结构课程设计篇5

关键词:***评测系统 算法与数据结构 实验设计

【中***分类号】G【文献标识码】B【文章编号】1008-1216(2015)08C-0078-02

一、引言

“算法与数据结构”课程是计算机学科的专业核心基础课程,具有承上启下的重要作用。本课程上承“程序设计”(包括C语言程序设计、C++面向对象程序设计),下启“操作系统”“数据库概论”“计算机***形学”等专业课程。

学生通过本课程的学习,能够掌握各种常用的数据逻辑结构、存储结构、基本操作以及算法设计,同时能够根据具体问题选择适合的逻辑结构、存储结构及相应的处理算法。培养学生数据抽象能力和复杂程序设计能力,为今后软件开发打下坚实基础。因此,本课程是计算机专业本科教学的重中之重。

然而,目前内蒙古大学计算机学院“算法与数据结构”课程的师生比大体为1:60。在上机实验的过程中,教师查验程序所花费的时间占实验总学时的80%左右,导致教师辅导学生解决实验中遇到各类问题的时间非常有限,使得实验教学效果大打折扣。因此,为了提高实验教学质量,保证教师有更多的时间用于辅导学生,有必要改进实验教学查验程序的方式。

二、***评测系统概述

ACM/ICPC是由美国计算机协会(Association of Computing Machinery,ACM)主办的世界范围内规模最大、水平最高的国际大学生程序设计大赛(International Collegiate Programming Contest,ICPC)。

***评测(Online Judgment,OJ)系统源于ACM/ICPC。在国际大学生程序设计大赛过程中,参赛选手按问题提交代码,***评测系统能够自动评判代码的正确性,并将评判结果返回参赛选手。***评测系统评判代码的流程如***1所示。

***评测系统的评判结果包括以下几种:

(1)正确(Accepted,AC):程序正确。

(2)编译错误(Compile Error,CE):代码编译错误。

(3)超时错误(Time Limit Exceeded,LTE):程序运行时间超过限制。

(4)超空间错误(Memory Limit Exceeded,MLE):程序运行所需内存超过限制。

(5)结果错误(Wrong Answer,WA):程序运行结果不正确。

***1 ***评测系统评判代码流程***

(6)格式错误(Presentation Error,PE):程序运行结果与结果文件不完全一致,主要是间隔符存在问题,如空格、逗号、分号等。

当***评测系统返回的结果不为AC时,学生可根据***评测系统反馈的错误提示,对源代码进行修改和完善,直至反馈结果为AC为止。

***评测系统具有如下优势和特点:

1)实验教学在网络上进行,不受时间和空间的限制。

任课教师通过***评测系统实验题目和要求,学生可全天候提交代码,因此学生可根据自身情况合理安排时间,在截止日期之前完成题目即可。

2)减轻教师查验程序的负担。

由于***评测系统能够自动评测学生提交代码的正确性,因此能够有效减少教师查验程序的时间。教师可将更多时间用于辅导学生解决实验中遇到的各种问题和困难,提高实验教学效果。

3)有利于营造“你追我赶”的学习氛围。

学生通过***评测系统能够查看每道题目的提交情况以及何人、何时解决了该题目。这样,可在学生之间营造“你追我赶”的学习氛围,提高学生的积极性和主动性。

因此,如何按照***评测系统的具体要求,设计“算法与数据结构”课程的相关实验,是本文所关注的主要问题。

三、基于***评测系统的实验设计

***评测系统的每道题目均需设定测试数据文件和结果文件,其中测试数据文件为程序提供输入数据,结果文件用于与程序运行结果的一致性比较。此外,在题目描述中还需指明测试数据的上、下限,以及输出结果的格式等内容,以便让学生在程序中定义符合要求的变量,控制程序运行结果的输出格式等。

为了能够让学生更好地掌握和巩固“算法与数据结构”课程所学知识,本课程分别为“线性表”、“栈与队列”、“二叉查找树”、“最小生成树”、“内排序算法”等核心内容配套相关实验。下面将以“栈与队列”的配套实验为例,介绍如何将该实验设计成满足***评测系统要求的题目。

【题目描述】:设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入停车场;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场;每辆停放在车场的车在它离开停车场时,必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。

【程序输入】:输入数据的第一行包含两个正整数n和m(n, m<=10)分别表示停车场的容量和每小时停车费用。从第二行开始,每行表示一组输入数据,由三项内容构成:

(1)一个大写英文字母,表示汽车“到达”或“离开”信息,输入'A'时,表示汽车达到,输入'D'时,表示汽车离开,输入'E'时,表示程序结束;

(2)一个正整数X,表示汽车牌号;

(3)一个正整数T,表示汽车到达或离开的时刻。这三项内容之间以一个空格间隔。

【程序输出】:对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离开,则输出汽车在停车场内停留的时间(单位是小时)和应交纳的费用(在便道上停留的时间不收费),假设停车费为每小时m元。具体分为如下几种情况:

(1)如果汽车X到达,且停车场未满,则输出如下信息:“汽车X停靠在停车场Y号位置”(其中:X为汽车牌号,Y为停车场车位序号,1≤Y≤n);

(2)如果汽车X到达,但停车场已满,则输出如下信息:“汽车X停靠在便道的Z号位置”(其中:X为汽车牌号,Z为便道的车位序号,1≤Z);

(3)如果汽车X离开,且X在停车场内,则输出如下信息:“汽车X停车H小时,缴纳停车费M元”(其中:X为汽车牌号,H为停车时间,M为停车费用);

(4)如果此时便道上的停车队列不为空,则将便道上的第一辆汽车停入停车场,并输出如下信息:“汽车X停靠在停车场Y号位置”(其中:X为汽车牌号,Y为停车场车位序号,1≤Y≤n);

(5)如果汽车X离开,但停车场没有牌X的汽车,则输出如下信息:“汽车X不在停车场”(其中:X为汽车牌照号)。

四、结语

面对实验教学中繁重地查验工作,通过将***评测系统融入“算法与数据结构”课程的实验设计中,充分利用***评测系统的优势,有效减轻了教师的查验工作量,保证教师有更多地时间用于辅导学生,为学生解决实验中遇到的各种困难和问题,提高了实验教学质量。

***评测系统也可以融入与“算法与数据结构”类似的其他课程的实验设计中,既能有效减轻教师查验程序的工作量,同时也能改善实验教学效果,提高教学质量。

项目信息:内蒙古大学“卓越教学团队”建设项目(2013-05),数据结构与程序设计系列课程教学团队。

参考文献:

[1] 张铭,赵海燕,王腾蛟,等. 北京大学“数据结构与算法”教学设计[J]. 计算机教育,2008,(20).

[2] 赵玉兰,王俊义,周建涛,等. 数据结构与算法[M]. 北京:清华大学出版社,2008.

[3] 武建华. 基于ACM模式的数据结构实践教学改革与探索[J]. 计算机教育,2007,(12).

数据结构课程设计篇6

关键词: 《数据结构》课程 教学效果 教学改革

1.课程介绍

《数据结构》是计算机专业的一门重要的专业基础必修课程,是计算机专业后续课程的基础,主要用于处理非数值计算问题。学习《数据结构》就是要让学生掌握数据在计算机中的表示、组织和相应结构上的算法设计,以便学生在软件的开发过程中能选择适当的逻辑结构、存储结构,高效设计算法,并初步掌握算法的时间和空间分析技术。

《数据结构》课程主要介绍:线性表、栈、队列、数组、串、树和二叉树、***等基本数据结构及其应用;排序和查找的原理与方法。通过本课程的学习,学生能较熟练地掌握数据结构的基本概念、特性,存储结构及其相关算法;熟悉它们在计算机科学中最基本的应用;培养和训练运用高级程序设计语言编写结构清晰、可读性好的算法及初步评价算法的能力;为《编译原理》、《操作系统》、《数据库系统原理》等后续课程的学习,以及计算机软件的研制和开发打下一定的理论及实践基础。

2.教学效果不佳的成因分析

《数据结构》课程的基础性,以及该课程在计算机专业全国考研统考专业课程中所占的比重,使得大多数学生都能较认真地对待本课程。但在实际的教学过程中,我发现教学效果一直不尽如人意,不仅表现在期末考试补考率居高不下,还表现在课程实验和课程设计两个实践环节中,学生难以将课堂教学内容转化为可实际运行的程序,以及解决实际问题的能力较差。学生普遍反映的问题是:课堂上听老师讲解觉得很好理解,但等到要学生自己选择数据结构,并设计算法来解决实际问题的时候就感觉力不从心了。部分学生觉得数据结构理论性太强,过于抽象,在实际的应用中很难抽象出各种数据类型。另外一个常见的现象就是只知道本课程很重要,但不知道重要在什么地方,与实际生活相脱节,不能用来解决实际问题。教学效果不佳,我认为大致有如下原因。

2.1先修课程基础不扎实

《数据结构》的直接先修课程主要是高级程序设计语言(我校为C语言),但是同时也要求学生具备一定的数学知识。对大多数学生而言,数学课程和高级程序设计语言的学习也是有一定难度的,所以部分学生无法理解课堂上讲的例题和思路,难以进行算法分析、比较算法性能和算法的编程实现。

2.2教学方式单一

现在很多高校在《数据结构》教学过程中都已经采用多媒体的形式进行教学,我院就是这样。我认为,多媒体教学是把双刃剑,即使用不当不但不会带来任何益处,反而会带来弊端。曾有学生向我反映,通过PPT,传授的信息量太多,同学们理解困难,跟不上节奏,严重影响了教学效果。

2.3没抓好课程实验环节

课程实验环节是紧密配合理论教学,通过实验,帮助和加深学生对相应数据结构的物理结构和逻辑结构和编程实现等各个环节的整体理解。但是学生面对程序错误的时候,总是显得手足无措,老师如若不能采取相应的措施,抓好课程实验环节,则会直接影响教学效果。

2.4理论教学与实际应用相脱节

数据结构课程是建立在抽象数据类型的基础上,用于解决非数值计算问题的一门学科,内容相对比较抽象、琐碎、庞杂,并且涉及很多概念和技术。因此,如果单纯地按照课本照本宣科,就不能和实际应用相结合,学生就会很难接受。而即使有相关的实验,但是由于基本上都是一些验证性实验,做完结束,实际上也并没有体会到知识的实质,更别说做到融会贯通了。

3.教学改革探讨

3.1做好课程衔接

数据结构课程的直接先修课程虽然只有高级程序设计语言一门(C语言),但实际上与高等数学和离散数学中的相关知识点也联系甚密,做好课程衔接是数据结构教学改革中必须探讨的问题。例如,算法分析的研究必须以一定的数学理论为基础;非线性结构的分析必须用到树和***的基本知识。另外,数据结构编程实现过程中,高级程序设计语言中的指针和结构体是频繁出现的知识点。因此,针对课程衔接过程中的重要知识点,一定要采取适当的办法加以回顾,我院在实际教学中就已经安排了一到两次的衔接课程。

3.2教学方式的合理运用

在多媒体辅助教学普及的今天,一定要根据数据结构课程的各知识点的特点,将多媒体辅助教学与传统教学有机结合。所以在数据结构的课程教学中利用多媒体技术时,一定要注意扬长避短,并根据该课程概念多、内容抽象、逻辑性强等特点,精心设计、制作多媒体课件,进行一些必要的动态演示,并适时地运用传统教学模式,组织必要的课堂讨论、课堂提问等形式多样的课堂交互环节。

3.3课程实验设计与安排

课程实验是伴随着《数据结构》课程的课堂教学而进行的实践教学环节。与课程设计实践教学环节不同的是,课程实验的时间安排上是松散的;根据实验教学大纲的要求,依据不同的章节内容安排不同的实验项目。课程实验的目的主要在于掌握各种数据结构的物理实现方法和掌握基本算法的设计实现方法。通过实验,强化培养“结构―算法―编程”三者密切相关的意识。所以在课程实验的设计上,一般较偏重于如何编写功能单一的“小”算法的问题;而在实验安排上,一定要充分调动学生的积极性,并严格要求学生做好实验前的准备工作:主要是实验程序的准备和相关知识点的温习。我在实际教学过程中,一般在安排实验的前一次课堂教学中,会安排足够的时间,阐明实验项目要求,并演示实验效果,以便学生根据要求和效果做好实验前的准备工作。

3.4通过课程设计锻炼学生理论与实践相结合的能力

课程设计是《数据结构》课程课堂教学和课程实验的延续,是重要的一环。我院将其列为一门单独的考查课,主要是锻炼学生根据实际问题的要求,正确选择合理的逻辑结构,并采用适当的物理结构,解决实际问题的能力;更深层次的目标则是希望学生能够针对实际问题选择、扩展甚至设计全新的数据结构,然后设计相应的存储结构并加以实现,从而最终完成问题的求解。由此可以看出,课程设计环节是一个融会贯通的过程,是不能通过课程实验完成的,也不可能在课堂教学中就建立完整的意识。所以在具体的课程设计实践教学环节中,一定要让学生充分认识课程设计的重要性;通过给定学生不同的求解问题,让学生培养应用数据结构基本知识来分析问题、解决问题的全局意识;训练学生从系统的、规范的观点来进行计算机问题的分析、设计、编码测试等。总之,课程设计要有利于锻炼学生理论与实践相结合的能力。

4.结语

我针对《数据结构》课程的特点,分析了教学效果不佳的成因;并结合实践,总结了从做好课程衔接、教学方式的合理运用、课程实验设计与安排、通过课程设计锻炼学生理论与实践相结合的能力四个方面,尝试对《数据结构》课程进行教学改革。

参考文献:

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

[2]叶双,吴清江等.提高“数据结构”课程教学效果的方法初探[J].计算机教育,2009,(11).

[3]郝宗波.数据结构课程教学改革探讨[J].计算机教育,2011,(2).

[4]朱小梅,杨先凤等.数据结构课程教学方法探析[J].探索研究,2011,(5).

[5]邱保志.多媒体技术在《数据结构》课程教学中的应用研究[J].廊坊师范学院学报(自然科学版),2010,(2).

数据结构课程设计篇7

【关键词】数据结构 重点课程 知识体系 模式

【中***分类号】G642 【文献标识码】A 【文章编号】1006-9682(2012)02-0013-02

【Abstract】The Data Structure is the core course of computer science and technology, this article analyze the problem when study Data Structure and the knowledge system of Data Structure, put forward some key problem and the measure that the Course Construct for Data structure need to solve.

【Key words】Data Structure Key Course Knowledge system Mode

一、引 言

在人才培养中,课程建设是关键。教什么,如何教是教学过程中首先要解决的问题。在计算机科学与技术专业培养计划中有若干核心课程,“数据结构”是最重要的专业基础和核心课程之一。学习、理解和掌握好这门课程,对于学生个人编程能力的锻炼和编程风格的培养起着至关重要的作用。然而本课程具有一定的复杂性和抽象性,面对扩招后的学生,教学难度比较大。特别对培养应用型专业人才的地方院校来说,如何让学生更好理解“数据结构”的内涵及其相应的知识点,为相应的编程技能服务,是对“数据结构”课程进行重点建设的主要任务。

二、数据结构的知识体系[1、2]

把现实世界的问题用计算机来进行解决时,首先要解决现实世界如何用数据来描述。“数据结构”指的是数据之间的关系,包括数据之间的逻辑关系、数据在计算机中的存储方式及其相应的运算。因此“数据结构”的知识体系也围绕这三个方面而展开。如***1所示,分别是数据的逻辑结构、存储结构、基本运算、相应的算法以及算法复杂性分析。“数据结构”中具体的知识体系结构按三个基本知识点(数据的逻辑结构、数据的存储结构和运算实现)来组织知识,数据结构三点一线知识结构见***1,由此而构建的知识体系见***2。

在整个数据结构的知识体系中,在介绍线性表、串、数组和广义表(线性结构)、树和二叉树(树形结构)和***(***结构)知识点的基础上,以数据组织的两种存储结构顺序结构(连续存储结构)和链式结构(离散存储结构)为贯穿整个课程的两条主线,注重培养学生掌握各个知识点之间的联系,形成数据结构的理论教学;在数据结构的实验教学方面,同样采用顺序和链式两种存储结构为主线,实现线性表、树、***等各个知识点数据的组织和算法的设计来实现;最后将理论和实验两者结合起来进行数据结构课程的课程设计实践,进一步提高学生解决实际问题的能力。

三、数据结构重点课程建设

数据结构课程的建设应围绕学生学习中遇到的问题和数据结构所要传授的知识点和解决的问题进行展开,着重解决以下几个方面的问题:

1.分层次展开教学

分层次展开教学,包括教学内容的分层次,作业题目的分层次,实践环节的分层次。针对学生的兴趣、理解能力和接受能力不同,将来的工作岗位也不同,在教学内容上可以分层次对待。每一章节的内容都可以分成基础部分和提高部分,让不同程度的学生自主选择。其中基础部分是教学大纲上必须完成的重要内容,而提高部分可以供基础较好的学生选学。学习方式除了课堂教学之外,还可以尝试课后答疑、网络课件共享、网上论坛、自学等多种方式,充分调动学生学习的自觉性。在作业题目的分层次上,充分利用网络,在布置作业的过程中,可以根据学生的实际情况,布置一定量的基础习题,同时布置一定量的难度较高的习题。对于基础习题,可以要求每一位学生都要完成,而对于难度较高的习题可以供学习基础较好的学生选做。实践环节分层次,数据结构课程上机实践需要用程序设计语言来编写程序,对学生的编程能力有很高的要求。由于学生的编程能力不同,可以布置不同难度的课题供学生选做。比如对于“栈和队列”一章的上机实验,一般学生只要求做“数制转换程序”、“括号匹配程序”等比较基础的练习,让他们通过这些练习充分了解堆栈的特点和基本应用;而对于学习基础较好的学生可以选做“迷宫问题”、“算术表达式求解问题”、“八皇后问题”等难度较高的题目,充分训练他们的编程能力。

2.课程之间的协同教学[5]

数据结构的前导课程是高等数据和程序设计语言,其后导课程包括数据库原理、软件工程及系统开发等。在教学过程中,必须融合相关的知识点,因此要求教学过程实现协同教学,包括师师协同、师生协同、生生协同几个关键环节的协同。在师师协同教学的实践过程中,组成软件开发设计教师群,采用即时聊天工具和论坛等,交流教学习心得和对知识的连续性进行融合和沟通。采用“责任教授+主讲教师+实验辅导教师”的教师团队,采用“讲授+分析+案例+演示+大型作业+实验+查阅资料及撰写综述报告+小课题”的教学模式,改善这类综合性课程“难教”、“难学”的状况。

3.完整的实验体系教学

全面的实验内容、实验过程全程指导、严格的考核体系是本课程实践环节的亮点。整个实验课程体系由精心设计的基础性实验和鼓励学生创新的综合设计实验两部分组成。[3~4]基础性实验主要是一些预先设计好的实验,通过学生的实际操作,加深对课程所讲授的基本原理、技术和方法等知识点的理解,同时,能够让学生掌握一些具体的开发工具及环境。基础性实验是一组实验集,包括了必做的和根据个人的兴趣选做的。诸如线性表、栈和队列、串、数组和广义表、树和二叉树及***等。综合实验是启发式的引导性实验,主要目的在于培养学生对课程所学知识的综合运用能力和创新能力。由学生结合本课程内容以及前导实验,充分发挥主观能动性,***设计并实现具有一定演示度的应用系统,原则上不限制硬件和软件平台。考虑到学生水平差异,给出了一些备选方向,鼓励和引导学生积极提出原创性的设计内容。对于基础性实验,要求每个学生***完成,实验前要求提交实验预习报告,实验过程中给出实现结果,实验后要求提交实验报告。对于综合设计实验,以兴趣小组方式组织,每个小组3~4人,要求每个小组都要提交项目申请书,经过答辩、确认技术路线可行后,进入实现实验阶段,实验完成后,提供关于实验的课程设计和实验报告。在整个实验过程中由课程教师和助教一起完成实验指导。

4.建设的具体实施办法

(1)完善课程网站。实现所有教案和课件全部电子化,具有较好的多媒体效果,并放在网站上。实现教学手段的电子化与网络化,包括网上作业的与提交、网上小测验、网上辅导与答疑等。

(2)建设开放性实验室。在数据结构的教学实践中,加强了学生参加ACM比赛项目的教学和培训,提高了学生分析算法的能力,从这几年的教学实践来看,学生对以应用项目开发相结合的这种教学与实践相结合的模式非常感兴趣,尤其在综合实验中表现出很高的热情和积极性,所投入的精力和时间已远远超出课程的要求,教学效果非常显著。这促成了我们建设开放实验室的想法,即该课程的实验教学做到实验时间、实验内容和实验器材对学生的真正开放,使学生能够理论与实践相结合、验证型实验与设计型实验相结合、课内与课外相结合。当然在开放实验室下的课程辅导、监管、考核方式都需要新的探索。开放实验室将通过学校的教改项目支持来完成。

(3)逐步构建第二课堂――电子教室。数据结构学习的目的是为该项目开发服务,除了基本的数据结构描述,更重要的是数据处理的算法分析,由于课时等条件限制,课堂上不可能覆盖很多内容,为了保证课程的广度和深度,往往需要学生课外学习和掌握一定的知识。因此,我们计划逐步建立第二课堂――电子教室,该教室包括多个专题(如***像处理,ACM,智能机器),学生根据自己的时间和兴趣选择,并在网上交互学习。电子教室的建设将依托学院教改项目。

四、小 结

在数据结构课程建设中应该遵循:系统论、团队论、发展创新论和实践论原则。我们认为“数据结构”课程的建设不是孤立的事件,应将其放在系统中进行建设。还应将其与计算机专业建设相结合;课程建设应是课程组全体教师共同的事情,优秀课程或精品课程必须要提倡团队精神,建设一个优秀的团体。课程建设中所形成的基本资料:课程大纲、教学日历、实验大纲、教材和实验资料,不能一劳永逸、一成不变,课程建设应该在发展和创新方面下工夫,使课程内容跟上计算机科学技术发展的步伐,使教学手段、方法不断更新,使课程建设充满活力。数据结构是一门实践强的课程,注重实践应从两个角度来考虑,一方面要注重“数据结构”课程的实践教学环节,我们在实践教学的改革和实验方面作了大量实质性工作,如实验指导书的编写和不断改写、实验平台和程序设计语言的更新以及“数据结构实验教学系统”的开发等。另一方面课程建设也是一个艰苦细致的过程,仅有好的设想和主意是不够的,还需要教师去实践,如编写教案、教材、教辅资料,建设和维护网站,撰写论文等。还要在实践之后认真分析总结。

参考文献

1 严蔚敏、吴伟民.数据结构[M].北京:清华大学出版社,2005.4

2 张济础.数据结构课程的体系结构和学习方法[J].上海第二工业大学学报,2005(22):37~42

3 白伟华.数据结构课程教学方法的实践与探索[J].电脑知识与技术,2005(17):5~7

数据结构课程设计篇8

关键词:程序设计;教学改革;实践能力

中***分类号: G642文献标识码:A文章编号:1009-3044(2012)02-0366-02

Practice on the Teaching of the Programing Course

YUAN Hui-yong, YANG Si-qing, YI Ye-qing

(Department of Computer, Hunan Institute of Humanities, Science and Technology, Loudi 417000, China)

Abstract: This paper first analyses the problem in teaching of "C Language"," Data Structure" and "Algorithm Design and Analysis", and then propose a reform of teaching by improving teaching method, integrating teaching content and strengthening practice teaching. Results show that the reform of teaching can effectively stimulate students interest in learning, improve the efficiency of learning and the ability of programming.

Key words:programming; reform of teaching; ability of practice

1概述

目前C语言程序设计、数据结构、算法分析与设计是计算机及其相关专业中非常重要的专业课程。在以往教学中,这三门课程采用相对***、分开授课的方式,导致课程内容脱节与重复,教学效果差,学习完三门课程后却不能编写程序的大有人在。这三门课程都以培养学生解决实际问题的程序设计能力为共同目标,因此,如何将三门课程有机地结合起来,构建程序设计系列课程的新体系,整合教学内容,改进教学方法,切实提升学生的程序设计能力,成了当前计算机专业教学改革中亟待解决的问题。

2教学中存在的问题

在传统的教学中,C语言程序设计、数据结构、算法分析与设计三门课程的分开授课,课程知识没有整合,对课程知识中存在重叠的内容,只是做简单的重复讲解(如C语言和数据结构课程中都有数组这个教学内容),教学深度不够。教学中注重讲授基本理论,忽略了程序设计过程中涉及的方法和技术(如算法分析与设计课程通常是将已有的经典算法在数学模型和数据结构上给学生解释),理论教学与实践教学结合不够紧密(如数据结构在讲授了某种抽象的数据关系和在计算机中的表示与实现后,并没有将这种结构用到解决实际问题中去),造成有些学生虽然具备了一定的理论基础,但由于实践教学薄弱,动手能力差。

3具体改革措施

我们改变了以往C语言程序设计、数据结构、算法分析与设计分开授课的模式,而是将这三门课程作为一个整体,以培养学生解决实际问题的程序设计能力为目标,从组织教学内容、改进教学方法、突出实践教学等方面进行教学改革与实践。

3.1整合教学内容

C语言程序设计是数据结构的前导课程之一,学生对它的掌握程度直接关系到数据结构课程的教学效果。算法分析与设计是计算机专业程序设计类的核心课程,在学习该课程之前,要求学生们掌握了基本的数据结构知识,能熟练运用一门或多门编程语言,并具备一定的编程经验。

我校原来的C语言、数据结构和算法分析与设计三门课程是相对***、分开授课的,学习效果不理想。我们将这三门课程的知识进行整合,采用同一教师授课,做到了前导课、后续课的有机衔接,并重新制定了三门课程的教学计划,以知识点为单元,将这三 门课程很好地结合起来。在C语言的教学中,以C语言为主线,适当穿插数据结构中的相关内容,使C语言与数据结构有机地结合在一起,如我们将C语言中的数组和数据结构中的直接插入排序、冒泡排序、简单选择排序、顺序查找、折半查找方法放在一个知识单元中。在数据结构教学中,穿插了算法分析与设计的有关知识,如在讲述哈夫曼树和***的最小生成树时,穿插了讲述了贪心算法,在讲述***的最短路径时介绍了动态规划算法。

我们不再把C语言当做一门语言来讲解,加强了数据结构、算法设计、逻辑思维和编程方法的教学。数据结构课程不再只注重讲授抽象的数据关系和存储结构,而要求学生用C语言编程实现各种算法,并结合实际应用,在ACM/ICPC***评测系统上完成相应的练习题目,学生不再感到枯燥无味,不仅较好地解决了数据结构教学中学生上机困难的问题,也提高了学生的程序设计能力。在算法分析与设计课程教学中,我们选择一些难度适中、能结合实际问题和相关课程的知识来讲解,使学生既能理解,又能拓展创新。

3.2改进教学方法

我校属于应用型本科院校,其教育目标着重于培养具有实际工作能力的技术型和应用型人才。在C语言的教学中我们采用了“案例”教学方法,从日常生活中选择能典型反映教学内容的案例,所选案例难度适中并能反映多个知识点。如选用了“学生的成绩管理”,该案例覆盖了C语言中的循环结构与数组,涉及数据结构中的排序与查找。在该案例中穿插介绍了数据结构课程中的直接插入排序、冒泡排序、简单选择排序和顺序查找;通过介绍C++中的排序函数qsort()激发学生自觉地学习C++标准模版库;并提出如何保存学生信息以避免重复输入数据的问题,引导学生自学C语言中的文件操作,培养学生的再学习能力。在算法分析与设计课程的教学中,我们采用了“任务驱动”教学方法,将具体的算法设计策略融入到一些“任务”中,课堂教学以任务为主,引导学生利用算法设计策略探索解决方案,在课后的实践环节,将结合实际应用且融入了知识点的任务放到ACM/ICPC***评测系统上,让学生在课后根据任务描述,自主探索问题解决方案,并提交程序代码。

在教学过程中,对典型例题力求讲透彻,并提出问题给学生思考。如斐波拉契数列,讲解了分别使用变量交换的循环结构、使用数组的循环结构和递归三种编程方法,并比较了三种方法的优缺点,使学生深刻体会到了采用递归求解斐波拉契数列的低效,引导学生理解使用数组的高效是基于算法分析与设计课程中的动态规划的思想,并且穿插介绍了数据结构课程中算法的时间复杂度与空间复杂度的度量;再提出大斐波拉契数列的求解问题,介绍使用数组进行高精度计算以及使用矩阵和二分法的求解方法,激发了学生的学习积极性。在例题的讲解过程中,充分利用多媒体教学手段,加强了例题讲解过程中的现场调试与分析,鼓励学生对具体问题进行分析和研究,培养学生的逻辑分析和判断能力,重视上机训练,养成良好的编程习惯。

3.3加强实验教学

这三门课程都是理论与实践并重的课程,在教学中必须将理论教学与实践教学紧密结合。我们从以下几个方面来加强实验教学:

1)重新编写实验指导书。按照教学内容的知识点,综合可操作性、趣味性和适当的难度,编写了适合教学要求的实验指导书,既保证了实验的可完成性,又增强了学生的兴趣。

2)建立***题库。在ACM/ICPC***评测系统上开设了C语言程序设计、数据结构、算法分析与设计的专题训练,每个专栏按照教学知识点安排了不同难度的练习题,学生可以根据自身的能力,完成相应等级的题目,在探索与解决问题的过程中获得学习成就感。

3)组织程序设计比赛。ACM/ICPC***评测系统上安排了与教学知识点相关的竞赛真题,鼓励学生组队、按照比赛规程进行模拟比赛。通过比赛,学生对教学知识点有了更深入的理解,不仅增强了学生的实践动手能力,提高了学习兴趣和积极性,也使学生提前了解ACM比赛的规则和比赛真题,训练了学生的参与意识、竞争意识和团队精神,为以后组织学生参加省程序设计比赛打下良好的基础。

4)开设课程设计。课程设计的题目以典型的问题或实际的工程为主,如数据结构课程选用了“教务计划编制问题”,让学生运用***论中的拓扑排序来求解这个实际问题。通过课程设计,培养了学生综合运用所学知识进行分析和解决实际问题的能力,使学生不仅学到了解决问题的办法,同时加深了理论的理解与掌握,做到了理论教学与实践紧密结合。

3.4改革考核与评分标准

考试作为课程教学的一个重要环节,对学生的学习具有明显的导向作用。这三门课程原来的考核分为平时成绩和期末考试,这样的考核方式很难考察学生的实践能力,导致大部分学生只注重期末考试,而忽略学习过程,很难有效的提高学生的创新能力和实践能力。我们认为这三门课程的考核应着重考核学生的程序设计能力,而不是死记硬背一些基础知识。为此,我们引入了ACM/ ICPC***评测系统及,对课程的考核进行了大胆改革,评分标准也作了修改,提高实验考核成绩在课程总评成绩中的比重,以此来引导学生认真对待实验和课程设计,切实提高学生的实践动手能力。

4结束语

实践证明,将C语言程序设计、数据结构、算法分析与设计这三门课程有机结合的教学改革,能够很好地激发学生的学习兴趣,学生在掌握基本理论和知识的同时,程序设计能力、数据结构和算法设计的应用能力也得到了很好的培养,我校学生在近二年的湖南省程序设计比赛中均取得了较好的成绩。

参考文献:

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

数据结构课程设计篇9

关键词:教育技术学专业;软件开发;课程体系

作者简介:董晓丽(1976-),女,山西太原人,中北大学电子与计算机科学技术学院,讲师。(山西 太原 030051)

中***分类号:G642 文献标识码:A 文章编号:1007-0079(2013)10-0117-02

一、教育技术专业概述

教育技术学专业是教育学和技术学相互交叉、相互作用而形成的学科。目前在我国开办教育技术学本科专业的院校已经从师范类院校扩展到综合性大学、理工类院校。开设教育技术学专业的多数高校将教育技术学本科人才培养方向之一定位为教育软件与知识工程方向,该方向着重培养多媒体素材的设计与开发、教育软件设计与开发、网络课程设计与开发以及人力绩效开发与知识管理方面的人才。就专业培养方向来看,各类软件的设计与开发都要求本专业学生有很强的计算机应用(开发和实践)能力,也即计算机应用能力培养在教育技术学专业中占有重要的地位。笔者所在院校为理工类院校,对近几届毕业生的软件开发能力进行调查分析,学生普遍感觉大学四年学了众多计算机类课程,到毕业设计的时候还是不会编程,大四最后一个学期才开始边学编程技术边做毕业设计题目。究其原因,由于教育技术学科是综合性的应用学科,不可避免地在课程设置上存在一些问题:课程开设庞杂,开设多门高级语言程序设计类课程,知识体系有广度没有深度,导致学生学而不精;课程设置缺乏系统性,课程教学内容不连贯或者重复教学;在教学过程中注重理论教学而忽视学生实践动手能力的培养,导致学生编程能力差;核心课程知识陈旧,与现实的教育技术实践应用需求脱节,与现实的计算机发展技术相脱节。课程设置是教学计划的核心,决定着学校的教学内容和学生的知识结构,直接关系到人才的培养质量。为实现应用型人才培养目标,研究并建立适合教育技术学本科专业的计算机软件开发类课程体系,切实提高该专业学生的计算机应用能力是目前重要的课题。

教学技术学专业是一个跨学科的专业,本科生在四年中所能接收的信息量是有限的,不可能将交叉学科的所有系统知识都纳入学习的范围,因此在明确培养目标的前提下,设置计算类课程时不应该“杂而全”,而应该是“专而精”;其次要注意课程与课程之间有效的衔接,避免前后脱节;再次应注意同市场需求以及计算机学科发展结合起来,开设的课程符合社会发展需求;最后突出实践能力,加强动手能力的培养。教育技术学专业本身是一门实践性很强的学科,人才的培养本着学以致用、以学促用理念。

二、课程体系建设

教育技术学本科专业计算机软件开发类课程体系建设目的是让学生熟练掌握一至两门编程语言,熟悉相关开发方法、工具和平台,综合运用所学知识去解决实际问题。鉴于目前主流的编程技术有.NET和Java编程,建立以“C-C#-Java”语言类课程为主线的课程体系,从初级到高级、由简单到复杂,循序渐进逐步提高学生的软件开发能力。

Java语言是面向对象的编程语言,也是目前阶段开发应用程序的首选语言,但是对于大一新生来说,直接接触面向对象编程思想有一定的难度,因此在大学第一学期仍然选择C语言作为程序设计的入门语言,有了C语言的基础,跳跃到C#或Java就十分容易,因为许多语法是通用的。C#是从C/C++派生来的一种简单、现代、面向对象的高级程序设计语言,由Microsoft公司设计运行于.NET框架之上,它具有语法简单、表达力强的特点,对于低年级且又是非计算机专业的学生来说,学习该语言相对比较容易,所以,在第二阶段选择学习C#语言。Java是一种可以编写跨平台应用软件的面向对象的程序设计语言,自1995年由Sun公司推出,就迅速成为全球主流的编程语言,Java基本语法规则和C语言类似,优点之一是去掉了C语言中难学的指针,有助于学习者理解和掌握。但是学习Java语言类开发技术较C#语言有一定的难度,虽然这两种编程语言都为面向对象的程序设计语言。基于上述分析,研究并建立的课程体系为学生第一学期学习C语言之后,在后续的学期过渡到面向对象的程序设计语言。围绕这三门语言类课程,再设计其余计算机软件开发类课程如何衔接。设计的课程体系结构如表1所示。

表1 课程体系结构

开课时间 必修课 大型实验

第1学期 C语言程序设计 无

第2学期 C#可视化程序设计 C#可视化程序课程设计

第3学期 数据结构 数据结构课程设计

第4学期 数据库原理及应用

(面向对象程序程序设计Java) 数据库课程设计

第5学期 Web应用系统开发(JSP) Web应用系统课程设计

第6学期 Java网络编程 Java网络编程课程设计

第7学期 J2EE企业级应用开发 J2EE企业级应用开发课程设计

第8学期 毕业设计

第一学期主修C语言程序设计,掌握面向过程的程序设计思想。第二学期主修C#可视化程序设计,这里注意的是本课程内容包括两部分:一是C#语言基础介绍,二是.NET技术,可视化界面的设计部分。通过Windows界面的设计,学生获得面向对象的感性认识以及认识到编程的实用性,从而提高编程兴趣,有助于后续学期进行软件开发类其他课程的学习。第三学期主修数据结构,目前数据结构课程的教材有C、C++以及Java语言版,由于到此阶段学生未接触Java语言,所以选择C语言版的,学生可用C语言来实现数据结构中的算法,对于Visual C#.NET掌握较好的学生,在数据结构课程设计时可选择用C#语言实现数据结构中描述的算法。第四学期主修数据库原理及应用课程,在讲授数据库编程内容时,由于学生在前面学期已经学习过可视化的程序设计(应用系统前台界面的设计),即已经掌握.NET开发平台的使用,可以重点讲述利用技术如何进行数据库的操作。第四学期同时开设面向对象程序设计(Java语言)课程,为后续课程打基础。第五学期直到第七学期每学期均开设Java语言应用开发类的一门课程,具体包括Web应用系统开发(JSP)、Java网络编程、J2EE企业级应用开发。每学期均安排相应课程的课程设计,有助于消化所学知识,同时锻炼和提高学生分析、设计、编程能力。第八学期学生主要任务是毕业设计,如果是软件开发类题目,那么学生可以利用已经学习过的主流技术.NET或J2EE来完成。

综上所述,将教育技术学专业学生计算机应用(开发和实践)能力的培养分为两个阶段:在大一、大二阶段,掌握C语言结构化编程、面向对象编程(C#)、***形用户界面编程、数据结构及算法、数据库编程,为专业培养目标打下编程基础,该阶段注重.NET技术开发;大三、大四阶段,掌握面向对象编程(Java)、小型Web应用系统的开发(JSP)、Java网络编程、J2EE企业级应用开发,该阶段注重Java程序开发。

以上课程体系安排使学生在大学四年的前两年基本会利用.NET技术进行一些简单小型应用软件项目的开发,如学生对.NET技术感兴趣的话,可以利用大学四年的剩余学期边学习新的课程,边利用业余时间拓展自己的.NET编程技术。学生从第四学期(即大二阶段)开始学习Java相关课程,即Java应用开发阶段,学生利用在校的两年时间主修Java软件类开发课程,学习主流Java开发平台和框架的使用,最后掌握企业级应用系统的开发,逐步提高学生的软件开发能力。这样,大学四年软件开发类课程不断线,且从第二学期开始,每学期都安排课程设计,通过课内实验以及课程设计实践提高学生的软件开发能力,解决学生学习了众多编程语言却不会编程的问题,学生在毕业设计前具备***开发应用系统的能力,从而提升该专业学生就业竞争力。

三、课程内容解析

以下对课程主要教学内容及教学目标作简要阐述。

1.C语言程序设计基础

掌握C语言的基本结构、各种数据类型、控制流程、函数、数组、指针和结构体的语法及语义,使学生了解结构化程序设计思想,学会用结构化方法编写程序,初步具备解决实际问题的能力。

2.C#可视化程序设计

掌握C#高级语言基础、Visual Studio 2008集成开发环境的使用、Windows界面控件的使用、事件驱动的编程机制,使学生获得面向对象的感性认识,初步拥有Windows应用编程能力。

3.数据结构

掌握数据结构的基本概念和各种基本的数据结构,包括数据的逻辑结构(线性表、堆栈和队列、广义表和字符串、树与二叉树、***、文件等)、存储结构(顺序存储、链式存储)以及在这两种结构基础上对数据实施的基本操作(算法)的设计与分析。

4.数据库原理及应用

掌握数据库系统的一般概念、数据模型、关系模型、SQL语言、数据库安全性、完整性、关系数据库理论、数据库设计、数据库编程、数据库管理系统的使用以及运用开发平台开发数据库应用系统的方法,为从事数据库应用开发打下基础。

5.面向对象程序设计(Java)

掌握Java语言基础、面向对象程序设计思想(抽象、封装、类、继承与多态)、工具类、***形界面编程、异常处理、文件输入输出、数据库编程、Java Applet 编程、开发环境与工具的使用等。着重培养学生对Java 编程思想的体会,为进一步学习Java 语言打好基础。

6.Web应用系统开发(JSP)

掌握JSP软件体系结构、运行环境的安装与配置、JSP基础、JSP常用内置对象、JSP与JavaBean、JSP操作数据库、Java Servlet技术,使学生掌握JSP基本理论知识,能够运用JSP进行Web小型应用系统开发。

7.Java网络编程

掌握网络编程基础知识,基于TCP、UDP以及FTP等应用层协议的Java应用开发,使学生掌握“基于协议”的网络程序开发方式。

8.J2EE企业级应用开发

掌握J2EE的体系结构、Servlet、E***以及利用开源框架(Struts、Spring和Hibernate)进行J2EE程序开发,使学生掌握基于J2EE的企业级应用系统的开发方法。

四、实践教学体系

与上述课程体系配套的实践教学体系包括每门课程的课内实验和课程设计。课内实验部分主要是基础性实验和验证型实验,重点加深学生对知识的理解,掌握基本技术和方法。从第二学期开始,每学期都安排大型的课程设计,课程设计需要综合一门或多门课程的内容。C#可视化程序课程设计,体验C#的编程思想以及组件开发原理,利用Visual Studio2008集成开发环境来完成应用系统的设计,初步体会面向对象程序开发的思想。数据结构课程设计主要针对具体问题进行数据结构与算法设计,并用C语言或C#语言实现。数据库课程设计主要针对具体问题,按照数据库设计的步骤进行,学生可利用已掌握的.NET技术实现具体数据库应用系统。本课程设计涉及技术和数据库两门课程的知识,是对学生综合分析、设计以及编程能力的检验。Web应用系统开发(JSP) 针对具体问题,运用JSP技术及JDBC数据库访问技术,利用开发平台实现小型的Web应用系统,主要检验学生运用JSP技术解决实际问题的能力。Java网络编程课程设计主要检验学生“基于协议”的网络程序开发能力,即学生运用已掌握的网络编程技术进行基于TCP、UDP、FTP等协议的小型应用软件的设计与开发。J2EE企业级应用开发课程设计主要针对Java企业级架构开发,学生使用Struts、Spring和Hibernate进行整合开发Web程序。在完成课程设计任务过程中,学生需要查阅课外知识,有助于培养学生的自学

能力,同时锻炼和提高学生综合分析、设计和编程能力,完整体验到一个应用系统开发的全过程,巩固了已学的知识,为毕业设计和就业打下良好的编程基础。

五、与课程体系相关的教学改革

1.改革教学手段

采用案例教学法。由于学生缺乏实际开发经验,为了充分调动非计算机专业学生学习软件编程积极性,在上课前期就强调应用,精心准备一些与课程相关的应用软件系统案例,使学生从接触课程开始就认识到学习编程的实用性,从而提高学习的兴趣,有利于整个教学过程的实施。

2.改革实践教学环节

转变“重理论、轻实践”的观念,建议采取课堂教学与实验教学相结合、课内与课外实践相结合的教学方法。教师可将课堂教学中技术性、操作性、应用性比较强的内容直接在实验室中进行教学,采取边讲边练的教学方法,使学生在实际操作中掌握相关的知识、技能和方法;为了更好地培养学生的实践能力,应积极加强课外实践活动,例如参与其他院系的网络精品课程建设、教学网站的设计与开发和教育游戏软件的设计与开发等,这些课题本身就属于教育技术学专业应用研究课题,学生在参与过程中,不仅锻炼了动手编程、解决问题的能力,同时还锻炼了与他人合作解决问题的能力,使人才培养方案与社会需求结合,做到学以致用。

3.改革实践教学考核方式

实验考核不但可以考核学生对知识的掌握程度,还能够激发学生的学习积极性,对学生有很大的引导作用。实验部分分数比例设置过低,会使一些学生轻视实践环节,所以适当提高实验分数比例是必要的,且对于不同类型的实验,应采用不同的考核方式。

六、结束语

教育技术学专业是一个交叉学科,学生计算机应用能力的培养在该专业的培养方案中占有重要的地位,加强学生计算机软件开发动手能力也是当前提升学生就业竞争力采取的必要措施。在本文中,主要探讨了教育技术学软件开发类课程体系的建设,通过研究,建立了以“C-C#-Java”语言类课程为主线的教学体系,突出的是该专业学生实践动手编程能力的培养,希望能够为教学技术学本科专业的计算机类课程教学提供一些帮助和启示。教育技术学专业学生计算机应用能力人才的培养是一个循序渐进的过程,该专业计算机类课程体系的改革研究,仍然需要在实践中不断深入探索和完善。

参考文献:

[1]文冬,周燕红,原福永.理工类院校教育技术学本科专业的发展思路[J].教学研究,2007,30(1):49-52.

[2]伍顺比,姜玲.关于教育技术学专业课程体系的思考[J].现代教育技术,2007,17(8):16-19.

[3]林玉琴.教育技术学本科专业课程设置刍议[J].中国电力教育,2010,(12):92-94.

数据结构课程设计篇10

关键词:数据结构;教学改革;教学手段

“数据结构”是计算机科学中的一门综合性专业基础课,是信息科学的核心课程,是研究非数值计算的程序设计问题中计算机操作对象以及它们之间的关系和操作等的一门学科。主要是培养学生分析数据、组织数据的能力。我校的部分专业,如资信、电子以及管理等专业都开设了数据结构课程;部分没有开设本课程的院系学生有时也主动旁听数据结构课程。由于数据结构具有较强的理论性和实践性,不同专业的学生特别是非计算机专业学生在教学过程中,无论是理论课程还是实践过程确实存在一定的困难。笔者作为该课程的主讲教师,结合自己在数据结构教学中的一些体会,谈谈对目前教改的认识。

1数据结构教学中存在的问题

1.1前导课程“欠债”较多

“数据结构”的前导基础课程是“C语言程序设计”和“离散数学”。我校有多个院系开设C语言课程,不同院系所开设的“C语言程序设计”的教学内容和教学要求并不完全一致。许多非计算机专业的学生一般在学习本课程之前并未经过严格的程序设计基础训练,教师为了教学进度采取“填鸭”式的教学方式,导致学生对C语言理解不深,特别是指针、结构体、联合体以及函数等知识点,而这些又传递影响到数据结构的教学。另外“离散数学”是学习“数据结构”的基础课程之一,但是由于课时不足,目前我校非计算机专业均未开设这门课。

1.2教学与专业背景脱节

“数据结构”是一门理论性、抽象性很强的课程,教学中一定要将课程内容与学生专业背景相融合,让学生结合专业知识加深对理论的理解,同时也让学生真正体会到数据结构理论是为专业实践服务的。但在目前的教学实践中,教师只注重学生课堂理论知识的掌握,在面向不同的专业的学生时采用相同的教学案例,这使非计算机专业学生很难产生“共鸣”,教学效果自然达不到理想的目标。

1.3教学重点模糊

在目前的教学过程中,无论是计算机专业还是非计算机专业都没有结合专业着重加强相应的知识点的教学。如我校的地球物理与信息工程学院就包括了测井、勘探、摄影测量与遥感等学科方向,而数据处理在测量工作中是最重要的一个环节。对测量数据处理往往需要解大型的方程组,这涉及到稀疏线性方程的压缩存储问题,可以采用三元组顺序表和十字链表的方式。因此在测井专业的教学内容上,应该将稀疏矩阵作为一个重点内容,为后续专业知识的学习奠定一些基础。

1.4教学内容取舍不当

目前我校数据结构的教学内容基本相同,没有根据专业具体情况注意内容的取舍。计算机专业数据结构为56课时,并有16课时的课程设计;其他非计算机专业的数据结构课时为56课时,其中有8课时实验课,但没有数据结构课程设计。在这种的情况下,让学生系统地掌握数据结构的基本内容,在教学内容的选择上必须注意取舍,一些理论性太强,在专业内应用面不够广泛的内容就可以舍弃,如广义表、动态存储管理以及外部排序等内容。

2 “因专业施教”的教学过程研究

2.1加强以数据结构为核心的课程群建设

目前,国内高校在数据结构课程教学研究中的实验教学方法、教学模式和教学内容优化等方面取得了一些实践性成果,但在课程综合体系建设方面仍然有一些不足[1]。非计算机专业教学时尤其要强调数据结构与其他相关课程的紧密衔接,并将离散数学、数据库、操作系统、***形学、***像处理等课程的主要知识点分散、穿插、融入到数据结构的教学中,从而优化整个课程体系结构。

2.2面向不同专业学生的数据结构教学方法研究

教学是以学生为主体,教师为主导的过程。教学方法是否适当,是否适合教学对象,是影响教学效果的关键部分。现有的主要教学方法包括[2]:启发式教学法、任务驱动教学法、案例教学法以及讨论式教学法等。每种方法只适合应用于某些特定的情形,课题组根据不同的专业的教学内容和教学对象,采取了不同的教学方法。例如,计算机专业、电子专业的学生采用启发教学方法,教学中注意讲解知识点时要尽力去打破学生头脑中的“平静”,激发学生思维活动,引导学生提出问题、分析问题和解决问题,归纳总结出一般规律或概念[3]。这种方法注重培养学生的科学思维方式,激发学生学习的积极性和创新精神。根据多年的教学经验,石油勘探专业适合于任务驱动教学法。勘探专业具有很强的专业背景,教师根据勘探专业教学大纲要求,精心设计地震数据处理实例任务,将教材中每个章节的重点、难点内容专业化、具体化、形象化、采用任务驱动法对数据结构课程展开教学。管理专业以及测井专业采用案例教学法。围绕教师所提供的测井系统软件案例,学生在教师的引导下,积极进行阅读、思考、分析、讨论和实践,从而达到深刻理解问题的原理和本质,提高分析问题和解决问题的能力,养成探究性的学习态度的目的。我校案例教学具体实施地点在多媒体教室,学生每人配备一台机器,能够完成实时网络教学任务。

2.3面向不同专业学生的数据结构教学内容改革

针对不同院系制订合理的数据结构教学内容,评估教学内容的取舍方案,通过突出重点内容,充实数据结构的专业应用环节。例如,测井专业的教学内容除了稀疏矩阵的应用外,由于测井信息通道不断增加,传输的数据量越来越大,必须对采集的数据在传输前后分别进行压缩。哈夫曼编码在测井数据的无损压缩方面发挥着重要作用。另外,在勘探专业地质建模中,通常需要对大规模地震数据进行分析以发现地下潜在可能的油气资源。地震数据的存储,八叉树是一种有效的方法。最短路径在井间地震层析成像开发中发挥着重要作用。因此,在讲解二叉树的基础内容时,有必要扩展一些八叉树的知识;在讲解***的应用时要注意结合井间地震数据层析成像的实际例子。

2.4面向不同专业学生的数据结构实践教学改革

实践教学是课堂理论教学的延伸和补充。培养并提高学生的实践能力是数据结构课程的基本目标。不同专业学生学习的侧重点相同。例如,电子专业在学习计算机语言时侧重硬件方面的应用,缺乏计算机程序设计基础训练,软件工程的概念不强;管理专业、测井专业以及勘探专业学生具有较好的软件编程基础,但逻辑抽象能力特别是面向对象分析与设计能力欠缺。即便是同一专业的不同学生,他们的学习主动性和学习能力各不相同。如果采用“一刀切”式的尺度要求所有同学,往往起不到良好的教学效果。为了达到“因专业施教”的目的,在进行“数据结构”实践教学时,课题组采用层次化设计思想,把实验自下而上分为概念基础层、应用基础层、应用提高层和综合层四个层次[4]。在进行试验教学时,管理、电子专业同学以概念基础层、应用基础层实验为主,适当增加综合层设计题目,以提高学生软件工程的意识。如测井专业学生以应用基础层试验为主,以测井工程中的具体问题为背景,强调理论与实践的结合,使同学们体会到“数据结构”是一门抽象理论与实践紧密联系、非常有趣味的课程,从而激发同学们的学习兴趣;勘探专业学生实践教学围绕理论课的综合层设计任务展开,各任务之间要耦合紧密,形成循序渐进的梯度,组成一个“任务链”。将同学们分为3~4人一组,确定小组成员的角色与任务。在这个过程中教师应该提供必要的与勘探数据处理相关的学习资料、参考方法等,为学生完成任务提供资源支持,使学生透彻理解各种数据对象的特点,学会数据的组织方法和实现方法,选择合适的数据结构,甚至改造基本的数据结构,并进一步培养学生良好的程序设计能力。

3结语

“数据结构”这门课程在计算机科学与技术中的地位举足轻重,也是石油相关专业的一门必修课程。教师在教学过程中,应当积极探讨,寻找有效的教学方法,充分调动学生的学习积极性,提高学生的学习兴趣,才能使学生真正学好“数据结构”。在非计算机专业学时少以及前序课程不足等因素的限制下,完成数据结构课程的教学工作并取得满意的教学效果,是一个具有挑战性的课题。本文综合实际教学经验在教学方法和实验方法上提出了一些方法和原则,从我校多年的数据结构教学实践看,采取了这些措施和方法后,学生明显感到数据结构好学多了,教学效果得到了显著提高。

参考文献:

[1] 张铭,许卓群,杨冬青,等. 数据结构课程的知识体系和教学实践[J]. 计算机教育,2004(2):89-91.

[2] 蔡敏,郑尚志,梁宝华.“数据结构”课程教学改革之我见[J]. 计算机教育,2009(4):50-51.

[3] 刘红梅. 启发式教学法在数据结构教学中的应用[J]. 电脑知识与技术,2009(3):661-662.

[4] 张玉华,周克兰.“数据结构”分层次实验教学的探索与实践[J]. 计算机教育,2009(3):108-110.

Research on Teaching Reform of Data Structure According to Specialty

LIAN Yuanfeng, WANG Xin, LI Li

(Department of Computer Science and Technology, China University of Petroleum, Beijing 102249, China)

转载请注明出处学文网 » 数据结构课程设计10篇

学习

英语新课程标准10篇

阅读(22)

本文为您介绍英语新课程标准10篇,内容包括英语新课程标准摘抄,英语新课程标准题目以及答案。3、抽象的知识要具体化。在我国,英语教学的环境不是很好。现行的大学英语教材在一定程度上和目前与时俱进的现实生活脱节,而且对学生的心理和情

学习

商务英语专业课程10篇

阅读(18)

本文为您介绍商务英语专业课程10篇,内容包括商务英语初级培训课程,商务英语线上课程推荐。OnDesignoftheCourseEnglishListeningandSpeakingofBusinessEnglishMajorZHUFengbing(ForeignLanguageDepartment,Zh

学习

大学毕业论文开题报告10篇

阅读(25)

本文为您介绍大学毕业论文开题报告10篇,内容包括毕业论文开题报告研究方法,论文开题报告13篇。2.毕业设计(论文)起止时间2019年3月15日~2019年6月5日3.毕业设计(论文)所需资料及原始数据(指导教师选定部分)1)Boud,D.(ED.).DevelopingStud

学习

库管年终总结

阅读(15)

本文为您介绍库管年终总结,内容包括库管年终总结10分钟,成品库管员的年终总结。但是,随着时间的流逝,在我熟悉了库房流程之后,我就逐渐喜欢上了这份感觉,融入了这份工作。它让我感到既有压力,又有动力,既有成功之处,又有不足的地方。每天收到从

学习

教学年度总结

阅读(22)

本文为您介绍教学年度总结,内容包括初中教学年度总结,葫芦丝教学年度总结。期:___________2021年劳技教学年度总结时间过得真快,在平淡与忙碌中,一学期的工作就这样一晃而过,半年来,在学校和教研组正确领导、同学科教师的大力协作下,我顺利完

学习

第二学期自我总结模板

阅读(13)

本文为您介绍第二学期自我总结模板,内容包括第二学期自我总结,初二学期自我总结范文学生。所以,我就一直逃避着。试***找到可以一直躲避的港湾,让我可以只沉浸在自己创设的乌托邦里。现实的世界找不到这样的地方,只能在精神上寻找。我找到

学习

课程教材教学研究10篇

阅读(16)

本文为您介绍课程教材教学研究10篇,内容包括教材与教学研究方法案例分享,课程教学与研究论文。主办单位:云南省教育科学研究院;云南师范大学出版周期:月刊出版地址:云南省昆明市语种:中文开本:16***际刊号:1003-8787国内刊号:53-1149/G4邮发代

学习

教育研究生论文10篇

阅读(15)

本文为您介绍教育研究生论文10篇,内容包括教育类研究生论文资料整理,教育类研究生论文汇报。2体育教育改革实践中所存在的问题与解决对策2.1体育教育改革实践问题2.1.1师资力量薄弱影响研究生教育的发展哈工体育大学中的体育学教导教师

学习

研究生统计论文10篇

阅读(19)

本文为您介绍研究生统计论文10篇,内容包括研究生统计毕业论文题目,论文数据统计方法。收稿日期:2013-03-25作者简介:刘澜(1976-),铁岭卫生职业学院***书馆馆员;秦立国(1980-),铁岭卫生职业学院***书馆馆员。1前言任何国家卫生事业的最终目的都是

学习

统计学研究生论文10篇

阅读(18)

本文为您介绍统计学研究生论文10篇,内容包括统计学研究生论文题,统计学研究生毕业论文怎么写。2.引文分析方法***书馆的馆藏建设是由规划、选择、收集、整理、组织、保管等环节构成的系统工程,***书馆的馆藏建设水平可通过馆藏评价来衡量

学习

专科毕业论文开题报告10篇

阅读(15)

本文为您介绍专科毕业论文开题报告10篇,内容包括大专毕业论文开题报告,专科开题报告怎么写。一、目的通过对《民营企业财务风险诊断与防范》的选题,一是促使本人对民营企业财务管理有更深层次的理解,提高本人的对民营企业财务管理的认识

学习

电气自动化专业课程10篇

阅读(17)

本文为您介绍电气自动化专业课程10篇,内容包括电气自动化课程有哪些,电气自动化专业学些什么课程。1高职电气自动化专业课程现状现如今,社会所需要的高职人才是综合型技术人才,应当能适应社会发展和建设。技术型人才与科研型人才不同,必须

学习

统计研究生论文10篇

阅读(12)

本文为您介绍统计研究生论文10篇,内容包括统计研究生论文书籍推荐,统计研究生的毕业论文题目。收稿日期:2013-03-25作者简介:刘澜(1976-),铁岭卫生职业学院***书馆馆员;秦立国(1980-),铁岭卫生职业学院***书馆馆员。1前言任何国家卫生事业的最终

学习

it课程10篇

阅读(13)

本文为您介绍it课程10篇,内容包括it教程全套大课,it培训课程。ComparativeStudyofImplementationofProgrammingCourseinITandICTCurriculum//LiuJia,LiYongAbstractByanalyzingInforma

学习

数学课程设计10篇

阅读(23)

本文为您介绍数学课程设计10篇,内容包括数学课程设计模板内容,数学教学设计十篇。《标准》是教材编写、教师教学和考试命题的依据,是教师们设计教学活动的指导性文件。教师在教学设计前要与课程标准进行高质量的对话,特别是要全面深入地了

学习

实训课程设计10篇

阅读(30)

本文为您介绍实训课程设计10篇,内容包括实训课程的设计思路怎么写,课程设计实训任务。单项实训强调的是实训中的“点”,紧扣会计核算基本流程中的三个基本环节:凭证-账簿-报表,每个环节的处理上要学生全程动手,处理每一个环节的每一点内容,所

学习

会计课程设计10篇

阅读(14)

本文为您介绍会计课程设计10篇,内容包括会计的课程设计怎么做,会计基础课程设计范文。收录日期:2012年3月22日网络课程建设作为教学的一个重要部分,教学的设计很重要。以会计专业为例,会计专业网络课程主要是指在会计专业课的教学过程中把

学习

课程设计实践10篇

阅读(19)

本文为您介绍课程设计实践10篇,内容包括劳动综合实践课程设计,课程设计日志10篇。当项目规划设计完成后,即可进入网络课程系统选择阶段。网络课程系统由网站管理和课程管理两大核心功能模块构成,详细功能如表2所示。[4]评价网络课程系统的关

学习

课程设计研究10篇

阅读(12)

本文为您介绍课程设计研究10篇,内容包括网络零售课程设计研究意义,c语言课程设计的研究方法。一、基于公理设计理论的工业设计课程模式公理设计(AD)是一种哲学方***,其目标是将用户需求进行工程化语言的抽象处理,进而用科学、缜密的逻辑思维

学习

网络课程设计10篇

阅读(21)

本文为您介绍网络课程设计10篇,内容包括网络课程设计方案案例,网络综合课程设计总结与心得。作者简介:张帆(1981-),男,吉林长春人,中州大学信息工程学院助教,研究方向为数据库与Web智能。1JSP网络课程1.1JSP语言的特点JSP全名JavaServerP

学习

会计实践课程设计10篇

阅读(14)

本文为您介绍会计实践课程设计10篇,内容包括会计实践内容怎么写,会计基础课程设计范文。文献标识码:Adoi:10.19311/ki.1672-3198.2017.08.0751课程定位与目标《会计综合实训》是我校会计专业课程体系中的核心主干实践课程,属于“职业技能”

学习

微课程设计论文10篇

阅读(39)

本文为您介绍微课程设计论文10篇,内容包括微课程设计方案模板电子版,微课设计毕业论文。一、微课程的含义与特点微课程这一教学模式被发现是在2008年,当时美国新墨西哥州的一名高级教学设计师提出了这个概念。渐渐的流入了我国的教育发展