文章編號(hào):1672-5913(2008)06-0061-02
摘要:本文針對(duì)于非計(jì)算機(jī)專業(yè)“數(shù)據(jù)結(jié)構(gòu)”教學(xué)過程中存在的主要問題,闡述了如何在課堂教學(xué)激發(fā)學(xué)生的思考,發(fā)揮學(xué)生的主動(dòng)性以及如何培養(yǎng)學(xué)生的實(shí)踐興趣,提高實(shí)踐能力。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);互動(dòng)式;啟發(fā)式;多樣化
中圖分類號(hào):G642
文獻(xiàn)標(biāo)識(shí)碼:B
1引言
非計(jì)算機(jī)專業(yè)開設(shè)的“數(shù)據(jù)結(jié)構(gòu)”課和計(jì)算機(jī)專業(yè)開設(shè)的“數(shù)據(jù)結(jié)構(gòu)”課相比,重要的差別之一就是授課時(shí)間和實(shí)驗(yàn)時(shí)間相對(duì)較少,學(xué)生程序設(shè)計(jì)方面的基礎(chǔ)薄弱。為了使非計(jì)算機(jī)專業(yè)的學(xué)生在這種有限的情況下掌握“數(shù)據(jù)結(jié)構(gòu)”的基本內(nèi)容,采用互動(dòng)式的教學(xué)方法來提高學(xué)生的積極性顯得十分重要和必要。
2教學(xué)過程中遇到的問題
2.1先行課的掌握不足
C語言程序設(shè)計(jì)是“數(shù)據(jù)結(jié)構(gòu)”的前導(dǎo)課程之一。通常情況下學(xué)生在剛開始學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程,對(duì)C語言中的數(shù)組、結(jié)構(gòu)體、指針這三種數(shù)據(jù)類型的認(rèn)識(shí)和理解不深,甚至根本不理解,這成為了學(xué)生數(shù)據(jù)結(jié)構(gòu)的主要絆腳石,直接影響教學(xué)進(jìn)度,使得教學(xué)時(shí)間大部分花費(fèi)在基本概念上。部分學(xué)生對(duì)函數(shù)、函數(shù)的參數(shù)、函數(shù)的返回值、函數(shù)調(diào)用的理解也不夠,對(duì)遞歸及遞歸過程更是難以理解,而這些內(nèi)容在數(shù)據(jù)結(jié)構(gòu)課程中使用頻率很高。因此,在數(shù)據(jù)結(jié)構(gòu)教學(xué)初期,盡管老師費(fèi)盡唇舌,學(xué)生仍然模糊不清,致使教學(xué)效果不理想,學(xué)生甚至?xí)适?duì)該課程學(xué)習(xí)的興趣和信心。
2.2教材理論性太強(qiáng)
現(xiàn)有的“數(shù)據(jù)結(jié)構(gòu)”教材無論是C語言版還是JAVA版的,都是以基于類的思想對(duì)數(shù)據(jù)類型進(jìn)行描述,這樣的描述形式對(duì)象數(shù)據(jù)類型的定義簡(jiǎn)明清晰,有利于培養(yǎng)學(xué)生良好的編程習(xí)慣。但在開設(shè)課程時(shí),學(xué)生一般只學(xué)習(xí)過C語言,對(duì)于用類進(jìn)行編程掌握得并不熟練,往往對(duì)教材上的描述感到很抽象,難以具體編程實(shí)現(xiàn),甚至部分學(xué)生會(huì)直接將教材上類C語言的描述當(dāng)成程序來理解。抽象數(shù)據(jù)類型是指一個(gè)數(shù)學(xué)模型以及定義在該模型上的一組操作,但在教學(xué)過程中,我們發(fā)現(xiàn)學(xué)生對(duì)于抽象數(shù)據(jù)類型的理解往往局限于前者,而忽略了后者。對(duì)于數(shù)據(jù)類型的數(shù)學(xué)模型以及數(shù)學(xué)特征較容易理解,而對(duì)于數(shù)據(jù)模型的操作則容易理解成是一個(gè)獨(dú)立的部分,出現(xiàn)這種現(xiàn)象的主要原因是面向?qū)ο笾R(shí)的欠缺。
2.3缺乏上機(jī)的興趣
學(xué)生不理解抽象數(shù)據(jù)類型的定義及相應(yīng)的存儲(chǔ)表示,難以實(shí)現(xiàn)算法與程序之間的轉(zhuǎn)換,更談不上將所學(xué)的數(shù)據(jù)結(jié)構(gòu)中的算法應(yīng)用于實(shí)際問題上,從而降低了上機(jī)興趣和學(xué)習(xí)“數(shù)據(jù)結(jié)構(gòu)”的信心。
3啟發(fā)式教學(xué)的探討
3.1首先解決先行課的不足
教師可根據(jù)學(xué)生對(duì)C語言掌握的情況,有目的地講授一些數(shù)據(jù)結(jié)構(gòu)所涉及的C程序語言的疑難點(diǎn),如動(dòng)態(tài)存儲(chǔ)函數(shù)使用、靜態(tài)數(shù)組、指針等知識(shí),培養(yǎng)他們建立程序設(shè)計(jì)的思想體系,逐步提高學(xué)生閱讀和理解算法的能力。在教學(xué)中以學(xué)生為主體,改變“填鴨式”的做法,設(shè)計(jì)“提問—解決方法—再提問”的方式讓學(xué)生參與,用問題去激發(fā)學(xué)生思考,引導(dǎo)他們?nèi)绾谓鉀Q問題。
3.2理論教學(xué)可以采用多樣化的方式
3.2.1盡量用生活中實(shí)例來講解基本概念
由于“數(shù)據(jù)結(jié)構(gòu)”理論性很強(qiáng),直接從定義出發(fā)講解相關(guān)概念學(xué)生不易接受,在教學(xué)過程中,結(jié)合日常生活中的事例可大大激發(fā)學(xué)生的興趣,從而調(diào)動(dòng)學(xué)生的求知欲。
例如學(xué)生對(duì)鏈表這種結(jié)構(gòu)體不太理解,可以直接以女生手上帶的手鏈為例進(jìn)行講解,手鏈解開是一個(gè)帶有頭結(jié)點(diǎn)的鏈表,帶上后是一個(gè)環(huán)鏈。在講解棧和隊(duì)列這一章時(shí),分別舉出日常生活中的事例。如棧的例子,在刷洗盤子時(shí),依次把每個(gè)洗凈的盤子摞到洗好的盤子上面,相當(dāng)于進(jìn)棧;取用盤子時(shí),又從上面一個(gè)接一個(gè)地向下拿,相當(dāng)于出棧。隊(duì)列的例子,以學(xué)生在食堂打飯為例,所排的隊(duì)就是一個(gè)隊(duì)列,剛來打飯的同學(xué)接到隊(duì)尾(即進(jìn)隊(duì)),站在隊(duì)首的人打完飯后離開(即出隊(duì)),當(dāng)最后一人離隊(duì)后,則整個(gè)隊(duì)列為空。
通過引用實(shí)例既形象又直觀,進(jìn)而使學(xué)生更加明確結(jié)構(gòu)與算法的作用,提高學(xué)生運(yùn)用算法解決實(shí)際問題的能力。
3.2.2加強(qiáng)多媒體教學(xué)方式的使用
多媒體課件生動(dòng)、形象、圖文并茂、交互性強(qiáng),非常適合數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)。在教學(xué)中可以用幻燈片展現(xiàn)知識(shí)點(diǎn),用Flash動(dòng)畫演示算法的動(dòng)態(tài)執(zhí)行過程。這樣可以把學(xué)生對(duì)所學(xué)知識(shí)的理性認(rèn)識(shí)和感性認(rèn)識(shí)有機(jī)地結(jié)合起來。比如在講解二叉樹的遍歷和線索化的時(shí)候,可以通過幻燈片講解遍歷和線索化二叉樹的過程。由于遍歷的過程是一個(gè)遞歸的過程,許多學(xué)生開始掌握起來有些困難。如果配以Flash制作的動(dòng)畫來模擬遍歷的全過程,可以取得良好的教學(xué)效果。
3.2.3創(chuàng)新思維的培養(yǎng)
可用問題去激發(fā)學(xué)生去學(xué)習(xí),引發(fā)學(xué)生興趣、誘發(fā)學(xué)習(xí)動(dòng)機(jī)?!皵?shù)據(jù)結(jié)構(gòu)”教學(xué)中,特別是算法設(shè)計(jì)中,可以設(shè)計(jì)許多問題。如在介紹了字典的順序檢索、二分法檢索、分塊檢索等算法后,可以引導(dǎo)學(xué)生分析這些檢索方法的共同特點(diǎn):通過待查元素x與關(guān)鍵碼的“比較”來實(shí)現(xiàn)檢索,檢索的效率與比較次數(shù)相關(guān),減少比較次數(shù)即降低平均查找長度,從而提高檢索效率。就此提出設(shè)想:能否有一個(gè)函數(shù)H(x)來計(jì)算待查元素x的存儲(chǔ)地址?這樣,給定待查元素x,只需計(jì)算H(x),即可查找到元素x,這是一種非常理想的檢索方法,檢索運(yùn)算平均查找長度可能達(dá)到常數(shù)級(jí)。
不斷創(chuàng)設(shè)問題情景,將教材上的平面知識(shí)、技能點(diǎn)轉(zhuǎn)化成問題的形式展現(xiàn)在學(xué)生面前,引發(fā)學(xué)生創(chuàng)新的興趣,增強(qiáng)學(xué)生思維的內(nèi)驅(qū)力。
3.3以學(xué)生為主體,培養(yǎng)學(xué)生實(shí)踐能力
3.3.1實(shí)時(shí)了解學(xué)生的上機(jī)興趣
在教學(xué)實(shí)踐中發(fā)現(xiàn),在整個(gè)學(xué)期的實(shí)驗(yàn)過程中,學(xué)生的興趣表現(xiàn)出如下圖所示的態(tài)勢(shì):
初期:學(xué)生編程語言工具基礎(chǔ)不夠扎實(shí),對(duì)課程理解不夠,編程能力較差,從而實(shí)驗(yàn)興趣偏低。
中期:學(xué)生經(jīng)過一段時(shí)間的學(xué)習(xí)和調(diào)整,對(duì)課程所要求的基礎(chǔ)實(shí)驗(yàn)有所了解,能實(shí)現(xiàn)和調(diào)試一些算法,編程能力有所加強(qiáng),實(shí)驗(yàn)興趣得到很大提高。
后期:開設(shè)的實(shí)驗(yàn)以綜合性實(shí)驗(yàn)為主,實(shí)驗(yàn)難度加大,學(xué)生表現(xiàn)出綜合應(yīng)用能力較差,實(shí)驗(yàn)興趣又有所下滑。
3.3.2理論與實(shí)踐相結(jié)合,激發(fā)學(xué)生的興趣
在“數(shù)據(jù)結(jié)構(gòu)”課程的學(xué)習(xí)過程中,學(xué)生比較困擾的是理論不能和實(shí)踐相結(jié)合,不知道學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)能做什么。所以在課程講述中,除了要求學(xué)生上機(jī)實(shí)現(xiàn)基本算法并完成一定數(shù)量的較大的典型的程序外,更應(yīng)給學(xué)生大量的實(shí)例,提高學(xué)生解決實(shí)際問題的能力。例如:堆棧的應(yīng)用——編譯器中表達(dá)式的處理、火車調(diào)度問題;隊(duì)列和堆棧的綜合應(yīng)用——實(shí)現(xiàn)停車場(chǎng)管理;二叉樹和樹的應(yīng)用——產(chǎn)品分類過程、哈夫曼樹用于通信編碼、下棋問題;圖的應(yīng)用——地圖著色、旅游最短路徑問題等。這些程序的實(shí)現(xiàn)不僅有助于數(shù)據(jù)結(jié)構(gòu)課程的學(xué)習(xí),更主要的是通過這些程序的實(shí)現(xiàn)大大提高了學(xué)生編程能力和解決實(shí)際問題的實(shí)踐能力。
3.3.3注重對(duì)實(shí)驗(yàn)結(jié)果的分析
實(shí)驗(yàn)結(jié)果包括學(xué)生按照實(shí)驗(yàn)要求開發(fā)的所有源程序、源程序的說明文件(說明上交程序所在的目錄及主程序文件名,如果需要安裝,要有安裝說明等)、實(shí)驗(yàn)報(bào)告(包括算法的主要思想、主要數(shù)據(jù)結(jié)構(gòu)、算法的基本實(shí)現(xiàn)、調(diào)試過程、結(jié)論及心得)。對(duì)算法要注釋,書寫工整、繪圖規(guī)范,正確引用術(shù)語以及實(shí)驗(yàn)環(huán)節(jié)的總結(jié)??偨Y(jié)可以包括實(shí)驗(yàn)過程的收獲、遇到的問題、解決問題的思考過程、程序調(diào)試能力的思考、對(duì)數(shù)據(jù)結(jié)構(gòu)這門課程的思考、在實(shí)驗(yàn)過程中對(duì)課程的認(rèn)識(shí)等內(nèi)容。教師可以針對(duì)學(xué)生實(shí)驗(yàn)報(bào)告的情況,對(duì)實(shí)驗(yàn)中出現(xiàn)的問題進(jìn)行剖析,提高學(xué)生的實(shí)踐能力。
參考文獻(xiàn)
[1] 張涌逸. “數(shù)據(jù)結(jié)構(gòu)”互動(dòng)式教學(xué)探討[J]. 電腦知識(shí)與技術(shù),2006,(6):218.
[2] 周云,李革. 非計(jì)算機(jī)專業(yè)“數(shù)據(jù)結(jié)構(gòu)”實(shí)驗(yàn)教學(xué)的探索與實(shí)踐[J]. 計(jì)算機(jī)教育,2007,(6).
[3] 嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)[M]. 北京:清華大學(xué)出版社,2006.
[4] Sartaj Sahmi. 數(shù)據(jù)結(jié)構(gòu)算法與應(yīng)用C++語言描述(英文版)[M]. 北京:機(jī)械工業(yè)出版社,2002.