逯鵬 張贊
摘要:《數(shù)據(jù)結(jié)構(gòu)》是集軟件、硬件、數(shù)學(xué)等多個專業(yè)知識的交叉課程,對該課程的學(xué)習(xí)需要有較強(qiáng)的抽象思維以及較高水平的計算機(jī)編程能力,這使得大部分學(xué)生學(xué)習(xí)過程困難。因此一個行之有效的教學(xué)手段對該課程的學(xué)習(xí)是至關(guān)重要的。本文以提高學(xué)生學(xué)習(xí)的主觀能動性為目的,探討了分段式問題驅(qū)動等方法在數(shù)據(jù)結(jié)構(gòu)教學(xué)中的應(yīng)用。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);教學(xué)方法;問題驅(qū)動法
中圖分類號:G642.0 ? ? 文獻(xiàn)標(biāo)志碼:A ? ? 文章編號:1674-9324(2015)18-0121-03
一、引言
《數(shù)據(jù)結(jié)構(gòu)》對于理工科是一門重要的基礎(chǔ)課程,尤其是計算機(jī)學(xué)科基礎(chǔ)課程的核心,也是電氣類等相關(guān)專業(yè)的主要課程之一。其內(nèi)容主要包括:數(shù)據(jù)在計算機(jī)應(yīng)用中的處理過程,主要是對于非數(shù)值(如工業(yè)檢測、過程控制等)的加工處理;相應(yīng)結(jié)構(gòu)的抽象數(shù)學(xué)模型建立、算法設(shè)計并對算法性能技術(shù)進(jìn)行分析;算法的編程實現(xiàn)等。
由于“數(shù)據(jù)結(jié)構(gòu)”的研究涉及到軟件、硬件、數(shù)學(xué)等多個專業(yè)知識,學(xué)生很難采用其以往的理論學(xué)習(xí)+課后作業(yè)的模式,達(dá)到掌握和靈活運用的目的。此外,由于數(shù)據(jù)結(jié)構(gòu)的各個知識點牽涉到多個學(xué)科領(lǐng)域,教師采用傳統(tǒng)的知識點講解的模式和方法,常常顧此失彼,使得一些學(xué)生學(xué)習(xí)時會感到對數(shù)據(jù)結(jié)構(gòu)的認(rèn)知無法具化,進(jìn)而感到乏味無趣,無法領(lǐng)會課程要領(lǐng),最終導(dǎo)致學(xué)生理解困難,教學(xué)效果不理想。本文結(jié)合多年數(shù)據(jù)結(jié)構(gòu)教學(xué)實踐和教學(xué)方法改革,提出了針對上述問題的解決方法和思路。
二、目前數(shù)據(jù)結(jié)構(gòu)教學(xué)缺點分析
(一)學(xué)生前導(dǎo)課程基礎(chǔ)知識掌握不足
數(shù)據(jù)結(jié)構(gòu)課程涉及算法實現(xiàn)的程序設(shè)計,故對高級語言基礎(chǔ)知識要求較高。相關(guān)專業(yè)學(xué)生最先接觸的高級語言一般都是C/C++,知識點多且雜。課堂大部分時間用于基本概念和語法的講解,學(xué)生大多數(shù)從未進(jìn)行過實際的編程訓(xùn)練,導(dǎo)致學(xué)生最終只對編程語言一些基本語法、數(shù)據(jù)類型等有所了解,對數(shù)組、結(jié)構(gòu)體、指針等知識的應(yīng)用能力不足。然而,這些知識及其靈活應(yīng)用的方法正是數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)的基礎(chǔ)。特別是函數(shù)的遞歸調(diào)用及遞歸過程,是理解并設(shè)計算法的基礎(chǔ),在高級語言學(xué)習(xí)中又是難點,學(xué)生不易理解掌握。高級語言先導(dǎo)課程的掌握程度不夠直接妨礙數(shù)據(jù)結(jié)構(gòu)課程的學(xué)習(xí),加大教學(xué)難度,影響學(xué)生對數(shù)據(jù)結(jié)構(gòu)知識的理解。
(二)有限的學(xué)時未能達(dá)到教學(xué)目標(biāo)
數(shù)據(jù)結(jié)構(gòu)教學(xué)主要目的是培養(yǎng)學(xué)生編程能力,為有效地設(shè)計、實現(xiàn)算法以解決工程技術(shù)問題提供理論技術(shù)基礎(chǔ)。課程涉及四大邏輯結(jié)構(gòu)(線性、樹、圖和集合)、兩大存儲結(jié)構(gòu)(順序存儲和鏈?zhǔn)酱鎯Γ?、查找、排序等眾多算法,這些知識點自成體系,教學(xué)內(nèi)容較多,而且對學(xué)生都很重要。相關(guān)專業(yè)數(shù)據(jù)結(jié)構(gòu)理論課學(xué)時一般都相對不足,教學(xué)過程中又要兼顧每個知識點,導(dǎo)致教學(xué)重點不突出,學(xué)生易混淆難點要點,更加大教學(xué)難度。有些經(jīng)典算法較抽象,算法設(shè)計比較復(fù)雜,編程實現(xiàn)就無從下手,在理論教學(xué)時無法直觀地表現(xiàn)出來,需要學(xué)生在實踐中理解體會,而該課程實驗內(nèi)容眾多,有限的學(xué)時使實踐阻力較大,學(xué)生難以理解,降低學(xué)習(xí)興趣。
(三)課后反饋不及時
課后及時反饋和強(qiáng)化是控制教學(xué)的有效手段。由于電氣信息類《數(shù)據(jù)結(jié)構(gòu)》這門課程的教學(xué)大多采用多媒體教學(xué)為主、上機(jī)實踐為輔的方式,且大多媒體教學(xué)與上機(jī)實踐不能同步進(jìn)行,導(dǎo)致學(xué)生無法與其具體掌握的實現(xiàn)技術(shù)建立關(guān)聯(lián),只能用數(shù)學(xué)思考的模式強(qiáng)記數(shù)據(jù)之間的復(fù)雜關(guān)系。這樣的結(jié)果是,即使課堂上理解了,但由于不能立即上機(jī)驗證,待下次課時記憶部分消退,學(xué)生動手的熱情就要小很多,長此以往對學(xué)生上課的積極性影響甚大。
(四)多媒體教學(xué)手段存在不足
目前多數(shù)的課堂都采用多媒體教學(xué),多媒體教學(xué)集理論課、習(xí)題課、算法演示為一體,使課堂生動、形象、直觀,有助于學(xué)生更有效地接受抽象的理論知識。但是,教師降低工作強(qiáng)度的同時也加快了教學(xué)過程,使得學(xué)生思考的時間變短。教師過分依賴課件直接展現(xiàn),導(dǎo)致教師忽視教學(xué)的重點與難點,忽視學(xué)生的反應(yīng),不能理解學(xué)生感受,無法進(jìn)行課內(nèi)交流;熒屏成為學(xué)生課堂關(guān)注的中心,導(dǎo)致學(xué)生只關(guān)注屏幕展現(xiàn)的內(nèi)容,忙于抄錄筆記,落后于教師的講解,也無暇思考問題。因此,在充分發(fā)揮多媒體教學(xué)信息量大、呈現(xiàn)快速、表現(xiàn)直觀、操作簡便的優(yōu)勢的同時,也應(yīng)合理規(guī)避多媒體授課的缺陷,避免教學(xué)活動出現(xiàn)課件“喧賓奪主”的不良傾向。
三、教學(xué)方法的研究與實踐
針對上述教學(xué)實踐過程中發(fā)現(xiàn)的具體問題,研究了采用不同的教學(xué)方法應(yīng)用于數(shù)據(jù)結(jié)構(gòu)的教學(xué)實踐。主要包括以下方面:
(一)理論課教學(xué)設(shè)計
1.循序漸進(jìn)式學(xué)習(xí)。循序漸進(jìn)式學(xué)習(xí)著力于解決“愿意學(xué)”的問題,增加學(xué)生學(xué)習(xí)的積極性。由于學(xué)生對先導(dǎo)課程的掌握程度參差不齊,而且在數(shù)據(jù)結(jié)構(gòu)中會涉及到綜合程序設(shè)計問題,增加學(xué)生編程實現(xiàn)的困難,若調(diào)試不通,會影響學(xué)習(xí)積極性。因此,對先導(dǎo)課程的復(fù)習(xí)是必要的。教師應(yīng)對函數(shù)、結(jié)構(gòu)、指針、類等主要編程元素進(jìn)行針對性回顧,先提供程序鍛煉學(xué)生的閱讀、分析能力,然后提出具體問題鍛煉學(xué)生簡單的編程設(shè)計能力,當(dāng)學(xué)生具有一定的數(shù)據(jù)結(jié)構(gòu)知識以及編程設(shè)計能力時,再進(jìn)行算法和結(jié)構(gòu)的學(xué)習(xí)。
2.分段式問題驅(qū)動法學(xué)習(xí)。問題驅(qū)動其目的是提高學(xué)生自主學(xué)習(xí)的能力,是指在老師創(chuàng)設(shè)的情境下學(xué)生應(yīng)用已具有的編程相關(guān)知識提出新問題、解決新問題的過程。教師在講課時,應(yīng)用啟發(fā)式教學(xué),發(fā)現(xiàn)新型學(xué)習(xí)模式,體現(xiàn)教學(xué)思想。筆者根據(jù)多年教學(xué)經(jīng)驗,提出分段式問題驅(qū)動法教學(xué)概念,在學(xué)生“愿意學(xué)”的基礎(chǔ)上,解決“如何學(xué)”的步驟和方法問題。(1)抽象模型的建立。在教學(xué)中發(fā)現(xiàn),學(xué)生普遍反映《數(shù)據(jù)結(jié)構(gòu)》中線性表、棧和隊列、串的內(nèi)容很容易理解,在教學(xué)中教師可以從直觀意義或具體實例解釋著手,采用畫圖舉例相結(jié)合的形式,形象地解釋編程實現(xiàn)問題。例如:在講解隊列時,可以通過生活中買票排隊的過程來反映隊列中插入、刪除的原則,再結(jié)合數(shù)據(jù)結(jié)構(gòu)中的操作隊列、打印隊列的應(yīng)用來說明。(2)運用技巧,強(qiáng)化理解。對于一些需要記憶、容易混淆的概念,需要運用一定的技巧,強(qiáng)化學(xué)生的理解。比如對于第六章中樹和二叉樹的概念,學(xué)生一般不易理解樹的結(jié)構(gòu),可以編口訣加強(qiáng)學(xué)生記憶,降低學(xué)習(xí)難度。例如:雙親表示法特點:找雙親容易找孩子難。孩子鏈表特點:找孩子容易找雙親難。樹變二叉樹:兄弟相連留長子。森林變二叉樹:樹變二叉根相連。二叉樹變森林:去掉全部右孩線,孤立二叉再還原。哈夫曼算法口訣:①構(gòu)造森林全是根;②選用兩小造新樹;③刪除兩小添新人;④重復(fù)2、3剩單根。(3)采用模塊技術(shù)教學(xué)。根據(jù)教學(xué)經(jīng)驗發(fā)現(xiàn),學(xué)生普遍在理解結(jié)構(gòu)和算法的關(guān)系,如何將算法變成具體程序方面存在問題。解決此問題的有效途徑是采用模塊技術(shù),即讓學(xué)生把具有特定價值的函數(shù)理解記憶下來,運用時直接調(diào)用即可。一般采用算法介紹-算法分析-算法比較-算法評價-問題驅(qū)動學(xué)習(xí)幾個步驟。以順序查找為例,第一步:介紹順序查找概念;第二步:查找過程;第三步:算法描述;第四步:比較優(yōu)缺點;第五步:查找評價;第六步:問題驅(qū)動學(xué)習(xí);學(xué)生可以記住此種步驟和算法,當(dāng)作模塊調(diào)用。(4)用自然語言的方式寫程序。將算法變成具體的程序,是每個學(xué)生都存在的難題,即使理解了算法,寫程序也無從下手。筆者總結(jié)出用說話的方式寫程序更容易令學(xué)生接受。首先用自然語言理清思路,然后翻譯成對應(yīng)的C語言就容易了。以數(shù)字冒泡排序過程為例:
①比較第一個和第二個數(shù),若逆序則交換;然后比較第二個和第三個數(shù);依次類推,第一趟冒泡排序結(jié)束是對第n-1個和第n個數(shù)進(jìn)行比較,結(jié)果第n位上安置的是最大數(shù)。
對應(yīng)的C語言程序:for(j=1;j if(r[j+1] r[j] ←→ r[j+1]; ②對前n-1個數(shù)進(jìn)行第二趟冒泡排序,結(jié)果第n-1位上安置的是次大數(shù)。 對應(yīng)的C語言程序:for(j=1;j if(r[j+1] r[j] ←→ r[j+1]; ③重復(fù)直到“在一趟排序過程中沒有進(jìn)行交換的操作”或“僅第一、二個交換過”為止。 一般情況下每經(jīng)過一趟“起泡”,i減1:for(i=n;i>1;i--); 但并不是每趟都會如此,可實現(xiàn)為:k=j;i=k; 綜合以上,可很清晰寫出冒泡排序算法的C語言程序: Void BubbleSort(SqList &L){ i=n; While(i>1){ k=1; for(j=1;j if(r[j+1] r[j] ←→ r[j+1]; k=j; } i=k; } } 這樣的方式讓學(xué)生感覺到實際上程序是另一種“語言”,也從思維上改變了對待程序的態(tài)度。這一方法取得了比較好的效果。 (二)實驗課教學(xué)設(shè)計 實踐教學(xué)是數(shù)據(jù)結(jié)構(gòu)課程的重要組成部分,主要解決關(guān)鍵的“如何用”的問題。實踐教學(xué)內(nèi)容的合理設(shè)置有利于學(xué)生建立起編程信心,使他們在牢固掌握書中所提供的各種算法的基礎(chǔ)上,加深對數(shù)據(jù)結(jié)構(gòu)算法的理解,同時也有利于逐步培養(yǎng)學(xué)生實際動手和設(shè)計能力。對于電氣類等非計算機(jī)專業(yè)的學(xué)生而言,大規(guī)模系統(tǒng)性實驗課時很少,如何能高、精、簡地安排實驗課時是要慎重思考的問題。根據(jù)筆者多年教學(xué)經(jīng)驗,將實驗內(nèi)容劃分為基礎(chǔ)型實驗、驗證型實驗和設(shè)計型實驗,按照課程進(jìn)度穿插在各個章節(jié)需掌握的內(nèi)容中挑選進(jìn)行,且其實驗難度循序漸進(jìn)。 1.基礎(chǔ)型實驗?;A(chǔ)型實驗主要包含復(fù)習(xí)鞏固C語言知識、加深C語言理解和查漏補缺,對學(xué)生掌握較薄弱但數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)過程中常用知識點,如:函數(shù)、指針、結(jié)構(gòu)體等加以鞏固和強(qiáng)化,避免學(xué)生出現(xiàn)看不懂教材算法、寫不出程序代碼的現(xiàn)象。其次,對新學(xué)習(xí)的內(nèi)容,如:線性表、單鏈表、棧等進(jìn)行練習(xí)?;A(chǔ)型實驗是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的基石,是數(shù)據(jù)結(jié)構(gòu)理論和實踐教學(xué)能否順利進(jìn)行的關(guān)鍵,能減少學(xué)生后期實驗中的障礙,便于學(xué)生了解數(shù)據(jù)結(jié)構(gòu)的實用性。 2.驗證型實驗。驗證型實驗?zāi)康氖羌訌?qiáng)學(xué)生對算法實現(xiàn)方法的理解,學(xué)生參考教材提供的算法設(shè)計的例題,以避免以教師為主體的滿堂灌,學(xué)生課下不動手驗證,學(xué)完就忘這一普遍現(xiàn)象。驗證型實驗在教學(xué)中常被忽視,教師認(rèn)為課堂講授后,學(xué)生能夠理解數(shù)據(jù)結(jié)構(gòu)基本操作實現(xiàn)算法,而學(xué)生認(rèn)為驗證型實驗失去實用價值,照本宣科過于枯燥。這不僅阻礙學(xué)生深化理解數(shù)據(jù)結(jié)構(gòu)知識,而且教師也不能及時地得到教學(xué)反饋,造成教師和學(xué)生溝通出現(xiàn)障礙。驗證型實驗?zāi)苁箤W(xué)生在實驗過程中發(fā)現(xiàn)自己知識上的短缺和技術(shù)上的漏洞,且程序?qū)τ谒惴ǖ某晒崿F(xiàn)能使學(xué)生得到極大的滿足,樹立學(xué)生完成更復(fù)雜實驗的信心。其中教師可以主要在二叉樹、樹的部分設(shè)置驗證性實驗。 3.設(shè)計型實驗。設(shè)計型實驗具體到針對問題、解決問題,訓(xùn)練學(xué)生綜合知識應(yīng)用的能力。設(shè)計型實驗的內(nèi)容設(shè)置要與實際應(yīng)用相關(guān)聯(lián),才能提高學(xué)生興趣,同時難度應(yīng)控制在學(xué)生能接受的范圍內(nèi)。因此在設(shè)計型實驗的選題方面有以下建議:首先選題可以是熱點研究問題,但要注意介紹背景知識,合理設(shè)置實驗廣度和難度;其次最好能與學(xué)生實際專業(yè)相對應(yīng),設(shè)計一些專業(yè)領(lǐng)域內(nèi)應(yīng)用數(shù)據(jù)結(jié)構(gòu)可以解決的問題,拓展學(xué)生視野和思路,此外,也可以借鑒一些經(jīng)典問題。 (三)考核體系設(shè)計 考核體系是學(xué)生在學(xué)習(xí)過程中關(guān)注的問題。好的考核方式能夠有效檢測學(xué)生的學(xué)習(xí)效果,解決“驗證學(xué)習(xí)效果”的問題。隨著教學(xué)環(huán)境和社會環(huán)境的改變,考核體系也由傳統(tǒng)的卷面模式轉(zhuǎn)變?yōu)槔碚摵蛯嵺`相結(jié)合的模式,這樣才能全面、客觀、公平地考核學(xué)生學(xué)習(xí)該課程的水平。教學(xué)中可以從兩方面進(jìn)行考核:一是對理論知識點的考核。該考核主要檢測學(xué)生理論知識的學(xué)習(xí)的情況,采用卷面的方式。二是對實踐能力的考查??梢栽O(shè)計驅(qū)動式教學(xué)方式,使學(xué)生分成幾個小組,各自選擇有興趣的課題,教師稍作指導(dǎo),讓學(xué)生沿著設(shè)計思路、代碼的編寫、實驗時遇到的問題以及如何解決等線路進(jìn)行。該考核不僅是對教學(xué)成果的考查,也是對學(xué)生學(xué)習(xí)態(tài)度和學(xué)習(xí)能力的考查。通過這種形式的鍛煉有很多好處:一是激發(fā)學(xué)生的學(xué)習(xí)興趣,培養(yǎng)學(xué)生獨立解決問題的能力,同時可以在實現(xiàn)實踐模塊的過程中,培養(yǎng)學(xué)生的軟件設(shè)計能力和團(tuán)隊協(xié)作的能力,為學(xué)生以后的就業(yè)打下堅實的基礎(chǔ)。 四、總結(jié) 將分段式問題驅(qū)動教學(xué)法應(yīng)用到電氣類的《數(shù)據(jù)結(jié)構(gòu)》教學(xué)中,充分調(diào)動學(xué)生的積極性。通過與算法適度分離和與程序設(shè)計的更加靠近,使學(xué)生更加深刻理解分析數(shù)據(jù)結(jié)構(gòu)的功能、程序設(shè)計實現(xiàn)和具體應(yīng)用,以便能夠利用各種數(shù)據(jù)結(jié)構(gòu)模型實現(xiàn)程序編寫與軟件的開發(fā),提高學(xué)生分析問題和解決問題的實戰(zhàn)能力。近期教學(xué)效果跟蹤表明,文中提出的在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)方式、考核方式上引入的分段式問題驅(qū)動法,能夠培養(yǎng)理論基礎(chǔ)較扎實、實踐操作能力較強(qiáng)和綜合表達(dá)能力較好的高素質(zhì)學(xué)生。 參考文獻(xiàn): [1]殷艷菊.《數(shù)據(jù)結(jié)構(gòu)》教學(xué)方法創(chuàng)新探討[J].河南科技:上半月,2014,(5):271-272. [2]曹春萍,陳平.問題驅(qū)動法在“數(shù)據(jù)結(jié)構(gòu)”教學(xué)中的應(yīng)用探討[J].中國電力教育,2014,(18). [3]游琪.項目驅(qū)動在數(shù)據(jù)結(jié)構(gòu)實踐教學(xué)中的應(yīng)用研究[J].軟件導(dǎo)刊,2010,(9). [4]吳聰聰,趙建立.案例驅(qū)動法在《數(shù)據(jù)結(jié)構(gòu)》教學(xué)中的應(yīng)用[J].電腦知識與技術(shù),2010,(6):7322-7323.