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