摘要:本文從課程教學的實際出發,闡述了“數據結構”課程在計算機專業中的地位、學習目的,并對“數據結構”課程教學過程中的教學方法、教學手段方面進行了一些有益的探索。
關鍵詞:數據結構;教學方法;教學手段
中圖分類號:G642文獻標識碼:B
文章編號:1672-5913(2007)08-0016-03
1 前言
“數據結構”是計算機程序設計的重要理論基礎,是計算機學科的核心課程之一,近年來也成為全國許多高校計算機專業招收研究生的必考課程之一。作為計算機相關專業的專業基礎課和專業課程的算法分析與設計、操作系統、軟件工程、數據庫概論、編譯技術、計算機圖形學、人機交互等都涉及到各種不同的數據結構。例如:語言編譯要使用棧、散列表及語法樹;操作系統中要用到隊列、存儲管理表及目錄樹等;數據庫系統中要運用線性表,鏈表及索引樹等進行數據管理等等。這些后續課程的學習都與數據結構密切相關,只有學好了“數據結構”,才能更好地學習其他專業課程。因此在學習之初,就要向學生講清楚這門課程的重要性,提高學生對這門課程的重視程度。
“數據結構”課程涉及到離散數學、可計算性理論、算法復雜性等理論知識。對于學生來說,該課程理論性強,又較抽象和深奧,往往對算法設計或程序設計中的技巧感到難以理解和掌握。筆者多年來一直從事“數據結構”課程的教學,對如何改進教學方法和提高教學效果做了一些研究和探索,并取得了良好的效果,課程組于2005年將“數據結構”申報立項為江西省省級教改課題。
2 課程的地位與學習目的
“數據結構”研究的是非數值計算的程序設計問題中所出現的計算機操作對象(數據)、數據之間的關系(邏輯結構)、對數據的操作(各種不同算法)、算法復雜性分析等內容。對于每一種數據結構,都要搞清其邏輯結構、存儲結構、常用操作、算法性能分析和實際應用等五個方面。它不僅是一般程序設計的基礎,而且是設計和實現編譯程序、操作系統、數據庫系統等系統程序和大型應用程序的重要基礎。
本課程要求學生學會分析問題,運用求解問題的策略設計算法,學會分析數據,用抽象數據類型的方法表達數據,設計數據的存儲結構和算法,并運用算法復雜性理論分析算法的時間和空間效率。因此,如果其前導課程“計算機導論”、“高級語言程序設計”和“離散數學”掌握得不好,學生在學習這門課程時將感到難以理解和掌握,面對具體的算法問題時感覺無從下手,在應用實踐時更是感到困難重重。解決好前導課程的遺留問題后,數據結構課程的教學效果才有可靠的保障。
3 行之有效的教學方法與教學手段
3.1 注重理論與實踐相結合
“數據結構”是實踐性很強的課程,學習目的之一就是為了培養學生閱讀和設計算法的能力,并對算法的執行效率進行簡單的分析。在教學過程中,筆者發現主要的教學難點在算法設計上,很多學生反映說上課能聽懂老師講的內容,但輪到自己編寫算法時又不知該從何下手。如何幫助學生將課程內容和實際要解決的問題聯系起來,是提高數據結構教學質量的關鍵所在。因此在講授過程中應當盡量避免就概念講概念、就結構講結構的簡單教學模式,而是根據不同知識單元的特點采用相應的教學方法。這就要求教師要不斷地提升自己的知識層次和知識的綜合運用能力,并轉變傳統的教學觀念,使自己的角色逐漸由講解員過渡為導航員,促使學生由被動的旁聽者變為主動的參與者,培養學生的綜合能力。
3.2 注重教學的趣味性,采用案例式教學
有部分學生剛一接觸到這門課程時,認為它是一門純理論課,對于老師課堂上講的許多算法(理論)不知有何作用,因而感到這門課程非常枯燥、乏味,漸漸就失去了學習興趣,甚至有同學認為不學“數據結構”照樣能編出程序。為了避免學生們產生厭學情緒,我們在教學中經常采用問題教學法。不是急于去介紹課程內容所涉及的理論,而是以有趣的問題引發學生的學習興趣,使學生產生學習的內在動力。如:在講有序表的二分查找時,可以任選一名學生和教師一起做一個猜數游戲,學生在心里想一個100以內的自然數,教師來猜。每猜一個數時,學生要明確回答所想的數是等于、大于還是小于教師所猜的數。提問:最多多少次可猜中學生所想的數?又如:在講線形表的插入和刪除算法時,可以用貼近生活的例子,如在食堂排隊買飯來講解,如何移動?是先插入再移動還是先移動再插入?這樣做就激發了學生的創造性思維和創造欲望,有利于培養學生發現、提出、分析和解決問題的能力。
3.3 引導學生從多角度去思考,找出多種解決方法
算法設計過程是一個創造性的思維過程。通過算法設計,可以有效提高學生的創新能力。對于一個問題,我們要求學生能盡量從多角度去思考,找出不同的解決方法,而不是滿足于找到了一種方法。通過對同一問題尋找不同的算法來實現,可有效地發散和開闊學生的思維,同時通過對不同算法的比較,也可以加深學生對算法的理解,發現算法的適用范圍。
如約瑟夫(Josephus)問題:編號為1,2,……,n的n個人按順時針方向圍坐一圈,每人持有一個密碼(正整數)。一開始任選一個整數作為報數上限值m,從第一個人開始報數,數到m時停止報數,報m的人出列,將他的密碼作為新的m值。接著從出列的下一個人開始報數,數到m的人又出列,如此下去,直到所有的人都出列為止,試求出它們的出列次序。這一問題至少可以采用四種不同的方法來解決。
方法一,用循環線性鏈表做存儲結構解決Josephus問題。設置一個循環線性鏈表A及隊列B,每個節點保存一個人的數據(序號和密碼),初始時A中順序保存每個人的數據,B為空。某人出列后,將對應節點由A鏈表中刪除而插入到B鏈表的表尾,當A為空時B中即順序保存了出列的序號(節點也可只保留密碼)。
方法二,用靜態鏈表做存儲結構解決Josephus問題。具體實現類似方法一。
方法三,用線性表的順序存儲結構解決Josephus問題。設置兩個順序表A、B,初始時A[i]保存第i個人的密碼(i= 1,……,n),出列后A[i]=0,B[j]中保存第j次出列的人的序號。
方法四,用線性表的順序存儲結構解決Josephus問題。類似方法三,設置順序表A及計數器j,初始時A[i]保存第i個人的密碼(i=1,……,n),j為0。出列后A[i]=0,計數器加1,并輸出i。
3.4 善于抓住算法的共同點,實現多種算法的統一
數據結構中算法很多,每一種算法都有背景和適用范圍,但是有些不同背景中提出的算法也有一些共同點。從這些共同點出發來介紹相關的算法,不僅有利于學生對相關知識的理解和掌握,還將提高學生學習和教師教學的效率。
例如,數據排序的算法。在一般教科書上,只介紹了按升序排列數據的算法,而沒有介紹按降序排列數據的算法。其實,按升序排列與按降序排列可以按兩種不同的思路統一起來。
① 若提供了按升序排列的算法的源代碼,則只需將源代碼中的“>=”與“<=”互換、“>”與“<”互換,則可得到按降序排列的算法。
② 若沒有提供按升序排列的算法的源代碼,則先將原始關鍵字乘以-1(對關鍵字為數值型的數據而言),然后排序。排序后再將每個關鍵字乘以-1,即可得到按降序排列的結果。
3.5 采用計算機輔助教學手段
在教學手段上,完全采用一支粉筆加一塊黑板的傳統教學模式很難收到良好的教學效果,而采用多媒體教學可以強化教學效果。隨著教學改革的不斷深入,很多高校都配備了多媒體教室,這為我們采用現代化手段進行教學創造了條件。因此教師應當充分利用這些教學資源所帶來的便利和視聽效果,以優化傳統的課堂教學過程,增強教學效果和效率。
首先,要精心制作電子講稿,一般都是采用PowerPoint來制作。電子講稿要能體現課程的重難點,而不是教材的簡單拷貝。通過PowerPoint的動畫、圖示等手段,把需要講解的內容展示出來,這樣的表現形式既生動活潑容易激發學生的學習興趣,又能節省課堂時間。其次,部分較難的算法通過編寫教學軟件進行動態演示。例如棧的應用之一——迷宮問題,通過動態演示,學生對堆棧的進出一目了然,就非常容易理解。如果只是依靠口頭講解很難有好的教學效果。再次,在習題課和上機實習時,可以直接利用教師機把一些程序的運行過程和運行結果直接演示給學生看,這種直觀的教學方式可以取得很好的教學效果。
3.6 加強實踐,提高算法設計能力
要使學生真正學好“數據結構”這門課程,除了在課堂上要采用行之有效的教學方法外,還應加強實踐。我們的做法是通過三種實踐方式:一是做習題;二是上機實踐;三是課程設計。
由于專業課程的理論與技術往往表現出較強的綜合性、前沿性和探索性,是發展中的科學。我們除了布置跟課程內容緊密相關的習題外,還鼓勵學生撰寫小論文或總結報告,讓他們時刻跟蹤本課程的最新動態。上機實踐則不僅能進一步提高學生靈活運用數據結構和算法的能力,還可使學生在編程、上機操作、程序調試與正確性驗證等基本技能方面受到嚴格的訓練。學習數據結構更深層次的目標是能夠針對實際問題來選擇、擴展甚至是設計全新的數據結構,然后設計相應的存儲結構并加以實現,從而最終解決問題。這個過程是一個融會貫通的過程,單憑課程實驗是無法完成的,也不可能在課堂教學中就建立完整的意識,因此必須在課程之后進行課程設計。為此,我們專門設計了一套完整的實踐教學大綱,為學生的上機實踐和課程設計這兩個實踐環節提供指導,在實踐內容和形式上為學生提供多種可能的選擇。已經嘗試的形式有:計算機創業大賽、網頁大賽、計算機專業知識比賽等,通過開展這些比賽來有效地提高學生的自學能力、實踐能力和知識創新能力。
4 結束語
“數據結構”在整個計算機科學的知識體系中有著非常重要的地位和作用,是計算機專業學生必須掌握的一門課程。研究和探索數據結構的教學方法和教學技巧,幫助同學們學好這門課程具有很重要的實際意義。筆者經過多年的教學實踐,總結出了一些教學方法和教學技巧,并取得了較好的教學效果。但隨著計算機技術的進一步發展,對數據的描述、存儲、處理的要求將會提出更高的要求,對該門課程的教學內容、教學方法等方面的改革還有待于不斷地探索。
參考文獻:
[1] 嚴蔚敏,吳偉民.數據結構(C 語言版)[M].北京: 清華大學出版社,1997.
[2] 嚴蔚敏,吳偉民.數據結構習題集(C 語言描述)[M].北京:清華大學出版社,1998.
[3] 李春葆.數據結構習題與解析[M].北京:清華大學出版社,2000.
作者簡介:
鄧安遠(1968-),男(漢族),江西九江,副教授,研究方向:數據庫與信息系統,現代計算機網絡技術。