摘要《數(shù)據(jù)結(jié)構(gòu)》在計(jì)算機(jī)專業(yè)學(xué)習(xí)中處于重要地位,本文闡述了筆者在《數(shù)據(jù)結(jié)構(gòu)》教學(xué)中發(fā)現(xiàn)的問題,針對(duì)它們提出了一些改革方法,并在教學(xué)中進(jìn)行實(shí)踐。
關(guān)鍵詞數(shù)據(jù)結(jié)構(gòu) 教學(xué) 改革
中圖分類號(hào):G420文獻(xiàn)標(biāo)識(shí)碼:A
做為服務(wù)區(qū)域經(jīng)濟(jì)與社會(huì)發(fā)展的高等職業(yè)院校,在人才培養(yǎng)上注重“實(shí)用性,技能性”,對(duì)于實(shí)踐性較強(qiáng)的計(jì)算機(jī)專業(yè)而言更不例外。傳統(tǒng)教學(xué)中習(xí)慣于把數(shù)據(jù)結(jié)構(gòu)當(dāng)作一門理論性課程,這似乎在“重實(shí)踐”的高職教育中顯得無足輕重。但我們知道學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的作用是要程序編寫者提高代碼質(zhì)量,提高算法效率的,對(duì)實(shí)踐環(huán)節(jié)有著絕對(duì)的指導(dǎo)意義,所以學(xué)好數(shù)據(jù)結(jié)構(gòu)很重要。但學(xué)生在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的過程中雖然花費(fèi)了大量的精力,也能基本理解書本上的基本概念,卻仍然感到知識(shí)點(diǎn)繁雜,代碼難以編寫,上機(jī)調(diào)試程序無法通過,經(jīng)過幾次失敗,學(xué)生的學(xué)習(xí)熱情便慢慢減退,甚至造成不愿、懼怕學(xué)數(shù)據(jù)結(jié)構(gòu)的狀況。筆者根據(jù)多年的教學(xué)經(jīng)驗(yàn),提出了高職“數(shù)據(jù)結(jié)構(gòu)”課程改革的幾點(diǎn)意見,并在教學(xué)過程中加以實(shí)踐,取得了一定的效果。
1 改革課程設(shè)計(jì),精心組織教學(xué)內(nèi)容
數(shù)據(jù)結(jié)構(gòu)課程各章節(jié)聯(lián)系比較緊密,傳統(tǒng)教學(xué)一般都以線性表、棧和隊(duì)列、樹、圖、查找、排序的順序來對(duì)課程進(jìn)行講解,前一個(gè)知識(shí)點(diǎn)講明白了,才繼續(xù)往下進(jìn)行,學(xué)生被動(dòng)的接受知識(shí)。但往往是學(xué)習(xí)后面的,忘著前面的,到了期末考試,熬夜復(fù)習(xí),考完全部還給老師,起不到學(xué)以致用的效果。筆者在教學(xué)過程中采用了美國(guó)教育家、心理學(xué)家布魯納(J.S.Bruner)的螺旋式課程理論。簡(jiǎn)單來說,螺旋式課程就像繞著一座山往上爬,雖然每次看到的風(fēng)景都一樣,但因?yàn)椴粩嗌仙吹降膹V度和深度發(fā)生了變化,等爬到山頂,就可以縱覽全局,成竹在胸了。在實(shí)施螺旋式教學(xué)的過程中,主要有兩個(gè)方面:面向數(shù)據(jù)結(jié)構(gòu)課程和面向計(jì)算機(jī)核心課程體系。不強(qiáng)求學(xué)生一次性的把一個(gè)知識(shí)點(diǎn)吃透,而是隨著課程的深入,將以往講授過的知識(shí)點(diǎn)再一一展開來進(jìn)行深入的研究,使學(xué)生站在更高的高度上看待并理解問題,同時(shí)可以在具備了更寬的知識(shí)面的基礎(chǔ)上,聯(lián)系實(shí)際,舉一反三。
例如,在講解順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)時(shí),除了告訴學(xué)生這兩種存儲(chǔ)結(jié)構(gòu)在運(yùn)算特征上的區(qū)別外,還要告訴學(xué)生為什么會(huì)有這種區(qū)別,其本質(zhì)是因?yàn)閿?shù)據(jù)對(duì)象所采取存儲(chǔ)分配策略不同,順便簡(jiǎn)單講一下“操作系統(tǒng)”課程中的“靜態(tài)存儲(chǔ)分配策略”和“動(dòng)態(tài)存儲(chǔ)分配策略”,等學(xué)生學(xué)到“操作系統(tǒng)”課程相應(yīng)章節(jié)的時(shí)候,就會(huì)把此處講到的知識(shí)點(diǎn)聯(lián)系起來,進(jìn)而從系統(tǒng)的高度來理解存儲(chǔ)結(jié)構(gòu)對(duì)運(yùn)算的決定性因素(圖1)。再例如,在概述數(shù)據(jù)的基本運(yùn)算時(shí),告訴學(xué)生查找是一種最基本的操作,而查找的效率在很大程度上依賴于數(shù)據(jù)元素的位序。這個(gè)時(shí)候?qū)W生只是很生硬地記住了位序和查找的緊密聯(lián)系,但并不理解。等學(xué)到查找和排序這個(gè)環(huán)節(jié)的時(shí)候,再次給出大量實(shí)例來說明各種查找算法的時(shí)間復(fù)雜度,使學(xué)生真正理解同樣一張查找表,如果元素有序排列就可以使用高效的折半查找,而無序的表只能采用順序查找,平均查找長(zhǎng)度為(N+1)/2。這個(gè)時(shí)候?qū)W生已經(jīng)站在算法效率的角度來看待查找和排序的關(guān)系,學(xué)習(xí)起來自然較輕松,理解也更透徹。
圖 1
2 改革教學(xué)方式,改變學(xué)生學(xué)習(xí)方法
常用的教學(xué)方式為:講授式,探究式,訓(xùn)練與實(shí)訓(xùn)式和啟發(fā)式。其中訓(xùn)練與實(shí)訓(xùn)式是指,通過課內(nèi)外的練習(xí)、實(shí)驗(yàn)、實(shí)習(xí)、社會(huì)實(shí)踐、研究性學(xué)習(xí)等以學(xué)生為主體的實(shí)踐性活動(dòng),使學(xué)生鞏固、豐富和完善所學(xué)知識(shí),培養(yǎng)學(xué)生解決實(shí)際問題的能力和多方面的實(shí)踐能力。根據(jù)高等職業(yè)教育的要求和學(xué)生特點(diǎn),大量采用實(shí)訓(xùn)式教學(xué)方式和啟發(fā)式教學(xué)方式,改變“說教式”的教學(xué)方式。在課堂上,教師給出問題,引導(dǎo)學(xué)生思考算法,畫流程圖,寫代碼,上機(jī)調(diào)試程序,通過這種方式來提高學(xué)生對(duì)實(shí)際問題的把握能力,從而解決問題。學(xué)生在不斷的實(shí)踐中,養(yǎng)成了嚴(yán)密的思維習(xí)慣,形成了勤于思考,善于動(dòng)手的能力,對(duì)今后的自主學(xué)習(xí)有著很大的影響。下面以雙向鏈表的插入算法為例來對(duì)實(shí)訓(xùn)教學(xué)方式進(jìn)行說明。
雙向鏈表的存儲(chǔ)結(jié)構(gòu):
Typedef struct DuLNode
{DataType data;
Struct DuLNode *priors;
Struct DuLNode *next;}DuLinkList;
雙向鏈表插入算法一:
如果要求在第j個(gè)元素之前插入新元素,則指針p要指向第j個(gè)元素aj
Status ListInsert_Dul(DuLinkList L,int j,ElemType b){
If(!(P=GetElemType_Dul(L,j)))
Return error;
If(!(s=(DuLinkList)malloc(sizeof(DuLNode))
Return error;
s->data=b;
s->prior=p->prior;
p->prior->next=s;
s>next=p;
p->prior=s;
return ok;}//ListInsert_Dul
雙向鏈表插入算法二:(在第i個(gè)元素之后插入新元素):
Void ListInsert_DuL(DuLink L, ElemType b,int i)
{S=(Dullink)malloc(sizeof(DulNode));
If(!S)
Return(“error”);
s->data=b;
s->prior=1;
s->next=1;
P=L;
J=1While(p->nextj
p=p->next;
j++;}
If(!p||j>i)
Return error;
s->next=p->next;
p->next->prior=s;
s->prior=p;
p->next=s;}//ListInsert_Dul
算法一由教師給出圖例和偽代碼,學(xué)生掌握基本原理之后,給出算法二的問題,由學(xué)生自己畫圖例,給出代碼,并手工執(zhí)行驗(yàn)證正確性,最后還要寫出C代碼上機(jī)調(diào)試。
啟發(fā)式教學(xué)也是一種常用的教學(xué)方式,《數(shù)據(jù)結(jié)構(gòu)》中有許多重要的性質(zhì),記憶他們并不難,難的是如何去證明他們,只有真正理解證明過程,才能深入掌握定理和性質(zhì)本身。比如有這樣一條性質(zhì):一顆二叉樹具有N0個(gè)度為0的結(jié)點(diǎn),N2個(gè)度為2的結(jié)點(diǎn),則N0= N2+1。這是二叉樹的一條重要性質(zhì),如果不理解其證明過程,則對(duì)后面章節(jié)線索二叉樹的學(xué)習(xí)也會(huì)造成阻礙,所以在授課過程中,筆者就要啟發(fā)學(xué)生學(xué)會(huì)自己證明這一條性質(zhì):在二叉樹中假設(shè)結(jié)點(diǎn)的總數(shù)為N,則按照結(jié)點(diǎn)的度數(shù)來劃分,總共可以分為3類節(jié)點(diǎn),即度為0的葉子結(jié)點(diǎn),度為1和2的非終端結(jié)點(diǎn),設(shè)度為0、度為1和2的結(jié)點(diǎn)個(gè)數(shù)分別為N0,N1和N2,這時(shí)學(xué)生會(huì)逐漸自己總結(jié)出N= N0+N1+N2,繼續(xù)啟發(fā)學(xué)生,有些結(jié)點(diǎn)具有分支,有些沒有,那些不具有結(jié)點(diǎn)的分支被稱為葉子結(jié)點(diǎn),具有分支的節(jié)點(diǎn)稱為非終端結(jié)點(diǎn),那么這些分支都來自于哪里呢?答案很明顯,全部來自于度為1和度為2的節(jié)點(diǎn),而除根點(diǎn)外,所有結(jié)點(diǎn)都由來自于其上層結(jié)點(diǎn)的一個(gè)分支所連接,這樣,二叉樹中若有一個(gè)分支就有一個(gè)結(jié)點(diǎn),提示僅到這里結(jié)束,學(xué)生自己總結(jié)出N=B+1,而B= N1+2N2 ,將上述推導(dǎo)出來的各式相結(jié)合可得N0=N2+1。在分析問題的過程中,即不能把任務(wù)完全交給學(xué)生,也不能給與過多提示,因?yàn)檫@會(huì)造成學(xué)生消極或者依賴的心理,當(dāng)學(xué)生逐步具備了獨(dú)立和善于分析問題的能力的時(shí)候,再把更多的分析任務(wù)交給他們?nèi)ネ瓿?比如串的模式匹配之KMP算法),便能收到更好的教學(xué)效果。
學(xué)生經(jīng)過大量的訓(xùn)練,形成了獨(dú)立分析問題,解決問題的習(xí)慣,并在今后的學(xué)習(xí)中加以應(yīng)用,從而改變了依靠教師講授獲取知識(shí)的方式,學(xué)生學(xué)習(xí)的自覺性也有很大提高。
3 改革教學(xué)手段,構(gòu)建多元學(xué)習(xí)環(huán)境
在教學(xué)手段上,改革以前的黑板加粉筆傳統(tǒng)模式,采用現(xiàn)代化的教學(xué)手段,制作內(nèi)容豐富的多媒體課件和動(dòng)態(tài)演示系統(tǒng),并利用網(wǎng)絡(luò)進(jìn)行課下學(xué)習(xí)環(huán)境的構(gòu)建。以多媒體和網(wǎng)絡(luò)共同構(gòu)建多元化的教學(xué)平臺(tái),利用現(xiàn)代化手段,促進(jìn)師生間的交流,加強(qiáng)師生互動(dòng)。
首先,充分利用多媒體設(shè)備將課件、演示軟件、學(xué)生編寫的程序等進(jìn)行演示,這樣既擴(kuò)充了課堂授課量,同時(shí)幫助學(xué)生形象的理解各種算法規(guī)則,將抽象的問題具體化,復(fù)雜的問題簡(jiǎn)單化,提高了課堂學(xué)習(xí)效率。
其次,充分利用校園網(wǎng)絡(luò)平臺(tái),將教學(xué)大綱、課時(shí)計(jì)劃、課件、教案、試驗(yàn)、課程設(shè)計(jì)、習(xí)題、習(xí)題答案、源碼、演示軟件等資源進(jìn)行整合,并提供在線交流等功能。學(xué)生可根據(jù)自己的學(xué)習(xí)程度,合理安排課余時(shí)間進(jìn)行自學(xué),解決在課堂上沒有吃透的知識(shí)點(diǎn),合理把握學(xué)習(xí)的重難點(diǎn),同時(shí)實(shí)現(xiàn)線上討論,促進(jìn)師生交流。
4 改革考核方式,注重學(xué)習(xí)過程
數(shù)據(jù)結(jié)構(gòu)課程的學(xué)習(xí)目的是提高學(xué)生的分析能力和實(shí)踐能力,如果一味的以期末考試來對(duì)學(xué)習(xí)效果進(jìn)行考評(píng)未免片面。所以,綜合考核成績(jī)可由三部分組成:期末考試占總成績(jī)的60%,期末考試中客觀題和主觀題各占50%,以此來考核學(xué)生綜合運(yùn)用知識(shí)的能力,;平時(shí)上課是否積極參與討論和回答問題占總成績(jī)的20%,問題的答案是對(duì)是錯(cuò)并不重要,關(guān)鍵是從回答問題中可以看出,學(xué)生是否有一個(gè)積極的討論和思考的過程;平時(shí)作業(yè)占總成績(jī)的20%,其中包括算法設(shè)計(jì)和上機(jī)報(bào)告,并且代碼不能完全重復(fù),避免相互抄襲,渾水摸魚,督促學(xué)生不斷提高自己的學(xué)習(xí)水平,自覺學(xué)習(xí)。
5 結(jié)束語
教學(xué)有法,但無定法。筆者根據(jù)上文所提到的觀點(diǎn)進(jìn)行實(shí)踐,學(xué)生的學(xué)習(xí)積極性有了很大的提高,教學(xué)效果有了明顯的改善。
參考文獻(xiàn)
[1]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(第三版)[M].北京:清華大學(xué)出版社,2002.
[2]王立天.上一門不用教科書的課[J].計(jì)算機(jī)教育,2009(2):59-64.
[3]張娟等.“數(shù)據(jù)結(jié)構(gòu)”課程的教學(xué)改革與實(shí)踐[J].計(jì)算機(jī)教育,2008(8):53-54.