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