喻 梅, 李曉紅, 王文俊, 王慶節, 徐 超
(天津大學 計算機科學與技術學院,天津 300072)
“數據結構”課程是計算機科學與技術專業、軟件工程專業的一門重要的學科基礎課,也是相關專業的必修課及選修課[1]。該課程通過介紹計算機中數據的組織和管理方法、各種基本類型的數據結構及其應用,使學生學會分析研究計算機加工的數據結構的特性,以便為應用涉及的數據選擇適當的邏輯結構、存儲結構及相應的算法,并掌握算法的時間復雜度分析和空間復雜度分析技術[2]。通過該課程的學習,使學生掌握各種基本數據結構及基于數據結構的基本運算和算法,能應用高級語言編寫算法,編寫的程序結構符合軟件工程的規范,為今后實際工程中軟件算法的研究奠定基礎[3-4]。“數據結構”課程還是計算機及相關專業的專業先行課,其后續課程如“數據庫原理與應用”、“操作系統”、“編譯原理”等課程。同時,該課程還是計算機專業考研專業課程,因此該課程的教學效果將直接影響到學生對計算機專業的認識以及對其他專業課的學習[5-6]。
目前,我校計算機科學與技術專業“數據結構”課程為3.5學分,總學時為64學時,其中理論課時40學時,實驗課時24學時,在大學二年級第一學期開設,主要的專業基礎先行課有“程序設計原理”及“離散數學導論”。在教學中發現,這門課由于抽象性、理論性較強,學生學習過程中有一定的困難,影響學生的學習效果。該課程學得是否扎實,直接影響學生后續課程的學習,甚至影響學生對本專業的學習興趣。經過多年的教學實踐,針對課程教學中存在的問題,對我校“數據結構”課程進行教學改革:以注重學生平時學習為主,打好課程理論基礎;以理論和實踐相結合,鍛煉學生實踐能力,激發學生創新思維;改革教學環節、改進教學方法和手段,改革考核方式,提高學生的學習積極性,為專業教學打好基礎[7-11]。
經過多年的課程教學,分析以往的教學過程,聽取學生、任課教師及相關專業教師的意見,發現學生在學習過程中存在以下問題,影響了學習效果,不能達到預期的教學效果。
(1) 課程難度較大。“數據結構”課程介紹的各種數據結構內容較多,學習量較大,理論性較強,抽象性較高,學生在理解上較困難,不能很好地與現實生活中的實例相結合,不能有效地理解理論知識,以致學生學習興趣不佳,積極性不足。學習后不知有什么用處,也不知對后續課程有什么意義。即使有實驗課程,也不能很好地實踐,沒能幫助理論知識的理解。
(2) 編程語言掌握不夠扎實。我校“數據結構”課程的算法描述采用C語言,C語言中的指針、函數、結構體是語言學習中的難點,也是數據結構算法描述中的重要工具。我校學生雖在“程序設計原理”課程中學習了結構化程序設計思想,但對于難點知識的指針、函數、結構體掌握得不夠扎實,還不能靈活地應用于程序設計,有的學生甚至不能很好理解這方面的內容。這樣,對“數據結構”課程中出現的算法描述就不能理解,因此也就不能理解相應的數據結構。
(3) 學習過程的考核不足。以前該課程的考核方式主要以期末考試為主,對學生的學習過程很少考核,雖然有作業有實驗,但由于大學二年級學生的課程較多,一旦疏于監督考核,就會使學生推遲學習,不能跟上教學進度,只在學期末趕作業趕實驗,為考試突擊,不能真正將課程的內容牢固掌握,當時能記得所學知識,但過后易忘,以致后續課程學習中出現問題。
為了實現“數據結構”課程教學目標,讓學生真正掌握該課程教學內容,為本專業后續課程打好基礎,我們確定了“注重平時學習、強化實踐教學”的教學指導思想,對該課程的教學進行改革,將實踐教學和課堂教學緊密結合,互為補充,幫助學生掌握課程理論知識的同時,提高編程能力、實踐應用能力。通過教學改革,提高學生對該課程的學習興趣,使其主動學習,通過理論和實踐教學,使學生能夠學以致用[12-15]。
課程負責人及任課教師均為多年從事數據結構課程教學的教師,有豐富的教學和實踐經驗,通過總結以往教學過程的經驗、存在的問題,收集學生對課程的意見、要求,以及本課程在學生后續學習中的應用,根據培養目標制定有效的教學改革措施。
將“數據結構”課程的教學環節分為幾個部分:課堂教學、實驗教學、課后作業、實驗作業、課堂測驗、期末考試。
課堂教學主要介紹理論知識。理論知識內容多且抽象性高,不容易理解。“數據結構”課程需要介紹各種線性結構和非線性結構,以及最基本的查找和排序操作,教學內容較多,雖然課堂教學是40學時,但對教學內容不能面面俱到,因此在課堂教學中首先精簡教學內容,突出重點。在介紹每一種數據結構時,主要介紹該結構的特點、基本算法及主要應用,關鍵是介紹算法的設計思想,學生掌握設計思想后,可以舉一反三,對其他算法能夠更好理解。例如在講解棧這種數據結構時,主要介紹棧的順序存儲結構和鏈式存儲結構及對應的進棧和出棧算法,了解算法的思想后,對于判斷棧空否、棧滿否等算法可以讓學生課下學習。在講解棧的應用時,主要介紹遞歸和進制轉換應用,而漢諾塔等應用留給學生課下學習。這樣可以充分利用課堂時間介紹主要知識。其次,在講授內容時理論和實踐相結合,配合現實生活中的例子,更能夠讓學生理解理論知識。例如講解隊列時,結合現實生活中的排隊實例,學生很快就能掌握隊列的進隊、出隊等算法。
實驗教學有助于理解理論知識,提高學生的編程能力。有些學生因編程語言基礎不好,比較畏懼實驗教學。在實驗教學中,采取先易后難的方法,設計不同層次的實驗內容,以提高學生學習興趣。在實驗教學中安排兩類實驗:基礎型實驗、應用型實驗。
(1) 基礎型實驗。基礎型實驗又稱為驗證性實驗,主要是實現教材上的基本算法,幫助學生對理論知識的理解和掌握,理解核心算法的基本思想,掌握設計算法的基本程序。這種實驗一般給出程序結構、部分程序偽代碼算法,由學生根據對算法的理解,編寫完整的程序以實現算法。這些實驗重點培養學生掌握程序設計思想、算法程序結構、函數調用,以及對程序設計語言的熟練程度。這部分實驗較簡單,學生很容易進入實驗環境、調通程序,有助于理解理論知識,且有一定的成就感,對后續實驗會有信心和興趣。
(2) 應用型實驗。應用型實驗是讓學生在掌握了基礎型實驗的設計思想、設計方法的基礎上,設計實驗以完成某種數據結構的應用。例如在圖的最小生成樹一節中,基礎型實驗要求學生完成Prim和Kruskal算法,在應用型實驗中先給學生提出問題:求在n個城市之間鋪設通信線路,費用最低的方案。這種類型的實驗能夠讓學生理論結合實際,能夠理解所學知識在實際生活中的應用,不僅可以鍛煉學生的編程能力,而且鍛煉學生的思考能力、應用所學知識解決問題的能力,也提高了學生的學習興趣。
課后作業幫助學生理解和消化所學理論知識,鞏固和深化教學知識點。每一章教學內容結束后,都會給學生布置課后作業,課后作業包括本章所要求的知識點的練習題,既包括識記、領會、理解的內容,也包括應用的內容,不僅鞏固學生對基本概念、基本算法的理解,還包括基于概念和算法的應用,提高學生分析問題、解決問題的能力。作業有多種題型,既包括選擇題、判斷題和填空題,還包括證明題、應用題等。多種題型可以從不同方面鍛煉學生對所學知識點的掌握及應用。
課后作業主要是對理論知識的加強,而實驗作業是在實踐教學中的基礎型和應用型實驗的基礎上,鍛煉和提高學生綜合程序設計能力。實驗作業是每一章學習后布置的綜合型實驗,綜合利用本章所學知識于實際應用,實驗規模大于基礎型和應用型實驗,需要學生既對應用環境了解,又對所需要的知識點和程序設計熟練掌握,從分析問題、提出解決方案、算法描述、上機調試、到解決問題的全過程的充分體驗,從中學生能夠掌握利用數據結構解決實際問題的方法和過程,提高實踐能力,并初步感受軟件開發的規范,全面培養學生綜合運用知識的能力、進行研究型學習的能力。
整個學期安排4或5次階段性的課堂測驗,每次約30 min左右。測驗內容為階段性教學內容的核心知識點的概念、核心算法及簡單應用。階段性測驗內容一般不難,考核基本的核心的教學內容,目的是檢查和督促學生平時的循序漸進地學習,對教學內容的逐漸掌握,發現問題及時解決,不致于問題堆積。
期末考試是對整個學期所學全部內容的綜合性考核,是考核學生一學期的學習效果,考試之前學生的復習,是對這門課程的總復習,可以系統地總結每個階段的學習成果,鞏固學習效果。
“數據結構”課程的大綱分為兩個:理論教學大綱和實驗教學大綱。理論教學大綱給出每一章理論知識的知識點,并細化每個知識點為識記、理解、領會、簡單應用、綜合應用5個教學要求層次,明確每個知識點為重點、次重點、一般三個考核類型。實驗教學大綱明確每個實驗教學的教學目標、教學內容、實驗環境、實驗步驟、需掌握的知識點、課后實驗等。細化的大綱不僅是授課教師的指導性綱領,也給學生學習該課程指明方向。
數據結構教學內容理論性、抽象性較強,很多學生反映不容易理解,在課堂教學中引用多媒體教學方法,為不好理解的數據結構及算法制作多媒體課件,將算法過程用多媒體動畫展示,例如將最短路徑算法的每一步使用動畫演示,并配有步驟講解,這樣學生和只看算法代碼相比更能直觀地理解算法過程,也能充分調動學生的學習興趣,降低知識的抽象性。
實驗教學是對課堂教學的輔助,能夠有效幫助學生理解和掌握教材中的理論知識,并將理論知識用于解決實際問題,培養數據結構的應用能力和軟件工程所需要的實踐能力。在實驗教學中,將實驗內容分為基礎型、應用型及綜合型實驗3個層次,使學生能夠從簡單到復雜的實踐中,牢固地掌握所授知識點,并逐步提高學生程序設計的能力,提高學習積極性,同時能提高學習效果。
綜合型實驗是軟件工程的綜合訓練,包括問題分析,總體結構設計,用戶界面設計,程序設計基本技能和技巧,是對學生軟件工程規范的訓練和科學作風的培養。要求學生每個綜合型實驗均提交實驗報告,實驗報告要符合科技論文的寫作要求。實驗報告除介紹實驗目的和實驗內容外,還應詳細寫清以下幾個方面的內容。
(1) 需求分析。綜合型實驗的任務,主要解決的問題;
(2) 概要設計。說明綜合型實驗任務中涉及的數據結構定義、各功能模塊的設計以及模塊之間的調用關系;
(3) 詳細設計。描述各功能模塊的具體實現算法;
(4) 調試分析。編寫好的各功能模塊程序調試過程中遇到的問題及解決方法;算法的復雜度分析;
(5) 實驗結果。實驗任務的輸入和輸出;
(6) 程序代碼。按功能模塊給出帶注釋的源程序,以及設計思想。
將以筆試為主的傳統的考核方式改為平時教學環節及期末考試并重的考核方式,以綜合評價學生的學習情況,尤其注重學生的課程學習過程。課程成績分為5個部分:課后作業占10%,課后實驗作業占20%,課堂測驗占10%,實驗課練習占10%,期末考試占50%。這種考核方式注重學生的平時學習,避免期末突擊、且所學知識不牢固的問題。
任課教師的業務水平和教學水平是影響課程建設質量的重要因素。在擔任該課程教學任務的教師中,學科帶頭人、教授2名,副教授1名,講師2名,碩士研究生助教1名,教師隊伍學歷層次較高,職稱、年齡結構合理,能夠高效完成教學任務,也便于該課程的建設和發展。
表1和圖1顯示了數據結構課程近兩年學生綜合成績情況,從表和圖中看出,經過課程的改革及根據教學情況的調整,學生的學習情況較好,成績逐漸提高,成績好的學生逐漸增加。

