楊利英
(西安電子科技大學(xué)計算機學(xué)院,陜西西安 710071)
數(shù)據(jù)結(jié)構(gòu)是計算機學(xué)科一門重要的專業(yè)基礎(chǔ)課程,在計算機專業(yè)的課程設(shè)置中起到承上啟下的作用。數(shù)據(jù)結(jié)構(gòu)課程以計算機基礎(chǔ)、程序設(shè)計語言、離散數(shù)學(xué)等課程為前提,又是操作系統(tǒng)、編譯原理、數(shù)據(jù)庫原理、軟件工程等課程的基礎(chǔ)。它和程序設(shè)計語言、軟件工程的聯(lián)系尤其緊密,可以形象地通過語言學(xué)習(xí)來說明三者之間的關(guān)系。程序設(shè)計語言使學(xué)生掌握基本的編程方法,相當(dāng)于語言學(xué)習(xí)中的識字;數(shù)據(jù)結(jié)構(gòu)使學(xué)生掌握數(shù)據(jù)組織和數(shù)據(jù)處理的方法,相當(dāng)于語言學(xué)習(xí)中的作文;軟件工程使學(xué)生掌握大型軟件開發(fā)方法,相當(dāng)于語言學(xué)習(xí)中的小說創(chuàng)作。由于該課程強調(diào)從問題中得出抽象數(shù)據(jù)類型、選擇合適的存儲結(jié)構(gòu)、設(shè)計相應(yīng)的操作和算法,從而在計算機上求解問題,具有較強的邏輯性和抽象性,因此學(xué)生在學(xué)習(xí)時相對吃力。如果沒有好的教學(xué)方法,往往事倍功半。
美國ACM和IEEE Computer Society針對計算學(xué)科的教學(xué)計劃(Computing Curricula 2005)指出,數(shù)據(jù)結(jié)構(gòu)作為計算學(xué)科先導(dǎo)性、基礎(chǔ)性專業(yè)課程的地位未變,同時在更多學(xué)科中扮演重要角色[1]。
一般來說,數(shù)據(jù)結(jié)構(gòu)的知識體系包含數(shù)據(jù)的邏輯結(jié)構(gòu)、物理結(jié)構(gòu)、抽象數(shù)據(jù)類型、算法與效率分析。邏輯結(jié)構(gòu)是對數(shù)據(jù)元素之間的邏輯關(guān)系的描述,可以用一個數(shù)據(jù)元素的集合和定義在此集合上的若干關(guān)系來表示。邏輯結(jié)構(gòu)通常有4類,分別是集合、線性結(jié)構(gòu)、樹形結(jié)構(gòu)、圖狀結(jié)構(gòu)。物理結(jié)構(gòu)是邏輯結(jié)構(gòu)在計算機中的表示和實現(xiàn),因此也稱作是存儲結(jié)構(gòu),有順序存儲和鏈?zhǔn)酱鎯χ?。邏輯結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)的抽象,物理結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)的實現(xiàn),兩者綜合起來建立了數(shù)據(jù)元素之間的結(jié)構(gòu)關(guān)系。很多數(shù)據(jù)結(jié)構(gòu)教材都以數(shù)據(jù)的邏輯結(jié)構(gòu)為主線安排教學(xué)內(nèi)容。定義數(shù)據(jù)結(jié)構(gòu)只是手段,目的是進(jìn)行運算,因此人們真正感興趣的是數(shù)據(jù)的邏輯結(jié)構(gòu)和運算,對物理結(jié)構(gòu)和運算的實現(xiàn)細(xì)節(jié)并不關(guān)心,抽象數(shù)據(jù)類型則為此提供了解決方案。抽象數(shù)據(jù)類型是指一個數(shù)學(xué)模型以及定義在此數(shù)學(xué)模型上的一組操作,具有數(shù)據(jù)抽象和數(shù)據(jù)封裝兩個特點。算法是對特定問題求解步驟的一種描述,是指令的有限序列。對于一個具體問題,最關(guān)心的是算法是什么,怎樣設(shè)計出最好的算法,該算法的時間空間效率、最壞情形和平均情形如何,以及算法的一般化程度。這就涉及到算法分析技術(shù),相當(dāng)多的數(shù)據(jù)結(jié)構(gòu)教材都包含了一些基本的算法分析技術(shù)[2]。
結(jié)合上述知識體系,數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)目標(biāo)可以概括為:學(xué)會分析數(shù)據(jù)對象的特征,掌握數(shù)據(jù)組織方法和計算機的表示方法,為應(yīng)用設(shè)計數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲結(jié)構(gòu)及相應(yīng)算法,初步掌握算法時間空間分析的技巧,培養(yǎng)良好的程序設(shè)計技能。
總結(jié)數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)現(xiàn)狀發(fā)現(xiàn),在教學(xué)過程中主要存在兩個問題:其一,教與學(xué)的難度都比較大,這源于數(shù)據(jù)結(jié)構(gòu)強調(diào)問題的分析和抽象;其二,學(xué)生編程實踐能力亟待提高,特別是攻克問題和調(diào)試的能力。
課堂教學(xué)是教學(xué)活動的重中之重,其效果會影響后序所有的教學(xué)環(huán)節(jié)。為提高數(shù)據(jù)結(jié)構(gòu)課程的課堂教學(xué)效果,提出以下幾點措施。
(1)加強課堂互動和基礎(chǔ)知識的理解。
在課堂上,為確保學(xué)生緊跟教師的授課思路,要充分進(jìn)行課堂互動。講解一個知識點時,教師不要急于把未知內(nèi)容連續(xù)全盤給出,而是要加強引導(dǎo)性的介紹,適當(dāng)時候說“半句話”,讓學(xué)生接話,之后再重復(fù)強調(diào)一下。這樣一來,既能按照授課計劃完成教學(xué)任務(wù),又能促進(jìn)學(xué)生的思考。對學(xué)生而言,理解是運用和變通的前提,課堂授課本質(zhì)目的就是加深理解。教師在對概念或知識點進(jìn)行介紹之后,一定要給出點睛之筆,即如何理解。比如,針對遍歷二叉樹這一教學(xué)內(nèi)容,首先從遍歷的概念講起,引導(dǎo)學(xué)生掌握概念并理解遍歷的本質(zhì)就是非線性結(jié)構(gòu)的線性化。
(2)啟發(fā)式教學(xué)。
啟發(fā)式教學(xué)指教師講解和學(xué)生思考有機結(jié)合的一種教學(xué)方法。教師在教學(xué)中通過合理安排講授內(nèi)容和方式,舉一反三,調(diào)動學(xué)生的主觀能動性,以使學(xué)生融會貫通。比如講解棧和遞歸的時候,為加深學(xué)生理解問題的本質(zhì),可以給學(xué)生簡述小時候就聽說過的老和尚說教的故事,即“從前有座山,山上有座廟,廟里有個老和尚,老和尚對小和尚說:從前有座山……”。
(3)結(jié)合實際問題。
興趣是最好的老師,而問題是興趣的源泉,并且學(xué)生在學(xué)習(xí)時,真正關(guān)心的是所學(xué)知識如何應(yīng)用到現(xiàn)實世界中。因此,結(jié)合實際問題進(jìn)行講解,可極大提高學(xué)生的求知欲。數(shù)據(jù)結(jié)構(gòu)課程有許多和現(xiàn)實世界相通的地方,如棧和車庫停車、死胡同;隊列和食堂、銀行等地方的順序服務(wù);樹和人類的族譜、各種社會組織機構(gòu);圖和哥德斯堡七橋問題、傳教士野人過河問題、四色定理等。講解相關(guān)內(nèi)容時,結(jié)合現(xiàn)實問題這一舉措有效提升了教學(xué)效果。
(4)圖示教學(xué)法。
數(shù)據(jù)結(jié)構(gòu)中有大量算法,如果單純借助黑板,講課效率可想而知。在課堂授課中,教師要把黑板板書和多媒體教學(xué)有機結(jié)合[3]。通過黑板板書強調(diào)教學(xué)策略和方法,師生之間建立良好的互動機制;通過多媒體教學(xué)使課堂更為生動,動態(tài)呈現(xiàn)算法的執(zhí)行過程。圖示教學(xué)法是講解算法流程的一種有效方法,在數(shù)據(jù)結(jié)構(gòu)的課堂授課中有不可替代的作用[4]。如采用圖示教學(xué)法講解二叉樹的遍歷操作,增強學(xué)生對算法的理解。以圖1(a)中擁有7個結(jié)點的二叉樹為例,演示中序遍歷算法的操作過程。從圖1(b)到圖1(h),每步操作實現(xiàn)對一個結(jié)點的訪問,輸出當(dāng)前已訪問結(jié)點的序列,最后完成整棵二叉樹的遍歷。
圖1 中序遍歷算法圖示詳解
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),必須經(jīng)過大量的實踐,在實踐中體會構(gòu)造性思維方法,掌握數(shù)據(jù)組織與程序設(shè)計的技術(shù)。安排了24學(xué)時共6次的上機實驗,每次4學(xué)時,實驗內(nèi)容則是針對課程中重要的6部分內(nèi)容:線性表、棧和隊列、樹和二叉樹、圖、查找、內(nèi)部排序。在上機實驗的實際操作中,發(fā)現(xiàn)學(xué)生編程水平差別較大,有能力問題,也有其他原因。如部分學(xué)生經(jīng)濟條件不好,沒有自己的計算機,上機需要到公共機房,因此在一定程度上影響了能力的發(fā)展。鑒于學(xué)生的掌握程度不同,在實驗過程中必須遵守多樣性發(fā)展的原則,針對不同學(xué)生,相同的實驗內(nèi)容給出不同的題目,提出不同要求,使得每位學(xué)生都在自己的基礎(chǔ)上有提高。
人是社會中的個體,需要在某種認(rèn)可中成長,教師通過在作業(yè)評價和課下輔導(dǎo)中給學(xué)生以認(rèn)可,建立起相應(yīng)的激勵機制,通過肯定、鼓勵和贊賞提高學(xué)習(xí)熱情和積極性。
(1)對作業(yè)嚴(yán)格要求。在寫作業(yè)的同時,讓學(xué)生在作業(yè)本上也寫上不抄作業(yè)的承諾,類似于“誠信說明書”,一定程度上可以杜絕作業(yè)抄寫現(xiàn)象。對每次作業(yè)完成情況都進(jìn)行通報,當(dāng)然對完成情況好的同學(xué)點名表揚,而對完成不好的同學(xué)只說明情況,并不具體到名字。同時,總結(jié)本次作業(yè)中出現(xiàn)的典型問題,有針對性的講解,最后給出參考答案或者標(biāo)準(zhǔn)答案。
(2)確保課下輔導(dǎo)時間和效率。每講一個知識單元后,都專門安排輔導(dǎo)老師和輔導(dǎo)時間,保證每位同學(xué)都能及時解決學(xué)習(xí)中疑惑。輔導(dǎo)時間畢竟有限,師生之間還可以通過電子郵件或者建立公共的網(wǎng)絡(luò)交流平臺及時溝通,如專門的QQ群。學(xué)生既可以當(dāng)面找老師,也可以隨時通過網(wǎng)絡(luò)和老師聯(lián)系,還可以展開全班大討論。
課程考核是教學(xué)活動中督促和激勵學(xué)生學(xué)習(xí)的重要一環(huán),也是教學(xué)效果的評價手段。為了全面評價學(xué)生,對考核方式進(jìn)行了改革,期末考核采用“1+2+3+4”方式。平時作業(yè)占10%,督促學(xué)生及時復(fù)習(xí)鞏固所學(xué)知識;實驗上機占20%,邊學(xué)邊做,提高學(xué)生的編程能力;期末機試占30%,評測學(xué)生的實際動手能力和解決問題的能力;期末筆試占40%,全面了解和評價學(xué)生對課程的理解和掌握。課程組設(shè)計實現(xiàn)了網(wǎng)上在線機試系統(tǒng)XDOJ用于期末的機試。學(xué)生在線設(shè)計代碼,并在規(guī)定時間內(nèi)提交,系統(tǒng)即時給出判決,教師則對系統(tǒng)判決為錯誤的程序進(jìn)行核查,以區(qū)分真正的錯誤和系統(tǒng)的誤判,比如僅僅是格式輸出上的不一致。XDOJ系統(tǒng)有三類用戶,即管理員、教師用戶、學(xué)生用戶,管理員具有超級權(quán)限,負(fù)責(zé)整個系統(tǒng)的維護(hù)和機試題目的輸入,教師用戶進(jìn)行在線判決,學(xué)生用戶則只能查看設(shè)定好的題目并在線解答。該系統(tǒng)也可用于平時上機實驗。
數(shù)據(jù)結(jié)構(gòu)是計算機學(xué)科體系的一門核心課程,因其較強的抽象性,一直被學(xué)生認(rèn)為是難學(xué)的課程之一。本文針對數(shù)據(jù)結(jié)構(gòu)課程,進(jìn)行了教學(xué)方法上的探討,以期為本課程的教學(xué)提供借鑒。
[1] RUSSELL S,JAMES H C,GORDON D,et al.Computing curricula 2005:the overview report[R/OL].(2005 -11-30)[2010-09-25]http://www.acm.org/education/curricula.html.
[2] 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu):C語言版[M].北京:清華大學(xué)出版社,2003.
[3] 葉雙,吳清江,緱錦,等.提高“數(shù)據(jù)結(jié)構(gòu)”課程教學(xué)效果的方法初探[J].計算機教育,2009(21):90-92.
[4] 沙宗堯,邊馥苓.圖示教學(xué)法在數(shù)據(jù)結(jié)構(gòu)與算法教學(xué)中的應(yīng)用[J].計算機教育,2009(18):80-82.