摘要:從數據結構課程的教學目的和教學內容出發(fā),在分析教學難點的基礎上,從實踐的角度提出如何克服教學難點、提高大學生課堂教學參與度和保證教學效果的教學方法。結合實驗環(huán)節(jié)的改進,數據結構課程的教學取得了更好的成效。
關鍵詞:數據結構;課堂教學;教學方法
隨著計算機科學技術的飛速發(fā)展,計算機應用深入到社會各個領域,一些復雜的實際問題需要處理大量數據,數據結構研究的重要性日趨顯現。在計算機中怎樣才能有效地表示(存儲)這些數據及其相互聯系,使之能夠在相關的處理程序中有效地用來模擬和解決問題,這就是數據結構課程討論的中心問題[1]。
1教學目的
著名的計算機科學家Niklaus.Wirth提出“算法+數據結構=程序”的公式,由此可見,算法與數據結構之于程序設計的重要性。算法是程序的邏輯抽象,是解決某類客觀問題的數學過程;數據結構也稱信息結構,它具有邏輯結構和物理結構兩個層面上的涵義。把客觀事物自身所具有的結構特點稱之為邏輯結構,例如家族譜系是一個樹型邏輯結構;把邏輯結構在計算機中的具體實現稱之為物理結構,例如樹型邏輯結構是用指針表示還是使用數組實現。
算法和數據結構是相輔相成、密不可分的。若把數據結構喻為建筑工程中的建筑設計圖,那么算法就是工程中的施工流程圖,它們呈相互依托的關系。因此,在數據結構的教學過程中,不僅要教會學生如何設計良好的數據結構,提高復雜程序設計的能力,還應該培養(yǎng)其算法分析與設計能力。
另外,數據結構是計算機學科的專業(yè)基礎理論課,是計算機學科的核心課程之一。它介于數學、計算機硬件和軟件三者之間,是操作系統、數據庫、編譯系統等計算機學科的核心課程以及相關的應用軟件開發(fā)的重要基礎。
2教學內容
根據教學目的和考研大綱要求,數據結構課程需要介紹幾種數據結構在計算機中的存儲、操作和實現,介紹部分算法(如排序、遞歸)的設計和實現。主要內容如下。
1) 深刻理解線性表,能夠應用相關知識點解決實際問題。
2) 比較棧(FILO)和隊列(FIFO)的特點,考慮棧和隊列的順序和鏈式存儲結構,利用堆?;蜿犃械奶匦?,將它們作為基礎的數據結構,支持實際問題求解算法的設計。例如用棧解決遞歸問題,用隊列解決緩沖區(qū)和調度問題等。
3) 掌握樹、二叉樹的各種性質、樹和二叉樹的不同存儲結構、森林、樹和二叉樹之間的轉換及前中后三種遍歷方式、線索化二叉樹、二叉樹的應用(二叉排序樹、平衡二叉樹和Huffman樹)等,還要能進行相應的遞歸的和非遞歸的算法設計。
4) 識記圖以及基于圖的各種定義,存儲方式。熟練掌握圖的深度遍歷,廣度遍歷算法,以及基于圖的其他算法(最小生成樹求解,拓撲排序問題,關鍵路徑問題,最短路徑問題)。
5) 理解靜態(tài)查找與動態(tài)查找的含義及比較它們的區(qū)別;掌握平均查找長度ASL的概念,B-樹的概念,B+樹的概念以及Hash表相關的概念。掌握順序表、鏈表、二叉樹上的查找方法和學會計算各種查找方法的算法復雜度。
6) 排序既是重點,又是難點。排序算法眾多,
有內排序和外排序之分。記住各種不同算法的定義,特征及復雜度分析。
3教學難點
目前,“數據結構”在我國已不僅僅是計算機專業(yè)的核心基礎課程,也是其他非計算機專業(yè)的主要選修課之一。然而,學生認為這門課學習起來相當困難,具體原因如下。
1) 課程高度抽象,需要數理邏輯、圖論、集合論和代數系統的基礎。
2) 概念多,內容廣,算法編寫復雜。
3) 前驅課程教學不足。數據結構的學習需要運用許多前驅課程沒有涉及到的知識,缺乏這些知識使教師在解答問題時困難重重,學生自學也困難重重。
4) 課堂教學參與度下降,缺乏學習主動性。一方面,因為,學生知識積累不夠或者教師教學方法不新穎,所以學生不容易聽懂課堂教學內容,導致其課堂教學參與度的下降;另一方面,程序設計難度增加,使得上機難度加大,導致程序通過率低,實驗效果差,學生學習主動性下降學。
4教學方法與手段
針對教學中出現難點問題,我們要改善教學方法,利用多媒體設備輔助教學手段,提高教學的趣味和學生課堂的參與度。同時,還要加強實驗環(huán)節(jié),提高學生的編程能力,提高學習的主動性。
4.1突出教學重點與分散教學難點
在教學過程中,教師對易懂的內容可以點到為止,對比較抽象的重點、難點問題可以精講細講,借助多媒體設備將重點難點的細節(jié)內容用動畫形式演示,讓這部分內容更形象、生動,讓學生更容易接受。
教學重點是指數據結構中的基本概念、算法思想等。而算法正確選擇的前提就在于對基本概念的把握,因此,對概念的講解一定要清楚、準確、完全。對于比較抽象的重點概念,教師要弱化理論并結合多種教學方式和手段去講深講透,用學生能夠接受的方式去介紹,從而起到分散難點、化難為易的效果,使學生真正理解概念的含義并掌握算法的實質。對于典型問題的分析,教師應把理論問題與實際應用問題聯系起來講解,加強課程的生動性和直觀性,進而使學生更加明確結構與算法的作用,提高學生運用算法和解決實際問題的能力。
教學難點是指學生不易理解和容易出錯的地方。學生和教師的理解會有些差異,所以教師要調查了解,以作業(yè)、課堂提問、電子郵件等各種形式和學生進行溝通,確定課程的難點內容。在難點確定之后,教師要分析難點究竟難在何處?是因為概念抽象不易掌握,還是因為算法思想復雜不易理解,或是容易混淆不易區(qū)別?然后研究解決問題的方法。對于抽象的東西應該形象化、直觀化地進行講解,對于復雜的內容應注意其條理性,對于易于混淆的內容宜盡量采用對比法加于區(qū)別,做到化難為易。
4.2教學方法研究
在課堂講授中,教師起到的是提綱挈領、組織和引導的作用。教師要明確授課的目的,及解決什么問題,而通過什么途徑達到這個目的是非常重要的。在教學的過程中,教師應該從實際應用出發(fā),通過實際問題的分析,理解教學內容,激發(fā)學生學習興趣。那么究竟采用什么教學方法,才能更好地培養(yǎng)和激發(fā)學生學習的興趣呢?
采用基于“問題”的教學方法。把數據結構的知識點轉化為某個問題的求解,用“問題”組織教學,使學生在解決問題中掌握知識的發(fā)生、發(fā)展過程以及知識結構和運用規(guī)律[2]。在教學過程中,采用以學生為主體、以問題為中心的模式,激發(fā)學生的學習興趣,充分調動學生的求知欲,提高他們的積極性和主動性。在教學過程中,教師要自始至終都圍繞問題而展開教學活動,引導學生不斷發(fā)現問題、提出問題、分析問題并最終解決問題,培養(yǎng)學生探索問題和解決問題的能力,更有利于培養(yǎng)學生的創(chuàng)新能力。
4.3靈活應用多媒體設備輔助教學
多媒體設備這種現代化教學手段在教學過程中充當著越來越重要的角色,它集聲音、圖像、視頻和文字等媒體為一體,具有形象性、多樣性、新穎性、趣味性、直觀性、豐富性等特點,能產生直觀逼真的教學效果。如果能將傳統的教學手段和現代化教學手段結合起來教學,那么,教學效果會事半功倍。例如順序表的第i個位置插入一個新元素,首先通過多媒體設備動畫演示插入元素的過程:1)判斷順序表的存儲空間是否已滿,若已滿,則進行“溢出”處理;2)檢查i值是否超出所允許的范圍,若超出,則做“超出”處理;3)將順序表的第i個元素以及它后面的所有元素均后移一個位置;4)將新的元素寫入到空出的第i個元素位置上;5)順序表的長度加1。然后在黑板上根據演示過程寫出插入算法的偽代碼,最后又可以在多媒體設備上顯示出插入算法用高級語言實現的程序。通過這種邊看動畫演示邊講解插入操作來引導同學們的思路,讓課堂活躍起來。
4.4提高學生課堂參與度
影響學生課堂參與的因素很多。一方面,由于受到傳統文化的影響,在學生眼里,老師的答案一定是正確的,學生只是盲目接受老師的觀點而不會主動思考或表達自己的觀點。另一方面,學生課堂參與的動機是被動的、被給予的、被要求的或受條件驅使的[3]。
要提高學生課堂參與度,教師可以從學習興趣、教學方法、教學技巧三個方面進行教學。提高學習興趣是這三個方面中最重要的環(huán)節(jié),如果學生有主動學習的動機,他們將比較容易參與課堂教學。吸引學生產生興趣的方法多種多樣,如一堂有趣的緒論課、一節(jié)生動的CAI課,甚至老師的著裝、流利的普通話、幽默風趣的話語等。
要提高學生課堂參與度,教師還要有合適的教學方法,高超的教學技巧,可以采用基于“問題”的教學方法,而在教學過程中,還可以采取提問全班同學、個別提問、回答學生問題、學生間互相問答并做出評論等教學手段,將學生的注意力吸引到課堂。
4.5加強實驗環(huán)節(jié),提高算法設計和程序設計能力
數據結構課程不僅邏輯性強,而且極抽象,大部分內容無法通過理論課知識直觀表現出來。因此,在授課的同時,教師還要引導學生利用上機實驗來加強理論到實踐的轉化。只有通過實驗才能發(fā)現利用數據結構解決實際應用問題的有效方法,從而提高學生分析和解決問題的能力。
在實際教學過程中,實驗是學生學習數據結構課
程的一大難關。一方面,因為數據結構課程內容較多,學生沒有完全理解前面所學的知識,而新的知識又接踵而至,問題堆積致使學生實驗內容很難完成。另一方面,因為學生對程序設計語言掌握得不熟練,大部分學生只是掌握了程序設計語言基本知識,應用基本知識去解決問題的能力有限,所以實驗課對學生來說有相當的難度。
要解決這個問題,我們可以從兩個方面著手。
1) 考慮學生編程能力的差異,將實驗設置成必做和選做實驗。這兩類實驗都由授課教師結合相關知識點設計。前者比較容易,主要在于幫助學生掌握基礎知識;后者有一定的難度,主要在于幫助學生提高算法設計和程序設計能力。
2) 在理論課教學完成后,教師結合實際給學生布置一些有具體應用背景的實驗題目,允許學生根據個人的興趣選做其中的實驗題目,充分發(fā)揮學生的主動性。考慮到實驗的難度允許學生分組合作完成。分組合作并不意味著拷貝某個能力強的學生的實驗結果,而是體現同學間互相幫助,共同進步的精神,融入團隊合作的軟件開發(fā)模式中去,使學生分析和解決問題的能力得到進一步的提高。
5結語
數據結構課程讓學生學習到面向對象程序設計的基本思想,進一步鞏固和提高C++編程能力,并養(yǎng)成良好的程序設計習慣,對學生編程能力的發(fā)展有直接的影響。我們從實踐的角度出發(fā),探討教學難點,就是要改善教學方法并從手段上去克服教學難點,希望學生不僅能掌握數據結構的基本知識,也具備解決實際問題的能力。
參考文獻:
[1]