表1 分數分布情況

圖1 成績分布圖
經過近2年的“數據結構”課程的教學改革,學生反映,雖然平時作業很多很辛苦,但確實學到了知識,而且很牢固,課堂及實驗教學都取得了預期的效果,且該課程的成績顯著提高,激發了學生學習興趣,明確了課程的重要性,以及該課程的作用,對本專業后續課程學習充滿信心。在今后的教學過程中,將繼續努力,提高學生的創新能力,培養學生研究性學習能力。
[1] 教育部高等學校計算機科學與技術教學指導委員會. 高等學校計算機科學與技術專業實踐教學體系與規范[M]. 北京: 清華大學出版社, 2008.
[2] 嚴蔚敏, 吳偉民. 數據結構(C語言版)[M]. 北京:清華大學出版社, 2011.
[3] 趙 越, 章小莉. 數據結構實踐教學模式的設計與探索[J]. 計算機教育, 2009(13): 194-196.
Zhao Yue, Zhang Xiao-li. Practice Teaching Model of Data Structure[J]. Computer Education, 2009(13): 194-196.
[4] 王淮亭. “數據結構”實踐教學探討與研究[J]. 計算機教育, 2009(12): 133-134.
Wang Huai-ting. Practice Teaching Discussion and Research of“Data Structure”[J]. Computer Education, 2009(12): 133-134.
[5] 黃賢英, 劉恒洋, 范 偉. 計算機專業實踐教學體系建設思考[J]. 實驗技術與管理, 2009, 26(10): 94-96.
Huang Xian-ying, Liu Heng-yang, Fan Wei. Consideration on Building the Practice Teaching System of Computer Specialty[J]. Experimental Technology and Management, 2009, 26(10):94-96.
[6] 陳愛國. 本科計算機專業實驗教學體系研究[J]. 計算機教育, 2010(7): 117-119.
Chen Ai-guo. Research on Teaching System of Undergraduate Computer Experiment[J]. Computer Education, 2010(7): 117-119.
[7] 劉艷莉, 孫雨耕, 葛寶臻,等. 符合工程專業人才培養模式實驗教學體系的構建[J]. 中國大學教學, 2010(4): 75-77.
Liu Yan-li, Sun Yu-geng, Ge Bao-zhen,etal. Construction of Experimental Teaching System According With the Training Model of Engineering Talents[J].China University Teaching, 2010(4): 75-77.
[8] 陳佑清, 吳 瓊. 課堂教學中如何指導學生進行探究——大學研究性課堂教學模式的分層構建[J]. 中國大學教學, 2012(11): 59-62.
Chen You-qing, Wu Qiong. How to Guide the Students to Explore——Layered Construction of Research Teaching Model in University[J]. China University Teaching, 2012(11): 59-62.
[9] 劉 偉. 實踐教學中應用型人才培養模式的研究[J]. 實驗技術與管理, 2009, 26(9): 123-127.
Liu Wei. Research on Application-oriented Talent Cultivation Mode in Practice Teaching[J]. Experimental Technology and Management, 2009, 26(9): 123-127.
[10] 王南蘭, 彭 琛, 陳日新, 等. 改革實驗教學體系 培養學生創新精神[J]. 實驗室研究與探索, 2011, 30(8): 163-166.
Wang Nan-lan, Peng Chen, Chen Ri-xin,etal. Reforming Experimental Teaching System to Cultivate Students’s Innovative Spirit[J]. Research and Exploration in Laboratory, 2011, 30(8): 163-166.
[11] 嚴 薇, 袁云松. 大學生實踐創新能力培養的探索與實踐[J]. 中國大學教學, 2012(9): 78-80.
Yan Wei, Yuan Yun-song. Exploration and Practice to Cultivate Practice Innovation Abilities of Students in University[J]. China University Teaching, 2012(9): 78-80.
[12] 王曉東, 吳英杰, 余春燕,等. 算法與數據結構學習興趣影響因素分析[J]. 計算機教育, 2010(6): 73-76.
Wang Xiao-dong, Wu Ying-jie, Yu Chun-Yan,etal. Analysis of the Relationships between Learning Interest of Algorithms and Data Structures and Influencing Factors[J]. Computer Education, 2010(6): 73-76.
[13] 孫愛東, 楊秋妹, 肖媚燕. 多層次的“數據結構”實踐教學模式探討[J]. 計算機教育, 2009(12): 166-167.
Sun Ai-dong, Yang Qiu-mei, Xiao Mei-yan. Exploration on Multi-level “Data Structure” Practice Teaching Model[J]. Computer Education, 2009(12): 166-167.
[14] 李艷玲. 綜合性設計性實驗的開設與管理[J]. 實驗室研究與探索, 2008, 27(8): 110-111.
Li Yan-ling. Set-up and Management for Integrated and Design-Type Experiments[J]. Research and Exploration in Laboratory, 2008, 27(8): 110-111.
[15] 田運生, 劉維華, 王景春. 綜合性設計性實驗項目建設的探索與實踐[J]. 實驗技術與管理, 2012, 29(2): 126-129.
Tian Yun-sheng, Liu Wei-hua, Wang Jing-chun. Exploration and practice on construction of comprehensive and designing experimental projects[J]. Experimental Technology and Management, 2012, 29(2): 126-129.