摘要:“數(shù)據(jù)結(jié)構(gòu)”是計(jì)算機(jī)專(zhuān)業(yè)的一門(mén)核心課程,學(xué)生通過(guò)這門(mén)課程的學(xué)習(xí),可以促進(jìn)軟件設(shè)計(jì)和編程能力的提高。但學(xué)生在學(xué)習(xí)這門(mén)課程時(shí),普遍反映該課程枯燥難學(xué)。本文主要介紹了作者在教學(xué)過(guò)程中獲得的一些心得與體會(huì)。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);算法;教學(xué)方法;實(shí)踐
中圖分類(lèi)號(hào):G642.0 文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1672-5913(2007)06-0007-03
“數(shù)據(jù)結(jié)構(gòu)”是計(jì)算機(jī)專(zhuān)業(yè)的一門(mén)核心課程,學(xué)生通過(guò)這門(mén)課程的學(xué)習(xí),可以促進(jìn)軟件設(shè)計(jì)和編程能力的提高。它不僅是計(jì)算機(jī)專(zhuān)業(yè)研究生考試、大專(zhuān)學(xué)生專(zhuān)升本的首選考試課程,甚至有些單位招收計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生,也要考察“數(shù)據(jù)結(jié)構(gòu)”。學(xué)生雖然認(rèn)識(shí)到該門(mén)課程的重要性,但學(xué)生在學(xué)習(xí)這門(mén)課程時(shí),普遍反映該課程枯燥難學(xué),沒(méi)有學(xué)習(xí)興趣。因此,教師應(yīng)根據(jù)學(xué)生實(shí)際情況,改進(jìn)教學(xué)方法,提高教學(xué)質(zhì)量。
1 興趣引路,注重理論聯(lián)系實(shí)際
俗話(huà)說(shuō),興趣是最好的老師,如果要學(xué)生學(xué)得好,首先就要讓學(xué)生對(duì)該門(mén)課程產(chǎn)生興趣,但由于“數(shù)據(jù)結(jié)構(gòu)”這門(mén)課程理論性較強(qiáng),學(xué)生在學(xué)習(xí)這門(mén)課程時(shí),普遍反映該課程枯燥難學(xué),提不起興趣,在學(xué)習(xí)過(guò)程中也僅是為了考試而學(xué)習(xí),這種學(xué)習(xí)方法就扼殺了學(xué)生學(xué)習(xí)的主動(dòng)性,使學(xué)習(xí)效果大打折扣。一個(gè)好的教師,應(yīng)該在傳授理論知識(shí)的同時(shí),培養(yǎng)學(xué)生的學(xué)習(xí)興趣。目前,很多學(xué)生學(xué)了“數(shù)據(jù)結(jié)構(gòu)”之后,不知道怎樣用,只知道邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)等相關(guān)術(shù)語(yǔ)。因此,教師在教授該門(mén)課程時(shí),首先要注重實(shí)踐,結(jié)合一些與本門(mén)課程相關(guān)的具體應(yīng)用實(shí)例,說(shuō)明各種數(shù)據(jù)結(jié)構(gòu)在一些典型軟件中的應(yīng)用。此外,如果教師在講授該門(mén)課程的同時(shí),能夠引入一些生活中的實(shí)例,引導(dǎo)學(xué)生巧妙處理生活中的日常問(wèn)題,讓學(xué)生感受到“數(shù)據(jù)結(jié)構(gòu)”這門(mén)課程與現(xiàn)實(shí)生活中的關(guān)系,就能夠提高學(xué)生的學(xué)習(xí)興趣。
比如說(shuō)筆者在課堂上講到隊(duì)列時(shí),曾經(jīng)舉過(guò)這樣一個(gè)例子:首先讓學(xué)生想一想關(guān)于生活中和隊(duì)列有關(guān)的事情,學(xué)生們都很積極地去想,七嘴八舌議論紛紛。最后學(xué)生統(tǒng)一說(shuō)最直接的例子就是生活中的排隊(duì)了。接著我就拿出一個(gè)具體的排隊(duì)實(shí)例,病人到醫(yī)院看病,要排隊(duì)等候,排隊(duì)看醫(yī)生的情況,要同學(xué)們編制出適當(dāng)?shù)某绦颉H缓笸瑢W(xué)們都沉默下來(lái),接著我就引導(dǎo)學(xué)生并告訴他們,要想編好這樣一個(gè)程序,也不難,這就用到了我們學(xué)過(guò)的隊(duì)列了。首先我們要把復(fù)雜的問(wèn)題簡(jiǎn)單化,要模擬這一問(wèn)題,可以把這一過(guò)程分為以下幾個(gè)步驟來(lái)完成:
(1) 排隊(duì):輸入病人的病例號(hào),加入病人到排隊(duì)隊(duì)列中;
(2) 就診:病人排隊(duì)隊(duì)列中最前面的病人就診,并將其從隊(duì)列中刪除;
(3) 查看排隊(duì):從隊(duì)首到隊(duì)尾列出所有排隊(duì)病人的病例號(hào);
(4) 不再排隊(duì),余下依次就診:從隊(duì)首到隊(duì)尾列出所有病人的病例號(hào),并退出運(yùn)行;
(5) 下班:退出運(yùn)行。
告訴他們把問(wèn)題分解為這樣幾步之后,給他們約10分鐘的時(shí)間去想這樣一個(gè)程序應(yīng)該怎樣編制,然后拿出自己事先調(diào)試好的程序,詳細(xì)地對(duì)其進(jìn)行講解。這樣雖說(shuō)花費(fèi)的時(shí)間比較長(zhǎng),但極大地調(diào)動(dòng)了學(xué)生學(xué)習(xí)這門(mén)課程的積極性,同時(shí)能夠引導(dǎo)他們嘗試如何把生活中的實(shí)例用數(shù)據(jù)結(jié)構(gòu)的方法去解決,收到了良好的教學(xué)效果。
2 加強(qiáng)實(shí)驗(yàn)教學(xué),培養(yǎng)學(xué)生動(dòng)手實(shí)踐能力
教師在教學(xué)過(guò)程中,要注重實(shí)驗(yàn)教學(xué),注重上機(jī)實(shí)踐。目前,在“數(shù)據(jù)結(jié)構(gòu)”教學(xué)之中,很多學(xué)校不重視上機(jī)實(shí)踐,甚至在整個(gè)授課過(guò)程中,只有理論課而沒(méi)有實(shí)踐課。我們說(shuō),上機(jī)實(shí)踐不僅能提高學(xué)生靈活運(yùn)用數(shù)據(jù)結(jié)構(gòu)和算法的能力,而且使學(xué)生在編程、上機(jī)操作、程序調(diào)試等方面受到嚴(yán)格的訓(xùn)練。通過(guò)上機(jī)實(shí)驗(yàn),可以有效地提高學(xué)生的程序設(shè)計(jì)能力,把算法和程序有效地結(jié)合在一起,加強(qiáng)學(xué)生對(duì)實(shí)際問(wèn)題的抽象理解能力。
但由于受?chē)?guó)外教材的影響,目前國(guó)內(nèi)的大多數(shù)“數(shù)據(jù)結(jié)構(gòu)”教材只是給出相關(guān)算法,并沒(méi)有給出源程序,教材上給出的算法在計(jì)算機(jī)上并沒(méi)有辦法執(zhí)行。同時(shí),由于很多學(xué)生“C語(yǔ)言程序設(shè)計(jì)”基礎(chǔ)知識(shí)較差,沒(méi)有能力將算法轉(zhuǎn)化為程序,在計(jì)算機(jī)上執(zhí)行。因此,教師在授課時(shí),要著重講授算法與源程序的關(guān)系,引導(dǎo)學(xué)生能夠?qū)⑺惴ㄞD(zhuǎn)化為源程序,在計(jì)算機(jī)上執(zhí)行。這就要求教師在一開(kāi)始詳細(xì)講解,以后逐漸放手,布置一些難度較大的作業(yè),培養(yǎng)學(xué)生的動(dòng)手實(shí)踐能力。
比如教師在講解單鏈表的抽象描述時(shí),對(duì)單鏈表有以下描述:
ElemTypedata;
Lnode *next;
對(duì)于這樣兩條語(yǔ)句,學(xué)生很難想象鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的線(xiàn)性表是怎么回事,但如果教師在授課過(guò)程中,引入一些實(shí)例,并在課堂上進(jìn)行調(diào)試,那么,學(xué)生學(xué)習(xí)的效果就會(huì)大不相同。比如線(xiàn)性表的插入算法實(shí)例:
# include
# include
# include
# include
# define INIT_LENGTH 10
# define OK 1
# define ERROR 0
typedef struct LNode//define LNode structure
{int data;
struct LNode *next;
}LNode,*Linklist;
int ListInsert_L(Linklist L,int i,int e)
//ListInsert_L() sub-function
{LNode *p=L;
int j=0;
while(pj {p=p->next; ++j; } if(!p||j>i-1)//out of location {cout<<\"Errer! The location is illegal!\"< return (ERROR); } LNode *s; s=(Linklist)malloc(sizeof(LNode));//create new LNode s->data=e; s->next=p->next; p->next=s; return (OK); } //ListInsert_L() end void main() //main() function {int i,j,e; LNode node[10]; LNode *L,*p; int array[INIT_LENGTH+1]={5,8,12,18,25,30,37,46,51,89}; L=node; L=(Linklist)malloc(sizeof(LNode)); L->next=NULL; for (i=10;i>0;i--) {p=(Linklist)malloc(sizeof(LNode)); p->data=array[i-1]; p->next=L->next; L->next=p; } p=L; cout< cout< cout < for(i=0;i { p=p->next; cout< } cout< cin>>j; cout<<\"Please input the integer to insert (eg,58) : \"; cin>>e; if(ListInsert_L(L,j,e)) {cout < p=L; for(i=0;i<11;i++) { p=p->next; cout< } } cout< getch(); } 這樣就使學(xué)生產(chǎn)生了很大的學(xué)習(xí)興趣,能夠使他們嘗試將生活中的實(shí)例用“數(shù)據(jù)結(jié)構(gòu)”的方法去解決,做到了活學(xué)活用,鍛煉了學(xué)生的軟件設(shè)計(jì)能力和編程能力,收到了良好的教學(xué)效果。 3 因人而異,分層次教學(xué) 一般來(lái)講,大學(xué)授課都采用大班授課,每個(gè)學(xué)生的基礎(chǔ)不同,理解能力和接受能力也不同,這就要求我們的教師要因人而異,對(duì)不同的學(xué)生采用不同的教學(xué)手段。具體來(lái)講,主要體現(xiàn)在以下幾個(gè)方面: * 在教學(xué)過(guò)程中,授課內(nèi)容分為基礎(chǔ)部分和提高部分; * 給學(xué)生留的作業(yè)也分為基礎(chǔ)和提高兩部分,基礎(chǔ)差的同學(xué)只做基礎(chǔ)部分,能力強(qiáng)的同學(xué)可以做那些難度較大的習(xí)題; * 實(shí)驗(yàn)部分分兩個(gè)環(huán)節(jié),基礎(chǔ)部分學(xué)生要全部完成,對(duì)于提高部分,主要包括和實(shí)踐接軌的一些習(xí)題,可以分組去做,幾個(gè)學(xué)生一組。去完成一些與實(shí)際接軌的習(xí)題,甚至是編一些游戲軟件等,培養(yǎng)學(xué)生學(xué)習(xí)興趣。 4 多媒體教學(xué) 學(xué)生在學(xué)習(xí)“數(shù)據(jù)結(jié)構(gòu)”這門(mén)課程時(shí),主要面對(duì)的一個(gè)問(wèn)題就是枯燥難學(xué),理論性極強(qiáng)。學(xué)生在學(xué)習(xí)起來(lái)自然就感到吃力,為了使學(xué)生在更短的時(shí)間內(nèi)更好地掌握知識(shí),教師可以采用多媒體進(jìn)行教學(xué)。教師先將那些在傳統(tǒng)教學(xué)中用語(yǔ)言和板書(shū)難以表述、學(xué)生難以理解的抽象內(nèi)容和復(fù)雜的變化過(guò)程,事先做好多媒體課件,或采用現(xiàn)有的DSDEMO數(shù)據(jù)結(jié)構(gòu)課件演示系統(tǒng),進(jìn)行演示,這樣可以使教學(xué)內(nèi)容變得更直觀、形象、生動(dòng)和有趣,從而取得良好的教學(xué)效果。 5 結(jié)束語(yǔ) “數(shù)據(jù)結(jié)構(gòu)”這門(mén)課程在計(jì)算機(jī)科學(xué)與技術(shù)中有著舉足輕重的作用,是計(jì)算機(jī)教學(xué)中必須掌握和學(xué)習(xí)的一門(mén)課程。但該課程的特點(diǎn)是理論性和實(shí)踐性較強(qiáng),有的學(xué)生學(xué)完“數(shù)據(jù)結(jié)構(gòu)”,居然留下的印象是該課程像天書(shū)一樣難懂,學(xué)了之后,根本就不會(huì)具體應(yīng)用,這就使這門(mén)課程的教學(xué)失去了它本來(lái)的光環(huán)。學(xué)生學(xué)過(guò)之后,根本不會(huì)使用,還談什么核心作用呢?因此,教師在教學(xué)過(guò)程中,應(yīng)該積極探討,采用深入淺出、靈活多樣的教學(xué)方法,充分調(diào)動(dòng)學(xué)生的學(xué)習(xí)積極性,提高學(xué)生的學(xué)習(xí)興趣,這樣才能使學(xué)生真正學(xué)好“數(shù)據(jù)結(jié)構(gòu)”。以上是筆者在教學(xué)過(guò)程中的一點(diǎn)心得與體會(huì),希望能給同行以借鑒作用。 參考文獻(xiàn): [1] 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M].北京:清華大學(xué)出版社,1997. [2] 彭波.數(shù)據(jù)結(jié)構(gòu)[M].北京:清華大學(xué)出版社,2006. [3] 李春葆.數(shù)據(jù)結(jié)構(gòu)教程上機(jī)實(shí)驗(yàn)指導(dǎo)[M].北京:清華大學(xué)出版社,2005. [4] 張敬芝.數(shù)據(jù)結(jié)構(gòu)課程教學(xué)改革研究[J].長(zhǎng)春師范學(xué)院學(xué)報(bào),2005,(8):147-148. [5] 陸志敏.“數(shù)據(jù)結(jié)構(gòu)”教學(xué)初探[J].計(jì)算機(jī)時(shí)代,2005,(11):28. 收稿日期:2006-10-31 作者簡(jiǎn)介:楊桂芝(1970-),女(漢族),工學(xué)碩士,主要研究方向?yàn)樗阉饕妗⑿畔⑻幚怼?/p>