摘要:數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)專業(yè)的重要課程之一,但由于其理論性過強(qiáng),缺乏趣味性,學(xué)生理解困難,教學(xué)效果不好。針對這些現(xiàn)象,文章提出在數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)方式、教學(xué)手段、考試方式上引入利用案例驅(qū)動的方法,以培養(yǎng)具備扎實(shí)的理論基礎(chǔ)、較強(qiáng)的實(shí)踐操作能力和綜合表達(dá)能力的高素質(zhì)學(xué)生。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);案例教學(xué);教學(xué)改革
1數(shù)據(jù)結(jié)構(gòu)課程教學(xué)現(xiàn)狀及問題
數(shù)據(jù)結(jié)構(gòu)作為計(jì)算機(jī)和信息等專業(yè)的核心課程,在教學(xué)體系中起著舉足輕重的作用[1-4]。現(xiàn)階段國內(nèi)數(shù)據(jù)結(jié)構(gòu)課程受主流數(shù)據(jù)結(jié)構(gòu)教材影響,多以傳授知識、利用偽代碼描述數(shù)據(jù)結(jié)構(gòu)及其算法為主,輔以一定的編程實(shí)踐作為主要的教學(xué)模式。在這樣的教學(xué)模式下,對于當(dāng)前大眾化教育背景下應(yīng)用型高等工科院校的學(xué)生來說,學(xué)習(xí)掌握數(shù)據(jù)結(jié)構(gòu)課程,根據(jù)實(shí)際問題動手設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)算法并能付諸實(shí)踐成為一個難題,造成這種現(xiàn)象的主要原因有以下幾點(diǎn):
1) 在國內(nèi)主流的數(shù)據(jù)結(jié)構(gòu)教材普遍采用偽代碼的形式來描述算法,沒有源程序,學(xué)生在學(xué)習(xí)過程中,不能“親眼看見”算法執(zhí)行流程,從而造成對算法理解的困難。
2) 算法描述過于抽象,不夠直觀,教師在教學(xué)過程中利用“黑板+粉筆”或者PPT都很難形象直觀地演示算法,不利于學(xué)生理解算法。
3) 傳統(tǒng)的教學(xué)模式強(qiáng)調(diào)理論教學(xué),實(shí)踐環(huán)節(jié)不夠,造成學(xué)生動手能力差,有的學(xué)生會考試能做題,卻看不懂實(shí)現(xiàn)算法的程序,更別說自己動手編程實(shí)現(xiàn)算法?!皵?shù)據(jù)結(jié)構(gòu)”在計(jì)算機(jī)軟件開發(fā)領(lǐng)域的真正價(jià)值無法得到體現(xiàn)。
就以上問題筆者對在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)過程中引入案例驅(qū)動的立體化教學(xué)改革研究作了初步研究。
2選擇設(shè)計(jì)適當(dāng)?shù)陌咐则?qū)動數(shù)據(jù)結(jié)構(gòu)課程教學(xué)改革
2.1案例的設(shè)計(jì)與選擇
案例選編是數(shù)據(jù)結(jié)構(gòu)教學(xué)改革中的重要環(huán)節(jié),選擇或設(shè)計(jì)適合學(xué)生、難易得當(dāng)、繁簡相宜的案例,應(yīng)包含學(xué)生已經(jīng)學(xué)過的和即將學(xué)到的知識,并以此案例作為驅(qū)動進(jìn)行課程的教學(xué)和學(xué)習(xí),可以提高學(xué)生的學(xué)習(xí)興趣和學(xué)習(xí)效率,達(dá)到教學(xué)目的。
筆者經(jīng)過多年教學(xué)實(shí)踐,在教學(xué)過程中摸索了一系列案例作為各數(shù)據(jù)結(jié)構(gòu)教學(xué)模塊的驅(qū)動,主要包括:以“一元多項(xiàng)式的四則運(yùn)算”作為線性表結(jié)構(gòu)特別是鏈表結(jié)構(gòu)教學(xué)的驅(qū)動案例、以“迷宮路徑搜索”作為棧結(jié)構(gòu)教學(xué)模塊的驅(qū)動案例、以“井字棋游戲”和“霍夫曼樹及霍夫曼編碼”作為樹結(jié)構(gòu)教學(xué)模塊的驅(qū)動案例、以“校園導(dǎo)游咨詢”作為圖結(jié)構(gòu)模塊的驅(qū)動案例,等等,如圖1~圖3所示。下面以較為簡單的鏈表結(jié)構(gòu)為例闡述“一元多項(xiàng)式四則運(yùn)算”案例如何驅(qū)動教學(xué)。
2.2一元多項(xiàng)式四則案例驅(qū)動鏈表結(jié)構(gòu)的教學(xué)
一元多項(xiàng)式四則運(yùn)算是清華大學(xué)嚴(yán)蔚敏教授編寫的經(jīng)典教材中有關(guān)鏈表的應(yīng)用的一個章節(jié),但是在該章節(jié)中數(shù)據(jù)結(jié)構(gòu)及算法由偽代碼構(gòu)成,學(xué)生很難真正理解如何利用鏈表來實(shí)現(xiàn)一元多項(xiàng)式的四則運(yùn)算。
筆者在教學(xué)過程中已經(jīng)積累了可視化的多項(xiàng)式四則運(yùn)算程序[5],可以利用該應(yīng)用程序進(jìn)行課堂、課后的教學(xué)與學(xué)習(xí)。
2.2.1案例驅(qū)動鏈表中結(jié)點(diǎn)的教學(xué)
“結(jié)點(diǎn)”作為鏈表乃至樹和圖等各類數(shù)據(jù)結(jié)構(gòu)來說是一個非常重要的概念,而對于初學(xué)數(shù)據(jù)結(jié)構(gòu)的學(xué)生來說,大多數(shù)學(xué)生只掌握了基本數(shù)據(jù)類型的運(yùn)算,“結(jié)點(diǎn)”概念過于抽象,往往使學(xué)生摸不著頭腦,從而影響整個數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)。
通過教師講解一元多項(xiàng)式中的單項(xiàng)式如何在計(jì)算機(jī)中表示,即由系數(shù)(浮點(diǎn)型)、指數(shù)(整型)兩種基本數(shù)據(jù)類型構(gòu)成一個復(fù)雜數(shù)據(jù)類型;一個單項(xiàng)式就是一個多項(xiàng)式的一個結(jié)點(diǎn),利用這種方式使“鏈表中結(jié)點(diǎn)”這個比較抽象的概念具體化、形象化,進(jìn)一步引導(dǎo)學(xué)生——要描述和實(shí)現(xiàn)這樣一個非簡單類型的“結(jié)點(diǎn)”,需要用C++中的類或者結(jié)構(gòu)體來實(shí)現(xiàn)。
2.2.2案例驅(qū)動鏈表基本操作的教學(xué)
多個單項(xiàng)式“串成一串”便成為多項(xiàng)式,可以用“數(shù)組”來串聯(lián)這些單項(xiàng)式,也可以用“鏈條”來串聯(lián)這些單項(xiàng)式,教師可以一起與學(xué)生討論順序表和鏈表的各自的特點(diǎn)。這個案例主要體現(xiàn)鏈表的應(yīng)用,教師引導(dǎo)學(xué)生分組討論如何實(shí)現(xiàn)串聯(lián),即鏈表的初始化操作、結(jié)點(diǎn)插入鏈表以及從鏈表中刪除某個結(jié)點(diǎn)等一系列鏈表操作。
多項(xiàng)式的四則運(yùn)算特別是加、減法本質(zhì)上是鏈表的合并過程,而鏈表的合并過程也就是結(jié)點(diǎn)的插入操作。因此學(xué)生們在理解鏈表基本操作的基礎(chǔ)上可以進(jìn)一步學(xué)習(xí)其具體的應(yīng)用。
2.2.3案例驅(qū)動下鏈表實(shí)踐教學(xué)的改革
只有理論學(xué)習(xí)而沒有實(shí)踐,這樣的學(xué)習(xí)成效是不完整的,不同層次的學(xué)生可以利用案例進(jìn)行不同程度的學(xué)習(xí)。對于理論理解有困難的學(xué)生,他們可以通過上述圖形化界面的應(yīng)用程序“親眼看到”結(jié)點(diǎn)在鏈表中的變化,該程序是可操作的、互動式的,通過輸入數(shù)據(jù),可以幫助學(xué)生理解一個升序的一元多項(xiàng)式中插入一個任意單項(xiàng)式仍然要保持其升序狀態(tài),需要在在鏈表適當(dāng)?shù)奈恢貌迦虢Y(jié)點(diǎn)或者修改結(jié)點(diǎn)或者刪除結(jié)點(diǎn),等等;對于算法可以理解但是無法讀懂源程序的學(xué)生,可以通過學(xué)習(xí)、調(diào)試源代碼,達(dá)到從理論理解到實(shí)踐應(yīng)用的過渡;對于可以理解源代碼的學(xué)生,可以讓其嘗試編寫、添加一些具體的函數(shù),增強(qiáng)學(xué)生的動手能力。上述一元多項(xiàng)式四則運(yùn)算應(yīng)用程序即為筆者的學(xué)生開發(fā)完成。
對于這樣一個案例驅(qū)動的教學(xué)方式的改革實(shí)踐,僅僅有案例是不夠的,需要對傳統(tǒng)的教學(xué)模式和考試模式、課程組織方式等全方位立體化的改革。
3教學(xué)模式與考試模式的改革
3.1在教學(xué)方式上的改革
傳統(tǒng)的教學(xué)方式是以教師在課堂上講解知識點(diǎn),學(xué)生上機(jī)實(shí)踐以及課后做習(xí)題作為主要的教學(xué)模式,
這樣就容易造成前文中提到的學(xué)生動手實(shí)踐能力低,會考試卻看不懂程序,不會動手編程這樣的局面,達(dá)不到應(yīng)用型高等工科院校對學(xué)生的培養(yǎng)目標(biāo)。只有將教師講解、課堂討論、匯報(bào)或答辯、教師或?qū)W生總結(jié)等多種教學(xué)方式相結(jié)合,才可以發(fā)揮案例驅(qū)動教學(xué)以達(dá)到教學(xué)目的要求。
3.2在教學(xué)手段上要充分利用演示系統(tǒng)、精品課程網(wǎng)站等資源
一些演示系統(tǒng)和國家級精品課程網(wǎng)站的資源可以幫助教學(xué)進(jìn)行課堂教學(xué)以及學(xué)生課后學(xué)習(xí),例如,上海交通大學(xué)數(shù)據(jù)結(jié)構(gòu)為國家級精品課程,在該課程網(wǎng)站(http://jpkc.onlinesjtu.com/CourseShare/DataStructure/ Index.aspx )包含了相當(dāng)豐富的教學(xué)資源,如約瑟夫環(huán)問題、漢諾塔問題、迷宮問題、火車車廂重排、四皇后問題等算法的動態(tài)演示過程、解決思路、算法描述、參考代碼等;另外,該網(wǎng)站還提供了一些數(shù)據(jù)結(jié)構(gòu)中常用算法的動態(tài)交互操作實(shí)驗(yàn),如鏈表的插入和刪除、二叉樹遍歷、霍夫曼樹和霍夫曼編碼、聯(lián)通網(wǎng)的最小生成樹等。教師和學(xué)生可以充分利用這些非傳統(tǒng)的、動態(tài)交互式的應(yīng)用程序?qū)崿F(xiàn)使數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)不再單一化、抽象化。
3.3在考試模式上改變“一考定輸贏”的方式
我們借鑒國外Assignment形式,采用以小組為單位完成期末大作業(yè)、撰寫課程報(bào)告等多種方式相結(jié)合進(jìn)行考核。期末作業(yè)的內(nèi)容應(yīng)與教學(xué)過程中的案例相結(jié)合,讓學(xué)生們模仿完成類似的、難易得當(dāng)?shù)膽?yīng)用程序的開發(fā)。為避免學(xué)生們從網(wǎng)上下載源代碼等非誠信的方式來完成期末作業(yè),還要求他們撰寫課程報(bào)告并進(jìn)行匯報(bào)答辯。
由于學(xué)生個體的差異性,在組成小組時應(yīng)保證小組成員的多樣化,有的小組成員擅長整體分析,有的小組成員擅長程序辨析,有的小組成員擅長總結(jié)報(bào)告,等等,學(xué)生們通過分工合作來完成期末作業(yè)可以增強(qiáng)學(xué)生們的團(tuán)隊(duì)合作精神,也可以發(fā)揮各自的優(yōu)點(diǎn)和特長。
利用這種開放式的考試方式可以改變學(xué)生只在期末前夕用功學(xué)習(xí)就可以完成學(xué)業(yè)的現(xiàn)象,改變學(xué)生重理論輕實(shí)踐的思想,增強(qiáng)學(xué)生學(xué)習(xí)主動性,提高學(xué)生動手能力、表達(dá)能力。
4與其他專業(yè)課程結(jié)合,真正發(fā)揮其核心作用
在計(jì)算機(jī)專業(yè)或信息類學(xué)科專業(yè)中基本上都開設(shè)了C語言(或者C++)、面向?qū)ο笈c可視化程序設(shè)計(jì)等課程,數(shù)據(jù)結(jié)構(gòu)課程應(yīng)與這些課程相結(jié)合。
4.1在面向?qū)ο蟪绦蛟O(shè)計(jì)語言課程中體現(xiàn)數(shù)據(jù)結(jié)構(gòu)思想
而對于數(shù)據(jù)結(jié)構(gòu)而言,從上世紀(jì)90年代起國外已經(jīng)逐步采用用C++或Java描述的數(shù)據(jù)結(jié)構(gòu)教材,用C不能很好地描述數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型,只有使用面向?qū)ο蟪绦蛟O(shè)計(jì)語言中的類才能很自然地實(shí)現(xiàn)抽象數(shù)據(jù)類型的思想[1]。另外,目前軟件開發(fā)的主流方式仍然是采用面向?qū)ο蟮某绦蛟O(shè)計(jì),因此筆者建議在計(jì)算機(jī)等專業(yè)中應(yīng)開設(shè)C++課程,并以此作為計(jì)算機(jī)專業(yè)程序開發(fā)的主線語言,該課程應(yīng)先于數(shù)據(jù)結(jié)構(gòu)課程開設(shè)。
在學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)語言時,“類”和“對象”等概念非常抽象和難以理解,在教學(xué)過程中可以以數(shù)據(jù)結(jié)構(gòu)中的一些簡單化的案例作為這些抽象概念的具體化。例如在初學(xué)“類”時可以以前文中所提到的多項(xiàng)式為例學(xué)習(xí)如何構(gòu)造一個“多項(xiàng)式類”,有了一般的“多項(xiàng)式類”,那么具體的某個特定的參與運(yùn)算的多項(xiàng)式就是這個類的對象。以此達(dá)到抽象概念形象化的目的,使得這樣的重要概念變得容易理解。
4.2在數(shù)據(jù)結(jié)構(gòu)課程中利用C++等語言實(shí)現(xiàn)算法,提高學(xué)生動手能力
如果在數(shù)據(jù)結(jié)構(gòu)課程中使用偽代碼作為算法描述的代碼,學(xué)生理解算法困難,難以動手實(shí)現(xiàn)。因此在學(xué)習(xí)了C++等語言的基礎(chǔ)上,在數(shù)據(jù)結(jié)構(gòu)課程中所有數(shù)據(jù)結(jié)構(gòu)及算法應(yīng)以C++等語言作為描述語言,并要求學(xué)生在此基礎(chǔ)上完成各種作業(yè),提高動手能力。
4.3在可視化程序設(shè)計(jì)、信息論與編碼等其他專業(yè)課中體現(xiàn)數(shù)據(jù)結(jié)構(gòu)的應(yīng)用性
在面向?qū)ο笈c可視化程序設(shè)計(jì)課程學(xué)習(xí)的過程中,教師應(yīng)結(jié)合數(shù)據(jù)結(jié)構(gòu)中學(xué)習(xí)過程中的各案例,讓學(xué)生在可視化編程環(huán)境中利用面向?qū)ο蠹夹g(shù)開發(fā)這些案例的圖形化界面應(yīng)用程序。如前文中提到的各種案例的圖形化用戶界面的應(yīng)用程序的開發(fā),信息論中霍夫曼編碼的實(shí)現(xiàn),等等;從而提高學(xué)生對數(shù)據(jù)結(jié)構(gòu)的理解以及開發(fā)能力,并使課程設(shè)計(jì)變得言之有物。
5結(jié)語
案例教學(xué)能使理論與實(shí)踐更好地結(jié)合起來,通過對案例課題的分析、討論和實(shí)踐,可以更好地掌握理論及其實(shí)際應(yīng)用[3],以案例驅(qū)動整個數(shù)據(jù)課程的教學(xué)模式、考試模式等立體化的教學(xué)改革,培養(yǎng)高素養(yǎng)的應(yīng)用型人才。
參考文獻(xiàn):
[1]