南淑萍
(阜陽師范學(xué)院 計算機(jī)與信息學(xué)院,安徽 阜陽 236037)
《數(shù)據(jù)結(jié)構(gòu)》是計算機(jī)專業(yè)的核心基礎(chǔ)課程,目前已成為許多信息類相關(guān)專業(yè)的重要基礎(chǔ)課程,該課程在計算機(jī)學(xué)習(xí)特別是軟件設(shè)計和管理方面起到舉足輕重的作用。《數(shù)據(jù)結(jié)構(gòu)》課程不僅要考慮數(shù)據(jù)本身的數(shù)學(xué)性質(zhì),而且還涉及到計算機(jī)硬件范圍,與計算機(jī)軟件有著密切的聯(lián)系,所以這門課程是程序設(shè)計和實(shí)現(xiàn)編譯程序、操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)及其他系統(tǒng)程序的重要基礎(chǔ)?,F(xiàn)在很多非計算機(jī)專業(yè)對程序設(shè)計的要求也非常高,如何學(xué)好這門課程,已經(jīng)成為高校計算機(jī)教學(xué)中亟待探討的問題。
信息類專業(yè)的學(xué)生一般會在大學(xué)第三或第四學(xué)期開設(shè)《數(shù)據(jù)結(jié)構(gòu)》,學(xué)生在學(xué)習(xí)這門課程時只具有C語言(或者其他相關(guān)語言)的基礎(chǔ),對于程序設(shè)計的概念停留在簡單的語法和程序結(jié)構(gòu)上,而對于面向?qū)ο?、結(jié)構(gòu)化的程序設(shè)計理解甚少,至于軟件工程的思想更是一無所知。因此理解數(shù)據(jù)結(jié)構(gòu)的抽象理論就非常困難,算法的設(shè)計與分析更是無從下手。
一般的非計算機(jī)專業(yè)學(xué)習(xí)這門課程采取的都是3+1的教學(xué)模式,一周三節(jié)課的理論教學(xué)只能讓學(xué)生理解最基本的知識點(diǎn),實(shí)驗(yàn)課時的匱乏,導(dǎo)致學(xué)生只能簡單的把書上的算法簡單的驗(yàn)證一下,不能進(jìn)一步深入的將課程掌握的知識展開。
因?yàn)檎n時較少,老師為了完成教學(xué)大綱的知識點(diǎn),理論教學(xué)一直處于老師講授,學(xué)生聽的狀態(tài),互動較少,實(shí)驗(yàn)教學(xué)主要以學(xué)生驗(yàn)證算法,沒有自己的想法及創(chuàng)新。而課程設(shè)計更是為了完成任務(wù),過于強(qiáng)調(diào)結(jié)果,而不重視過程,沒有達(dá)到較好的課堂教學(xué)效果。
《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)的目的,在于將程序設(shè)計過程中總結(jié)而得到的數(shù)據(jù),通過重新組織和操作,用于程序設(shè)計的指導(dǎo)工作。但在實(shí)際教學(xué)中往往給學(xué)生造成深奧、抽象的印象,因此要想達(dá)到《數(shù)據(jù)結(jié)構(gòu)》課程理想的教學(xué)效果,應(yīng)該從以下幾個方面進(jìn)行改進(jìn)。
復(fù)習(xí)C語言中關(guān)于數(shù)組、指針、結(jié)構(gòu)體、函數(shù)等知識,以便提高閱讀代碼和設(shè)計算法的能力。數(shù)據(jù)結(jié)構(gòu)課程是在學(xué)生掌握計算機(jī)編程語言之后開設(shè)的一門重要的軟件課程,通常采用類C語言來描述算法。在《數(shù)據(jù)結(jié)構(gòu)》中,為了描述數(shù)據(jù)結(jié)構(gòu)和實(shí)現(xiàn)變成操作,經(jīng)常用到指針和結(jié)構(gòu)體部分的知識,而這兩部分屬于C語言高級編程部分,學(xué)生一般掌握得不夠深入,對于指針和結(jié)構(gòu)體編程有些陌生。在這樣的情況下,學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)》就更加顯得力不從心了。針對這一情況,將C語言的深入學(xué)習(xí)貫穿課程教學(xué)的全過程,在授課過程中,不斷補(bǔ)充和深化這方面的知識。
理論教學(xué)是整個教學(xué)中的重要部分,對學(xué)生能否學(xué)好數(shù)據(jù)結(jié)構(gòu)起到關(guān)鍵作用。很多同學(xué)都知道《數(shù)據(jù)結(jié)構(gòu)》的重要性,但是由于課程知識點(diǎn)較多,理論抽象,難以理解又產(chǎn)生懼怕心理,這時教師就應(yīng)該通過建立一個完善的知識鏈條,高度概括,抓住主線,幫助學(xué)生樹立起數(shù)據(jù)結(jié)構(gòu)的宏觀概念。
在教學(xué)中首先提出實(shí)際和學(xué)生息息相關(guān)的問題,抓住學(xué)生的興趣點(diǎn),讓學(xué)生思考問題的邏輯結(jié)構(gòu)以及要做的哪些操作。邏輯結(jié)構(gòu)相對比較直觀,根據(jù)學(xué)生以前掌握的程序設(shè)計基礎(chǔ),一般都能夠建立基本的設(shè)計思路。然后教師再依據(jù)一個主線——提出問題——分析邏輯結(jié)構(gòu)——抽象數(shù)據(jù)類型——存儲結(jié)構(gòu)(順序、鏈?zhǔn)?基本操作實(shí)現(xiàn)(算法)來講解問題,舉一反三,把學(xué)生提出的解法和教師所講解的方法對比,就能夠顯示出數(shù)據(jù)結(jié)構(gòu)的作用,這樣逐漸提高學(xué)生的學(xué)習(xí)興趣,更好地接受新的知識點(diǎn),變被動為主動。學(xué)生的思維能力、自學(xué)能力和理解知識的能力都能得到充分的發(fā)揮,教師在講解知識點(diǎn)時就能起到“點(diǎn)睛”的作用。
數(shù)據(jù)結(jié)構(gòu)和算法是密不可分的,數(shù)據(jù)結(jié)構(gòu)知識點(diǎn)的理解很大程度上取決于算法的理解上,所以對于學(xué)好數(shù)據(jù)結(jié)構(gòu)首當(dāng)其沖是算法的理解?!稊?shù)據(jù)結(jié)構(gòu)》教材由于篇幅的限制,以及為了使得算法能夠很容易上機(jī)實(shí)驗(yàn),很多都是使用類高級語言來編寫的,對于非計算機(jī)專業(yè)的學(xué)生來說,語言的基礎(chǔ)較差,當(dāng)涉及到算法時,很多同學(xué)把主要的精力都用在了理解每一句話上,以及細(xì)小的語法結(jié)構(gòu),而數(shù)據(jù)結(jié)構(gòu)主要讓學(xué)生學(xué)習(xí)的是算法的思想,并非高級語言,所以首先把算法用于易理解的偽代碼描述就是一個很好的選擇,學(xué)生理解了算法的思想,建立起數(shù)據(jù)結(jié)構(gòu)的概念之后,再在實(shí)驗(yàn)課上轉(zhuǎn)化成高級語言來實(shí)現(xiàn),這樣就減小了學(xué)生因?yàn)楦呒壵Z言的基礎(chǔ)差而學(xué)不好數(shù)據(jù)結(jié)構(gòu)的問題。
偽代碼的描述畢竟還是局限于抽象的理解上,而教材在呈現(xiàn)此一單元時也有多方面的限制,所以此時可視化軟件的使用就很重要,嚴(yán)蔚敏版的《數(shù)據(jù)結(jié)構(gòu)》就有簡易的算法演示的功能,學(xué)生可以在教師講解偽代碼的基礎(chǔ)上,結(jié)合可視化軟件,更好的理解算法的流程以及高級語言的使用。實(shí)踐證明通過可視化軟件的演示比文字?jǐn)⑹龈兄趯W(xué)生了解和記憶,尤其當(dāng)學(xué)生可以通過參數(shù)的輸入去比對不同的算法展示時,尤為明顯。數(shù)據(jù)結(jié)構(gòu)的可視化教學(xué)軟件在國外獲得很好效果,各種產(chǎn)品豐富多彩,然而,國內(nèi)這方面的工作卻做得很少。
教師以學(xué)生熟知的字符串作為例子,按照步驟講解字符串的操作,對比C語言中字符串的定義方法及應(yīng)用,這樣學(xué)生既能對以前的知識有更深入的理解,又能對新的知識充滿好奇,同時也熟悉了數(shù)據(jù)結(jié)構(gòu)的整個學(xué)習(xí)方法和實(shí)驗(yàn)步驟。
圖解分析如下:

