王代君 唐麟
【摘 要】針對(duì)在數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)教學(xué)中如何提高學(xué)生的編程和算法設(shè)計(jì)能力,分析并指出了在實(shí)驗(yàn)教學(xué)中普遍存在的問(wèn)題,結(jié)合實(shí)驗(yàn)課的教學(xué)改革,開(kāi)發(fā)實(shí)驗(yàn)平臺(tái),以期有效激發(fā)學(xué)生的學(xué)習(xí)興趣和積極性,培養(yǎng)動(dòng)手和創(chuàng)新能力。
【關(guān)鍵詞】數(shù)據(jù)結(jié)構(gòu)與算法 實(shí)驗(yàn)改革 平臺(tái)建設(shè)
【中圖分類(lèi)號(hào)】 G 【文獻(xiàn)標(biāo)識(shí)碼】A
【文章編號(hào)】0450-9889(2014)07C-0132-03
數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)是計(jì)算機(jī)專(zhuān)業(yè)學(xué)生必修基礎(chǔ)課數(shù)據(jù)結(jié)構(gòu)與算法的配套實(shí)驗(yàn)課程,是培養(yǎng)學(xué)生程序設(shè)計(jì)技能必不可少的重要環(huán)節(jié)。其目標(biāo)之一是培養(yǎng)學(xué)生能運(yùn)用理論知識(shí)與算法技術(shù)分析解決實(shí)際問(wèn)題,能運(yùn)用高級(jí)程序設(shè)計(jì)語(yǔ)言編程實(shí)現(xiàn)算法。從近年實(shí)驗(yàn)情況來(lái)看,在上機(jī)編寫(xiě)程序?qū)崿F(xiàn)具體算法時(shí)遇到的種種問(wèn)題,效果不容樂(lè)觀(guān),學(xué)生很難按時(shí)完成實(shí)驗(yàn)所要求的內(nèi)容。
一、實(shí)驗(yàn)教學(xué)存在的問(wèn)題與分析
數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)是一門(mén)實(shí)踐性很強(qiáng)的技術(shù)基礎(chǔ)課,經(jīng)過(guò)多年實(shí)驗(yàn)教學(xué)分析,發(fā)現(xiàn)普遍存在如下主要問(wèn)題:
(一)課程抽象,實(shí)驗(yàn)難度大
數(shù)據(jù)結(jié)構(gòu)具有一定的抽象性,學(xué)生面對(duì)抽象概念在學(xué)習(xí)過(guò)程中常會(huì)遇到困難,基本每本理論教材在呈現(xiàn)概念時(shí)都會(huì)受到多方面限制,比如篇幅的限制,省略了算法細(xì)節(jié)部分或只給出偽代碼,由學(xué)生自己補(bǔ)充,學(xué)生需要將算法用程序設(shè)計(jì)方法實(shí)現(xiàn),完成有一定難度和技巧的程序設(shè)計(jì)并上機(jī)調(diào)試運(yùn)行。對(duì)編程基礎(chǔ)稍微薄弱的學(xué)生來(lái)說(shuō),就會(huì)出現(xiàn)不小的困難。
(二)實(shí)驗(yàn)相關(guān)資料偏少
由于學(xué)生基礎(chǔ)薄弱,實(shí)驗(yàn)前又沒(méi)有更多的相關(guān)實(shí)驗(yàn)資料進(jìn)行預(yù)習(xí),僅靠看課本理論和實(shí)驗(yàn)時(shí)的幾個(gè)學(xué)時(shí)難以完成實(shí)驗(yàn)所要求的任務(wù),也就談不上創(chuàng)新人才的培養(yǎng)。
(三)學(xué)生程序設(shè)計(jì)語(yǔ)言課程基礎(chǔ)薄弱
數(shù)據(jù)結(jié)構(gòu)與算法課程是第四學(xué)期開(kāi)設(shè),對(duì)于很多先修課程要求高,高級(jí)程序設(shè)計(jì)語(yǔ)言是大學(xué)生進(jìn)校第一、二學(xué)期學(xué)習(xí),第一學(xué)期學(xué)習(xí)過(guò)程序設(shè)計(jì)思想,第二學(xué)期學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)思想,由于大部分同學(xué)高中沒(méi)接觸過(guò)計(jì)算機(jī)語(yǔ)言學(xué)習(xí),對(duì)過(guò)程程序設(shè)計(jì)思想還沒(méi)掌握透,第二學(xué)期的面向?qū)ο蟪绦蛟O(shè)計(jì)學(xué)習(xí)又開(kāi)始,學(xué)習(xí)非常吃力;導(dǎo)致常用的一些語(yǔ)法結(jié)構(gòu),如指針和結(jié)構(gòu)體等內(nèi)容難于理解。而這些語(yǔ)法恰恰是程序設(shè)計(jì)語(yǔ)言教學(xué)時(shí)的難點(diǎn),也正好是學(xué)生完成數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)必須掌握的內(nèi)容,這給部分學(xué)生學(xué)習(xí)帶來(lái)了一定困難。
(四)編程語(yǔ)言難
數(shù)據(jù)結(jié)構(gòu)與算法編程語(yǔ)言描述主要用到C++語(yǔ)言,并大量用到了指針、鏈表和結(jié)構(gòu)體等運(yùn)算,這部分內(nèi)容正好是大多數(shù)學(xué)生掌握知識(shí)點(diǎn)薄弱的環(huán)節(jié),導(dǎo)致學(xué)生很難用高級(jí)語(yǔ)言將教材中的算法描述出來(lái),由于問(wèn)題的堆積、實(shí)驗(yàn)的欠賬,容易使學(xué)生喪失學(xué)習(xí)興趣和信心,導(dǎo)致學(xué)生間抄襲程序或?qū)嶒?yàn)報(bào)告的現(xiàn)象。
(五)編程技巧差
普通學(xué)生在低年級(jí)只編寫(xiě)過(guò)功能單一、結(jié)構(gòu)簡(jiǎn)單的程序;而從功能單一的簡(jiǎn)單程序向涉及算法和稍復(fù)雜程序的數(shù)據(jù)結(jié)構(gòu)編寫(xiě)過(guò)渡學(xué)習(xí)時(shí),需循序漸進(jìn)的方式和細(xì)致的引導(dǎo),緊密結(jié)合理論教學(xué)。學(xué)生一下從簡(jiǎn)單編程直接到復(fù)雜的程序設(shè)計(jì),不僅不適應(yīng),且設(shè)計(jì)技巧性較差。
二、實(shí)驗(yàn)教學(xué)改革目標(biāo)的提出
根據(jù)以上學(xué)生實(shí)驗(yàn)時(shí)出現(xiàn)的諸多問(wèn)題,特提出該課程的實(shí)驗(yàn)改革目標(biāo):
一是緊密配合理論教學(xué),通過(guò)相關(guān)實(shí)驗(yàn),幫助學(xué)生加深對(duì)數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)、算法思想和具體實(shí)現(xiàn)等各個(gè)環(huán)節(jié)的整體理解,強(qiáng)化學(xué)生“結(jié)構(gòu)——算法——編程”三者密切相關(guān)的意識(shí),讓學(xué)生思考和發(fā)現(xiàn)利用數(shù)據(jù)結(jié)構(gòu)解決實(shí)際應(yīng)用問(wèn)題的有效方法,從而使學(xué)生分析和解決問(wèn)題的能力得到鍛煉和提高。
二是因材施教,讓原本不同水平和能力起點(diǎn)的學(xué)生通過(guò)數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn),能力和水平都有所提高,并且有興趣有信心學(xué)好數(shù)據(jù)結(jié)構(gòu)課程。
三是培養(yǎng)學(xué)生多方面能力,比如團(tuán)隊(duì)精神,口頭表達(dá)能力,對(duì)學(xué)生全方面發(fā)展起到較好的推動(dòng)作用。
三、調(diào)整實(shí)驗(yàn)項(xiàng)目?jī)?nèi)容,使其更加符合學(xué)生的認(rèn)知規(guī)律
數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)內(nèi)容主要是編程實(shí)驗(yàn),提高學(xué)生的實(shí)踐編程能力,鞏固和強(qiáng)化理論課的教學(xué)效果。為了保證和提高實(shí)驗(yàn)教學(xué)質(zhì)量,加深對(duì)課堂知識(shí)的理解,培養(yǎng)學(xué)生動(dòng)手能力和思維能力,嘗試對(duì)數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)項(xiàng)目進(jìn)行重新設(shè)計(jì),主要內(nèi)容有:
針對(duì)編程基礎(chǔ)較薄弱的學(xué)生,我們開(kāi)發(fā)了數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)教學(xué)平臺(tái),學(xué)生在該平臺(tái)上可獲知實(shí)驗(yàn)相關(guān)的更多內(nèi)容,通過(guò)平臺(tái)引導(dǎo)學(xué)生重點(diǎn)回顧程序設(shè)計(jì)語(yǔ)言的基礎(chǔ)知識(shí),特別是數(shù)組和指針等有關(guān)操作。通過(guò)這些輔助手段,使學(xué)生對(duì)將要編寫(xiě)程序的一些語(yǔ)法和程序規(guī)則有所復(fù)習(xí)和掌握。還可通過(guò)平臺(tái)對(duì)實(shí)驗(yàn)原理的動(dòng)畫(huà)演示,得到幫助和啟發(fā),從而更好更快地完成實(shí)驗(yàn)內(nèi)容。
每個(gè)實(shí)驗(yàn)內(nèi)容以章節(jié)為單位安排,依據(jù)實(shí)驗(yàn)教學(xué)目的,針對(duì)計(jì)算機(jī)相關(guān)專(zhuān)業(yè)所要達(dá)到的不同實(shí)驗(yàn)教學(xué)目標(biāo),以及考慮學(xué)生個(gè)體差異,每個(gè)實(shí)驗(yàn)項(xiàng)目都設(shè)置基礎(chǔ)必做題和附加選做題兩部分內(nèi)容。這兩類(lèi)實(shí)驗(yàn)都需要緊密結(jié)合理論教學(xué)。必做題相對(duì)簡(jiǎn)單,目的在于幫助學(xué)生掌握基礎(chǔ)知識(shí)。對(duì)于該部分題目,學(xué)生容易完成,能提高學(xué)生學(xué)習(xí)積極性并增強(qiáng)學(xué)習(xí)信心;選做題針對(duì)學(xué)有余力的學(xué)生,各個(gè)實(shí)驗(yàn)項(xiàng)目中的必做題均設(shè)計(jì)詳細(xì)的實(shí)驗(yàn)準(zhǔn)備內(nèi)容,用于引導(dǎo)學(xué)生更好地進(jìn)行實(shí)驗(yàn)前預(yù)習(xí)準(zhǔn)備工作;主要在于培養(yǎng)和鼓勵(lì)學(xué)生的學(xué)習(xí)興趣和擴(kuò)大知識(shí)面,進(jìn)一步培養(yǎng)學(xué)生應(yīng)用能力和創(chuàng)新意識(shí),保證基礎(chǔ)弱的同學(xué)學(xué)習(xí)興趣,也提高了編程能力強(qiáng)的同學(xué)動(dòng)手能力。例如,與線(xiàn)性表一章理論教學(xué)相配合的實(shí)驗(yàn)項(xiàng)目是多項(xiàng)式加減法,這個(gè)實(shí)驗(yàn)是對(duì)線(xiàn)性鏈表的建立、插入、刪除、遍歷等進(jìn)行綜合運(yùn)算,對(duì)數(shù)據(jù)結(jié)構(gòu)與算法第一實(shí)驗(yàn)內(nèi)容來(lái)說(shuō)稍有難度,可作為選作題或增加實(shí)驗(yàn)學(xué)時(shí)。在與棧一章理論教學(xué)相配合的實(shí)驗(yàn)項(xiàng)目是迷宮,這部分實(shí)驗(yàn)內(nèi)容要求掌握回溯法和棧的基本運(yùn)算等知識(shí),有一定難度;用括號(hào)匹配作為必做題,能培養(yǎng)學(xué)生獨(dú)立鉆研,有助于學(xué)生解決問(wèn)題能力的訓(xùn)練。
四、實(shí)驗(yàn)教學(xué)方法探究
實(shí)驗(yàn)前學(xué)生必須先預(yù)習(xí)和熟悉實(shí)驗(yàn)教學(xué)平臺(tái),了解實(shí)驗(yàn)內(nèi)容的目的和要求,理解算法,描述語(yǔ)言的語(yǔ)法,查看相關(guān)資料,寫(xiě)預(yù)習(xí)報(bào)告。
通過(guò)多年實(shí)驗(yàn)教學(xué)中實(shí)驗(yàn)完成情況分析,軟件工程專(zhuān)業(yè)的學(xué)生語(yǔ)言掌握較好,大部分學(xué)生能按時(shí)完成實(shí)驗(yàn)項(xiàng)目,其它專(zhuān)業(yè)的學(xué)生實(shí)驗(yàn)完成情況較差;由此,實(shí)驗(yàn)編程語(yǔ)言可以因?qū)W生而異,除軟件工程專(zhuān)業(yè)的學(xué)生采用面向?qū)ο蟪绦蛟O(shè)計(jì)C++外,其它專(zhuān)業(yè)主要采用C語(yǔ)言描述,并且可增加前期語(yǔ)言學(xué)習(xí)時(shí)間。只有編程語(yǔ)言掌握扎實(shí),數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)才能很好地完成。
開(kāi)發(fā)數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)網(wǎng)絡(luò)教學(xué)平臺(tái)系統(tǒng),該平臺(tái)主要包含有課程介紹、在線(xiàn)課程、互動(dòng)學(xué)習(xí)、下載資料等模塊。有針對(duì)性地對(duì)每一個(gè)實(shí)驗(yàn)項(xiàng)目進(jìn)行詳細(xì)講解和實(shí)驗(yàn)原理分析的動(dòng)畫(huà)演示,將抽象的數(shù)據(jù)結(jié)構(gòu)問(wèn)題制作為教學(xué)動(dòng)畫(huà),借助形象的案例理解抽象的概念。教學(xué)內(nèi)容利用Web頁(yè)面為基本元素出現(xiàn)在站點(diǎn)中,學(xué)生通過(guò)訪(fǎng)問(wèn)站點(diǎn)來(lái)進(jìn)行交互式學(xué)習(xí)。以輔助學(xué)生自主學(xué)習(xí)為主要目的,解決學(xué)生實(shí)驗(yàn)時(shí)無(wú)從下手的局面,啟發(fā)學(xué)生思維,促進(jìn)學(xué)生程序設(shè)計(jì)能力的提高。平臺(tái)系統(tǒng)流程圖如圖1所示。
在線(xiàn)課程是教學(xué)平臺(tái)核心部分,也是學(xué)生對(duì)數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)加深理解的重要環(huán)節(jié),該平臺(tái)從實(shí)驗(yàn)預(yù)習(xí),到實(shí)驗(yàn)原理算法的演示,再通過(guò)在線(xiàn)課堂的視頻教學(xué)、在線(xiàn)測(cè)試題訓(xùn)練及各種原理進(jìn)行拓展教學(xué)。為了方便學(xué)生學(xué)習(xí)較抽象的數(shù)據(jù)結(jié)構(gòu)與算法,能順利進(jìn)行程序編寫(xiě),該教學(xué)平臺(tái)還包含有18個(gè)flash動(dòng)畫(huà)用于原理算法演示,主要包括棧和隊(duì)列、線(xiàn)性表、遞歸、查找與排序、樹(shù)、圖等內(nèi)容,每個(gè)flash動(dòng)畫(huà)都有實(shí)驗(yàn)原理及主要代碼實(shí)現(xiàn)過(guò)程,能更加形象展示數(shù)據(jù)結(jié)構(gòu)的原理。例如:棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),在對(duì)棧原理進(jìn)行動(dòng)畫(huà)設(shè)計(jì)時(shí),根據(jù)用數(shù)組實(shí)現(xiàn)棧的特點(diǎn),采取對(duì)棧先進(jìn)行初始化的代碼模塊來(lái)對(duì)棧進(jìn)行初始化,之后運(yùn)行相應(yīng)代碼模塊觀(guān)察壓棧出棧過(guò)程,同時(shí)還能觀(guān)察到棧中數(shù)據(jù)的變化。在大部分flash動(dòng)畫(huà)演示過(guò)程中,flash頁(yè)面左側(cè)是代碼部分,能體現(xiàn)當(dāng)前執(zhí)行的代碼,并與右側(cè)的動(dòng)畫(huà)演示及講解分析一一對(duì)應(yīng)。演示過(guò)程中如用戶(hù)需要重新開(kāi)始,還可點(diǎn)擊“重新開(kāi)始”按鈕。這些flash動(dòng)畫(huà)演示將代碼與動(dòng)畫(huà)有機(jī)的結(jié)合在一起,將抽象的代碼轉(zhuǎn)換為有形的動(dòng)畫(huà),大大方便學(xué)生學(xué)習(xí)和對(duì)實(shí)驗(yàn)內(nèi)容的理解。
如對(duì)棧原理進(jìn)行動(dòng)畫(huà)演示的flash點(diǎn)擊界面中壓棧代碼動(dòng)畫(huà)效果,該動(dòng)畫(huà)效果包括等待入棧的數(shù)字入棧的動(dòng)畫(huà)效果和位于等待區(qū)域的數(shù)字前移的動(dòng)畫(huà)效果。等待入棧的數(shù)字、入棧的動(dòng)畫(huà)效果和位于等待區(qū)域的數(shù)字前移的動(dòng)畫(huà)效果如圖3所示。
圖3 壓棧的動(dòng)畫(huà)效果圖
該平臺(tái)互動(dòng)學(xué)習(xí)是一個(gè)教師和學(xué)生互動(dòng)的場(chǎng)所,實(shí)現(xiàn)動(dòng)態(tài)交互的功能,教師能添加、更改、刪除各種資源,學(xué)生、教師可以查看各種資源庫(kù)里的資源。同時(shí),學(xué)生可從平臺(tái)上下載練習(xí)題和測(cè)試練習(xí)題資料,練習(xí)題有主要算法描述,可幫助學(xué)生進(jìn)一步理解每個(gè)章節(jié)的算法原理,測(cè)試練習(xí)題有自動(dòng)報(bào)錯(cuò)功能。
五、改革數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)考核方式
讓學(xué)生對(duì)以前所做實(shí)驗(yàn)作一個(gè)分析和總結(jié)。具體操作方案如下:首先將學(xué)生自由分組,小組成員共同從以前做過(guò)的實(shí)驗(yàn)項(xiàng)目選做題中選擇一個(gè)進(jìn)行程序的分析設(shè)計(jì)和編碼實(shí)現(xiàn),要求考慮程序的編寫(xiě)規(guī)范,程序的執(zhí)行效率等方面??己藭r(shí),由實(shí)驗(yàn)教師從該小組隨機(jī)抽取學(xué)生到講臺(tái)進(jìn)行講解和演示,根據(jù)程序完成情況和學(xué)生演示情況,決定該小組成員的平均得分,而每位學(xué)生的具體得分由小組成員內(nèi)部根據(jù)該學(xué)生在該程序?qū)崿F(xiàn)中的工作情況決定。通過(guò)這種方式,能培養(yǎng)學(xué)生的團(tuán)隊(duì)意識(shí),達(dá)到互學(xué)互助的效果,同時(shí)也鍛煉了學(xué)生的表達(dá)能力。
數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)環(huán)節(jié)教學(xué)改革的創(chuàng)新之處在于依托一門(mén)編程語(yǔ)言以及所開(kāi)發(fā)的實(shí)驗(yàn)教學(xué)平臺(tái),因材施教,根據(jù)不同專(zhuān)業(yè)實(shí)際情況,綜合考慮進(jìn)行實(shí)驗(yàn)項(xiàng)目、實(shí)驗(yàn)內(nèi)容和實(shí)驗(yàn)準(zhǔn)備的合理設(shè)置,幫助學(xué)生在實(shí)驗(yàn)課上找到自己的最好學(xué)習(xí)方式,提高實(shí)驗(yàn)教學(xué)質(zhì)量。
【參考文獻(xiàn)】
[1]吳兵.高校計(jì)算機(jī)文化基礎(chǔ)課程網(wǎng)絡(luò)學(xué)習(xí)題庫(kù)的研發(fā)[J].實(shí)驗(yàn)技術(shù)與管理,2011(2)
[2]朱洪浩.數(shù)據(jù)結(jié)構(gòu)課程“工程化”實(shí)踐教學(xué)模式研究[J].赤峰學(xué)院學(xué)報(bào)(自然科學(xué)),2013(15)
[3]馬曉波,王翠茹.《數(shù)據(jù)結(jié)構(gòu)》實(shí)踐教學(xué)改革探討[J].內(nèi)蒙古農(nóng)業(yè)大學(xué)學(xué)報(bào)(社會(huì)科學(xué)版),2010(02)
[4]趙耀紅,孫宇.數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)教學(xué)的實(shí)踐與探索[J].長(zhǎng)春大學(xué)學(xué)報(bào),2012(04)
[5]汪萍,陸正福.《數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)》的教學(xué)實(shí)踐與探索[J].實(shí)驗(yàn)科學(xué)與技術(shù),2011(3)