正文 “數據結構”教學中提高學生的編程能力淺談(1 / 2)

“數據結構”教學中提高學生的編程能力淺談

計算機教育

作者:鄧桂英 高麗萍 李銳 曹春萍 胡德敏

摘要:數據結構課程主要研究數據的邏輯結構和數據的存儲結構,以及對數據進行操作的有關算法。該課程以程序設計為基礎,對學生進行較複雜程序設計的訓練,對學生編程能力的培養至關重要。文章著重從如何注重教學方法、引導學生學習的常用算法、如何進行大量程序設計實踐等方麵來提高學生編程能力進行了討論。教學實踐證明這些教學方法能很好地提高學生的編程能力。

關鍵詞:編程能力;教學方法;算法;程序設計;實踐

中圖分類號:TP3-0 文獻標識碼:B 文章編號:1006-8228(2013)08-61-02

0 引言

數據結構是計算機專業及計算機相關專業的一門實踐性較強的軟件基礎課,它內容繁多,涉及麵廣,主要研究如何把具有一定邏輯關係的數據在計算機中存儲,它是對數據進行操作的有關算法研究的一門學科[1],它以程序設計為基礎,對學生進行較複雜程序設計的訓練,課程以提高學生的編程能力培養為主要目標。本文對數據結構的教學方法和實踐環節進行探討。

1 注重教學方法,提高學生的認識能力

在數據結構課程教學中為了提高學生的編程能力,應注重課堂的教學方法,使學生能更好地掌握課程內容,理解前人設計的算法,為此我們研究了數據結構的教學方法。現代教學論中,人們把教學方法歸為兩大類:一類是程序式教學法,其特點是課堂以教師為中心,有計劃有步驟地教給學生教學大綱上規定的知識;另一類是發現式教學法,這種教學法的基本目的不再局限於把前人整理好的知識傳授給學生,而是引導、鼓勵學生盡可能參與探索知識的過程,其側重點在於使學生領悟和掌握形成知識的過程和獲取知識的方法。

在教學過程中,我們將這兩種方法相結合,在講解數據結構理論基礎知識時主要采用程序式教學法,始終抓住什麼是“數據結構”這根主線,按照數據結構的邏輯結構、存儲結構、運算和運算的實現這四步逐層展開討論,做到教學思路清晰、邏輯性強,引導學生理解程序的運行原理和過程,並且對於不同層次的學生具體采用不同的方法。在講解數據結構算法的實現時,我們發現有些班的學生對編程普遍懷有恐懼感,針對這種情況教師與學生一起按常人的邏輯思維方式考慮解決問題的方法,歸納出解決問題的方法和步驟,按方法和步驟與學生一起一步一步地寫出程序,然後回過去重讀一遍程序,並將不夠理想的地方加以改進,使學生知道原來教師考慮問題的思路和自己的思路基本是一樣的,這樣引導學生編程的過程可使學生獲益匪淺,再經過大量地由淺入深地訓練後,學生消除了恐懼感,增強了信心,對編程逐漸也產生了興趣。

數據結構中的內容很豐富,為使學生更好地掌握,我們將教學重點放在使用廣泛的數據結構上,精講最基本的概念與方法,並在這基礎上例舉一些綜合的算法例子,通常借助於發現式教學法的思想進行教學,提供背景材料,講透算法思想,提出問題,鼓勵學生思考、分析,舉一反三,讓學生自己設計出多種算法。例如,在講解數據結構中的遞歸算法時,由於遞歸算法是數據結構中最難掌握的內容之一,學生一般不能很快接受,因此講解遞歸算法的方法很重要。我們先從學生較易接受的數學函數計算入手,進而引入非數值的遞歸算法,為了使學生了解嵌套調用、層層返回等概念,畫出遞歸運行的狀態圖和棧的變化圖,告訴學生嵌套調用和返回的含義,概括出“遞歸進入一層,則進棧,遞歸退出一層,則退棧”的方法,使學生一目了然。在掌握了基本遞歸算法及運行過程後,進一步例舉稍難的遞歸算法,使學生從多個方麵加深對遞歸算法的理解,這對數據結構後續內容中的樹、圖、查找和排序算法設計的學習是很有幫助的。

2 注重常用的、經典算法的學習,以激起探索研究的願望

在數據結構課程教學過程中我們強調基本的編程方法和常用的算法的介紹,並指導學生積累常用算法,積累經典的好算法,例如查找算法、排序算法、遍曆算法和圖操作算法等,這樣使學生在解決複雜問題之前掌握可使用的基本方法,可借鑒好算法的思想來拓展自己的思路。

數據結構中有很多經典的好算法,它們是著名的計算機科學家的成果。我們不僅要學習算法的設計思想,還要學習算法設計的思維方式,以提高學生的邏輯思維能力。以最小生成樹兩種方法為例,①普裏姆(Prim)算法以點為主,通過點朝最小邊權伸張出去的方式來求解,其時間複雜度為O(n2)(n為圖的頂點個數),它與邊數無關,因此適用於求邊稠密的最小生成樹,但在如何判斷加入一條邊而不形成回路的問題上就遇到了困難;②克魯斯卡爾(Kruskal)求最小生成樹算法以邊為主,容易判斷加入新頂點是否產生回路的問題,其時間複雜度為O(eloge),因此適合求邊稀疏的圖的最小生成樹。求解同一個問題時,不同的算法具備不同的特點,適應不同的範圍,這樣分析討論,可使學生思路暢通,激發起探研的願望。再例,數據結構中的排序算法可分類討論,由個別到一般,由具體到抽象形成算法的設計,並進行算法的初步分析,其中有些算法的分析並未得到完整的答案,例如,希爾排序的分析就是一個複雜的問題,因為它的時間複雜度是所取“增量”序列的函數,隻是得出一些局部的結論。雖然我們不一定要引導學生去專門鑽研這些難題,但是,提出並分析這些問題至少可以提高學生的學習興趣,形成研究問題的情景,對數據結構中的許多問題留下思考和探索的空間,從中啟發出今後需要深入研究的問題,這樣有利於對學生能力的培養。