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