摘 要: 《數(shù)據(jù)結(jié)構(gòu)》是一門十分重要的核心課程,同時(shí)也是一門較為難學(xué)的基礎(chǔ)課程。學(xué)生在學(xué)習(xí)過程中,普遍反映該課程存在難懂、難做、難用的問題。在課程教學(xué)過程中,教師應(yīng)培養(yǎng)學(xué)生的興趣,彌補(bǔ)前期知識(shí)的不足,精心設(shè)計(jì)教學(xué)方案,合理組織教學(xué)內(nèi)容,加強(qiáng)實(shí)踐性教學(xué),促進(jìn)學(xué)生對講授知識(shí)的理解,進(jìn)而提高學(xué)生分析問題和解決問題的能力。
關(guān)鍵詞: 高職高專 數(shù)據(jù)結(jié)構(gòu)教學(xué) 問題 教學(xué)改革
1.引言
數(shù)據(jù)結(jié)構(gòu)是程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),也是設(shè)計(jì)和實(shí)現(xiàn)編譯程序、數(shù)據(jù)庫程序、操作系統(tǒng)等系統(tǒng)程序的重要基礎(chǔ),它將數(shù)學(xué)、計(jì)算機(jī)硬件和計(jì)算機(jī)軟件課程有機(jī)融合在一起,其目的和任務(wù)是使學(xué)生能夠根據(jù)實(shí)際問題的需要選擇合適的數(shù)據(jù)結(jié)構(gòu)和算法,提高編寫軟件和解決實(shí)際問題的能力。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)內(nèi)容廣、概念多、算法理解和編寫難度大,具有很強(qiáng)的抽象性,學(xué)生普遍反映該課程難懂、難做、難用,沒有學(xué)習(xí)興趣。但是,從安徽省高校2011年計(jì)算機(jī)專業(yè)專升本的考試科目安排來看,專業(yè)課的考試基本上都有數(shù)據(jù)結(jié)構(gòu)。從歷年的大自考成績來看,數(shù)據(jù)結(jié)構(gòu)的成績普遍不好,很多同學(xué)的前進(jìn)步伐就受阻于數(shù)據(jù)結(jié)構(gòu)。高職高專數(shù)據(jù)結(jié)構(gòu)教學(xué)的改革迫在眉睫。
2.存在的問題
從教學(xué)過程來看,高職高專學(xué)生在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)過程中主要有如下問題。
?。?)高職高專計(jì)算機(jī)專業(yè)的學(xué)生是文理兼招,一些文科學(xué)生對數(shù)據(jù)結(jié)構(gòu)中抽象性知識(shí)理解不夠,希望老師能夠把抽象性問題盡可能地現(xiàn)實(shí)化,普遍存在算法看不懂的問題。
?。?)一些學(xué)生總認(rèn)為數(shù)據(jù)結(jié)構(gòu)是一門理論課,感到很枯燥、乏味,學(xué)習(xí)興趣不濃。
?。?)學(xué)生程序設(shè)計(jì)能力不足。學(xué)生在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程時(shí),由于前導(dǎo)課程掌握不好或沒有熟練掌握,因此在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程時(shí)感到很困難。數(shù)據(jù)結(jié)構(gòu)中的算法多數(shù)由類C或C++實(shí)現(xiàn),在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)之前,學(xué)生應(yīng)該已經(jīng)系統(tǒng)地學(xué)習(xí)過C或C++的相關(guān)知識(shí)。但是由于學(xué)生剛剛開始接觸程序設(shè)計(jì)語言,對計(jì)算機(jī)語言的許多約定理解得不是很透徹,用計(jì)算機(jī)解決問題不可能得心應(yīng)手,程序設(shè)計(jì)水平有待進(jìn)一步得到提高。
?。?)傳統(tǒng)教學(xué)模式難以滿足數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)要求。由于以教師為中心,忽視了學(xué)生的主動(dòng)性和創(chuàng)造性,作為認(rèn)知主體的學(xué)生在整個(gè)教學(xué)過程中都始終處于被動(dòng)的知識(shí)接受者的地位,學(xué)生學(xué)習(xí)的主動(dòng)性被忽視。
3.提高學(xué)習(xí)興趣
“興趣是最好的老師”,興趣是學(xué)生強(qiáng)大的學(xué)習(xí)動(dòng)力。數(shù)據(jù)結(jié)構(gòu)理論性很強(qiáng),概念的抽象性,算法的精典性和復(fù)雜性,描述語言的先進(jìn)性,使學(xué)生在學(xué)習(xí)過程中感覺空洞、抽象,難以理解和掌握,對實(shí)際應(yīng)用益處不大,學(xué)習(xí)起來沒有興趣,挫傷了學(xué)生的學(xué)習(xí)積極性。因此,提高學(xué)生的學(xué)習(xí)興趣、消除畏難情緒,進(jìn)而提高學(xué)生的學(xué)習(xí)積極性就顯得尤為重要。在第一堂課教師應(yīng)把貼近生活的一些例子引入課程,以激發(fā)學(xué)生的好奇心和興趣,并在教學(xué)過程中自始至終強(qiáng)調(diào)應(yīng)用性。在介紹算法時(shí)要注意補(bǔ)充一些算法的實(shí)際背景知識(shí),可以用于解決哪些實(shí)際問題,通過這種應(yīng)用背景知識(shí)的介紹和來源于實(shí)際經(jīng)驗(yàn)的聯(lián)想來架設(shè)理論聯(lián)系實(shí)際的橋梁。這樣既可維持學(xué)生的學(xué)習(xí)興趣,增強(qiáng)學(xué)生學(xué)習(xí)的自主性,又可提高學(xué)生解決實(shí)際問題的能力。對于“數(shù)據(jù)結(jié)構(gòu)”來說,教師的“教”固然重要,但學(xué)生的“學(xué)”也極其關(guān)鍵。當(dāng)然,學(xué)生的“學(xué)”不應(yīng)該是被動(dòng)地“學(xué)”,而應(yīng)該是主動(dòng)地“學(xué)”、自覺自愿地“學(xué)”,只有這樣,才能充分發(fā)揮主觀能動(dòng)性的作用,真正把學(xué)習(xí)搞好。教師應(yīng)當(dāng)大力倡導(dǎo)學(xué)生進(jìn)行自主學(xué)習(xí),鼓勵(lì)他們積極探索、大膽創(chuàng)新,不斷提高自學(xué)能力,分析問題、解決問題的能力。對于授課內(nèi)容,學(xué)生在課前要適當(dāng)預(yù)習(xí),課后要認(rèn)真復(fù)習(xí),上課時(shí)則要專心聽講,并做好筆記。一般來說,課前預(yù)習(xí)無需花費(fèi)太多的時(shí)間,只要粗略地看一下,有所了解即可,而課后復(fù)習(xí)則要及時(shí)、全面,要根據(jù)上課時(shí)老師的講解和自己所作的筆記,反復(fù)研讀課本的有關(guān)內(nèi)容,直至真正理解、掌握為止。
4.解決基礎(chǔ)不足問題
C語言程序設(shè)計(jì)是數(shù)據(jù)結(jié)構(gòu)的前導(dǎo)課程之一,學(xué)生對它的掌握程度,直接關(guān)系到數(shù)據(jù)結(jié)構(gòu)的教學(xué)效果。C語言極具靈活性,對于剛剛學(xué)完C語言程序設(shè)計(jì)的學(xué)生而言,運(yùn)用不一定自如。另外,C語言難點(diǎn)是指針、函數(shù)、數(shù)組作為函數(shù)參數(shù),以及結(jié)構(gòu)體類型,等等,而在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)過程中主要運(yùn)用這些知識(shí)來分析、解決問題。對于大部分學(xué)生來說,C語言運(yùn)用能力不是很強(qiáng),如果上課時(shí)直接切入主題,他們就有“云遮霧罩”的感覺。如何解決這個(gè)問題呢?我們可以利用一到兩次課時(shí)間來復(fù)習(xí)C語言的相關(guān)知識(shí),特別是指針、數(shù)組和結(jié)構(gòu)體等,也可以將這些學(xué)時(shí)融入到教學(xué)進(jìn)度表中,在復(fù)習(xí)時(shí)并不是面面俱到,而是將與本課相關(guān)的內(nèi)容加以歸納總結(jié),這樣既可以復(fù)習(xí)以前的知識(shí),加深印象,強(qiáng)化理解,又可以為數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)作鋪墊。
5.精心設(shè)計(jì)教學(xué)方案,合理組織教學(xué)內(nèi)容
數(shù)據(jù)結(jié)構(gòu)課教學(xué)內(nèi)容繁多、零散,主要內(nèi)容有:數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計(jì)與分析的基本知識(shí),各種基本數(shù)據(jù)(線性表、棧、隊(duì)列、樹、圖等)結(jié)構(gòu)的定義,存儲(chǔ)結(jié)構(gòu)、相應(yīng)的算法及應(yīng)用,等等,相互之間的銜接線索少,使人感覺內(nèi)容零散,沒有一個(gè)整體的知識(shí)框架體系。往往由于教學(xué)內(nèi)容多,難取舍,造成教學(xué)過程中面面俱到,重點(diǎn)、難點(diǎn)不突出,學(xué)生理解困難,教學(xué)效果不理想。鑒于以上問題,在數(shù)據(jù)結(jié)構(gòu)教學(xué)中,應(yīng)該將書本的內(nèi)容進(jìn)行教學(xué)上的分類,對于線性表需要重點(diǎn)講述,因?yàn)閯e的章節(jié)的算法實(shí)現(xiàn)歸根結(jié)底都要轉(zhuǎn)變到線性表上來實(shí)現(xiàn),所以對該章的算法講解要利用多媒體教學(xué)的優(yōu)點(diǎn),通過Flash作品,讓學(xué)生明白數(shù)據(jù)結(jié)點(diǎn)的添加和刪除在內(nèi)存中的變化和算法實(shí)現(xiàn)。由于算法都是用類C語言描述的,許多學(xué)生以為把算法直接變成C語言就可以運(yùn)行了,發(fā)生錯(cuò)誤后就不知所措,因此要盡量用程序的方式來講解算法,讓學(xué)生知道算法在程序中的位置,知道整個(gè)程序的來龍去脈,也為以后章節(jié)的實(shí)踐打下基礎(chǔ)。另外,對數(shù)據(jù)結(jié)構(gòu)中的各種基本數(shù)據(jù)結(jié)構(gòu)及其算法的教學(xué)過程,可以統(tǒng)一到解決現(xiàn)實(shí)問題的具體過程當(dāng)中。首先提出現(xiàn)實(shí)生活中的問題,然后介紹為解決問題所涉及的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu),再分析、設(shè)計(jì)和對比相關(guān)的算法,最后獲得問題的解答。這樣,在教學(xué)過程中,依據(jù)提出問題—解決問題這一思路,不但能把繁雜的教學(xué)內(nèi)容進(jìn)行有效的組織,而且能實(shí)現(xiàn)理論和實(shí)踐的緊密結(jié)合。
6.加強(qiáng)實(shí)踐環(huán)節(jié)
數(shù)據(jù)結(jié)構(gòu)是一門實(shí)踐性很強(qiáng)的課程,培養(yǎng)并提高學(xué)生的實(shí)踐能力是其教學(xué)重點(diǎn)之一。對于各種數(shù)據(jù)結(jié)構(gòu)來說,其存儲(chǔ)結(jié)構(gòu)與各種算法的具體實(shí)現(xiàn),都必須借助于一定的程序設(shè)計(jì)語言(如C語言),并通過上機(jī)實(shí)驗(yàn)來加以驗(yàn)證。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的最終目的,主要就是為了提高程序設(shè)計(jì)的效率與水平,并養(yǎng)成良好的程序設(shè)計(jì)習(xí)慣。因此,從某種意義上說,學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的過程,也就是進(jìn)行程序設(shè)計(jì)訓(xùn)練的過程。在數(shù)據(jù)結(jié)構(gòu)的教學(xué)過程中,理論課與實(shí)驗(yàn)課應(yīng)當(dāng)并重。教師應(yīng)當(dāng)切實(shí)抓好實(shí)驗(yàn)課的教學(xué),規(guī)范實(shí)驗(yàn)的步驟與過程,以確保能達(dá)到預(yù)期的教學(xué)效果與教學(xué)目的。由于“數(shù)據(jù)結(jié)構(gòu)”中的算法大多采用結(jié)構(gòu)類型的數(shù)組或指針來加以描述,并編寫為函數(shù)的形式,因此,應(yīng)重點(diǎn)要求學(xué)生熟練C語言中與數(shù)組、指針、結(jié)構(gòu)類型,以及分支與循環(huán)結(jié)構(gòu)程序、函數(shù)等有關(guān)的內(nèi)容,并掌握相應(yīng)的編程技術(shù)。在實(shí)驗(yàn)的過程中,教師應(yīng)適當(dāng)提供或講解相應(yīng)的“示范程序”(即教師自己所編寫的完整的算法程序),以便讓學(xué)生盡快掌握要點(diǎn)。例如,對于最簡單的順序表(即線性表順序存儲(chǔ)結(jié)構(gòu)),最基本的算法有順序表的查找、插入與刪除等。首先,教師可分別提供查找、插入算法的“示范程序”,并對其進(jìn)行詳細(xì)的分析講解,然后讓學(xué)生加以模仿,并編寫出單獨(dú)的刪除算法程序。
7.結(jié)語
《數(shù)據(jù)結(jié)構(gòu)》是一門概念準(zhǔn)確、組織嚴(yán)謹(jǐn)?shù)恼n程。該課程的學(xué)習(xí)是復(fù)雜程序設(shè)計(jì)的訓(xùn)練過程,其目標(biāo)是培養(yǎng)學(xué)生敏捷的抽象思維能力,培養(yǎng)學(xué)生嚴(yán)謹(jǐn)?shù)倪壿嬎季S能力,培養(yǎng)學(xué)生強(qiáng)大的算法設(shè)計(jì)能力。只有采用先進(jìn)的教學(xué)方法和手段,才能取得良好的教學(xué)效果。
數(shù)據(jù)結(jié)構(gòu)課程是計(jì)算機(jī)科學(xué)教育的一個(gè)重要組成部分,是計(jì)算機(jī)相關(guān)專業(yè)重要的理論基礎(chǔ)課程,具有特殊地位及顯著特點(diǎn)。如何通過課程的學(xué)習(xí),培養(yǎng)學(xué)生的數(shù)據(jù)抽象能力,獲得求解問題的方法,提高學(xué)生的創(chuàng)新能力,這個(gè)問題值得廣大任課老師不斷探索、創(chuàng)新。教學(xué)改革是一項(xiàng)長期而艱巨的任務(wù),既要重視基礎(chǔ)理論知識(shí)的學(xué)習(xí),又要重視實(shí)踐教學(xué)環(huán)節(jié)。本文是我在教學(xué)過程中的一些措施與體會(huì),希望能給同行以借鑒。
參考文獻(xiàn):
[1]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,1997.
?。?]嚴(yán)蔚敏,吳偉民,數(shù)據(jù)結(jié)構(gòu)題集(C語言版)[M].北京:清華大學(xué)出版社,1999.
?。?]姚菁.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:機(jī)械工業(yè)出版社,2000.
?。?]譚浩強(qiáng).C語言程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社,2002.
[5]廖明宏,張巖,李秀坤等.哈爾濱工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)與算法精品課程介紹[J].計(jì)算機(jī)教育,2006,5:21-24.
?。?]孫海民.設(shè)計(jì)開發(fā)“數(shù)據(jù)結(jié)構(gòu)”教學(xué)軟件的現(xiàn)狀分析研究[J].計(jì)算機(jī)教育,2005.10:22-24,27.
?。?]楊種學(xué).研究型教學(xué)法在數(shù)據(jù)結(jié)構(gòu)課程中的應(yīng)用研究[J].計(jì)算機(jī)教育,2007.1:57-59.