通過一學(xué)期的理論學(xué)習(xí)和實(shí)驗(yàn)教學(xué),學(xué)生基本上理解了數(shù)據(jù)結(jié)構(gòu)的基本理論和操作方法,但是在遇到一個實(shí)際問題時,怎么能解決問題,對于學(xué)生來講是一個質(zhì)的飛躍。教師首先要講解一個具體的例子,從題目分析,定義數(shù)據(jù)結(jié)構(gòu),算法分析,及最后的程序設(shè)計及調(diào)試的一個完整過程,讓學(xué)生對數(shù)據(jù)結(jié)構(gòu)課程設(shè)計有一個更深更形象的認(rèn)識,最后由多名同學(xué)組成軟件開發(fā)團(tuán)隊的形式,共同完成一個大的課題。
1.首先給學(xué)生補(bǔ)充軟件工程的知識。通過一個案例的分析解決過程形象地理解軟件工程的思想,體會軟件開發(fā)的整個流程,最終對自己的課程設(shè)計有一個整體的考慮。
2.分析案例中的邏輯結(jié)構(gòu)及基本操作,定制合適的數(shù)據(jù)結(jié)構(gòu)。根據(jù)具體的例子教師給予詳細(xì)的分析。然后使用不同數(shù)據(jù)結(jié)構(gòu)來解決同一問題,讓學(xué)生體會性能和功能的區(qū)別,學(xué)生在此過程中可以在與教師的互動討論,提高對各種數(shù)據(jù)結(jié)構(gòu)的認(rèn)識,從而選擇適合自己課程設(shè)計中的數(shù)據(jù)結(jié)構(gòu),做出多種算法。
3.代碼編寫完畢,調(diào)試是一個很大的工程,所以一般要求學(xué)生不要急于求成,養(yǎng)成良好的編程習(xí)慣。代碼要定義規(guī)范、模塊清楚、可讀性好,在此過程中教師可以輔助多媒體手段演示代碼的編制調(diào)試過程,讓學(xué)生體會到規(guī)范的代碼編寫在調(diào)試時事半功倍的效果。
4.盡量避免課程設(shè)計抄襲的現(xiàn)象。大多數(shù)學(xué)生還是愿意自主完成課程設(shè)計的,這是一次很好的實(shí)踐過程,也是對數(shù)據(jù)結(jié)構(gòu)理解的一個質(zhì)的飛躍。
《數(shù)據(jù)結(jié)構(gòu)》是理論性很強(qiáng)的課程,非計算機(jī)專業(yè)的學(xué)生基礎(chǔ)較差,所以單純依靠教師的講解很難完整的理解,課后的練習(xí)必不可少??梢酝ㄟ^課程網(wǎng)站,學(xué)生通過練習(xí)題的提交,與教師互動,把知識點(diǎn)細(xì)化深入掌握,把不理解的知識點(diǎn)及時通過網(wǎng)絡(luò)同教師交流,教師也可以通過學(xué)生反映過來的問題加以總結(jié)課上重點(diǎn)講解,達(dá)到教學(xué)相長的效果。
通過切身教學(xué)經(jīng)驗(yàn),非計算機(jī)專業(yè)的學(xué)生有專業(yè)基礎(chǔ)普遍薄弱,《數(shù)據(jù)結(jié)構(gòu)》學(xué)習(xí)目的不明確,理論與實(shí)踐脫節(jié)的特征。在教學(xué)過程中通過以上幾方面的措施,使學(xué)生學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)》的積極性有所增強(qiáng),更明確的理解了計算機(jī)程序設(shè)計的過程,更多的鍛煉了學(xué)生的動手能力,真正做到理論和實(shí)踐相結(jié)合。
參考文獻(xiàn):
[1]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,1997.
[2]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)題集[M].(第2版,配演示軟件).北京:清華大學(xué)出版社,1999.
[3]黃琴,唐素勤.非計算機(jī)專業(yè)數(shù)據(jù)結(jié)構(gòu)教學(xué)的實(shí)踐與創(chuàng)新[J].計算機(jī)教育,2011,(3).
[4]陳慶章,何文秀.國外可視化數(shù)據(jù)結(jié)構(gòu)軟件及其比較[J].計算機(jī)教育,2005,(2).