于 麗
(新疆警察學院 信息安全工程系,新疆 烏魯木齊830011)
《數據結構》課程是計算機程序設計的重要基礎課程,它不僅是計算機專業的核心課程,而且已成為許多高校信息類相關專業的重要課程,是設計和實現編譯程序、操作系統、數據庫系統及其它系統程序和大型應用程序的重要基礎,研究數據結構的目的是為了編寫更高效的程序。同時它也是計算機專業研究生考試、大專學生專升本的首選考試課程[1-2]。學生雖然認識到該課程的重要性,但學生在學習這門課程時,在課程中涉及到大量的概念、數據的存儲結構以及各種各樣的算法,這些對于剛學過一門編程語言的新生來說,是非常抽象的。在教學過程中學生普遍反映學習起來非常困難,教師也反映教學效果不盡如人意。因此,如何學好、怎樣教好《數據結構》成為學生和教師普遍關注的一個問題。
在教學中,學生剛接觸到《數據結構》課程時,總認為《數據結構》是一門理論課,感到枯燥、乏味,學習興趣不濃,甚至有學生認為不學數據結構照樣能編出程序。數據結構是門理論性與實踐性并重的課程,注重培養學生利用理論知識解決具體問題的能力的培養。如果僅僅滿足于講解清楚,而不注意教學的生動性,學生的學習行為只能是種被動行為,為了考試而學習。最后導致學生死記硬背課堂講解的知識點,把一門實踐性很強的課程變成了一門內容枯燥、乏味,需要大量記憶知識點,與實踐完全脫鉤的課程。
學生在學習《數據結構》課程時,由于其前導課程掌握不好或沒能熟練掌握(高級程序設計語言或面向對象程序設計),導致學習《數據結構》課程時感覺很困難。數據結構中的算法多數由類C/C++ 實現,在學數據結構之前,已經系統的學習過C 語言的相關知識,但由于學生剛剛開始接觸程序設計語言,對其中的很多知識的掌握只停留在紙面上,沒有能夠融會貫通,導致用計算機解決問題不可能得心應手。同時對C 語言描述的高度抽象的算法理解困難,算法思路有,但編制程序又無從下手,特別是C 語言中的指針和結構體部分,在數據結構用得較多,在設計算法以及上機調試時有困難,學生對程序語言的掌握程度直接影響算法設計的質量。
在《數據結構》課程的教學過程中,長期以來,我們遵循以教師為主體,學生被動學習的傳統教學模式,僅局限教師 “滿堂灌”、“填鴨式”。對于數據結構這樣一門概念、算法繁多,需要較強邏輯思維能力的課程仍采取傳統教學模式,就很難取得良好的教學效果和達到預期的教學目的[3]。數據結構中有些算法的演示利用傳統的粉筆加黑板的教學方式,缺乏直觀性效果,難以充分展示算法的動態變化過程,學生難以想象數據之間的復雜關系。近年來,數據結構的教學已經大量采用多媒體教學,但是采用簡單的PPT,仍然不能很好的解決這樣的問題,且存在多媒體授課信息量大,學生聽課時強度大,理解困難,嚴重影響了教學效果。
《數據結構》課程本是一門實用性很強的課程,但內容抽象、瑣碎、龐雜,涉及很多概念和技術。所有這此內容均自成體系,相互之間的銜接線索很少,總體感覺內容零散,沒有個整體的知識框架體系。這些內容在實際應用中又都很重要,而現行的教學計劃實踐課時普遍不足,實驗課安排的實驗項目很難含蓋課程的所有知識點。同時實驗內容的設置上,往往都是大量的驗證性實驗內容,缺乏對實際問題的解決,學生在實驗之后仍然不知道學習數據結構在解決實際問題的。因而在具體應用上并沒有教會學生解決問題的思路、算法思想和數據結構的使用,在實驗中只能停留在完成課本內容,而對實際問題則是無從下手,這些都是教學脫離實際的最現實寫照。
《數據結構》課程本身是一門抽象程度較高的課程,對于缺乏實際應用經驗的學生來說,理解起來具有一定的難度。我們通常所說的數據結構,指的是數據間的邏輯結構,如線性表、二叉樹和圖結構[4]。盡管很多教材為了使理論更加直觀和易于理解,在編寫時配了很多圖示,但在實現這些結構的操作時,學生還是感到不知如何下手。不少同學反映學完該課程之后不知道能用在什么地方、 能夠解決什么問題,即使教材上所講內容都完全掌握,仍然無法應用到實際問題當中,除了課堂上講的例子外,找不出該知識點的其他應用,同時遇到實際問題時,也想不出該問題的抽象數據類型。
俗話說,“興趣是最好的老師”,如果要學生學得好,首先就要讓學生對該門課程產生興趣。教好《數據結構》這門課,一定要從培養學生的學習興趣開始,因此在進行數據結構課的第一次授課中,并不急于介紹理論,而是強調應用,通過介紹數據結構在實踐中的應用來激發學生的學習興趣。如多岔路口交通燈管理問題;1997 年轟動一時的國際象棋“人機”大戰,由國際象棋大師與IBM 公司的計算機進行國際象棋比賽,為什么最終計算機能夠取得勝利問題;圖書館的書目檢索系統,如何組織圖書的登錄號、書名、分類號等數據才能快速實現查找、插入、刪除操作;旅游路線設計問題,如想去上海、南京、杭州、蘇州等地旅游,怎么樣安排線路以求花費最少等等。以上應用都是貼近生活,學生比較熟悉,通過實際問題的分析,明確數據結構課程的重要性與實用性,激發學生學習學習興趣。此外,如果教師在講授該門課程過程中,同時,能夠引入一些生活中的實例,引導學生巧妙處理生活中的日常問題,讓學生感受到《數據結構》這門課程與現實生活中的關系,就更加能夠提高學生的學習興趣。
《數據結構》課程是在學生有一定的程序設計基礎的前提開設的,C 語言程序設計是數據結構的前導課程之一,學生對它的熟悉掌握程度,直接關系到數據結構課程的教學效果。C 語言本身的靈活性,對于剛剛學完C 語言程序設計的學生而言,運用不一定很自如。另外,C 語言難點就是指針、函數、數組作為函數參數以及結構體類型等,而數據結構課程教學過程中主要運用這些知識點來分析、解決問題的。對于大部分學生來說,C 語言運用能力不是很強,如果上課時直接切入主題,他們就會有“云山霧罩”的感覺。如何來解決這個問題呢?我們可以利用一、兩次課的時間(2-4 學時)來復習C 語言的相關知識,即數組、指針、函數和結構體等。可以將這些學時納入到教學進度表中,教師在復習并不是面面俱到,而是將與本課相關的內容做以歸納總結,這樣既可以復習以前的知識,加深印象,強化理解,又可以為數據結構課程的教學做鋪墊。
基于C 語言的數據結構,一個算法對應一個函數,這樣做的目的是為了擺脫源程序的繁瑣,以便將精力集中在算法思想上。所以在大部分教材中,幾乎看不到一個完整的程序,也正是這個原因,給初學者帶來了很大的不便。對剛進入本課程學習的前幾個算法給出完整的程序,并加以詳細講解,使學生理解算法和源程序之間的關系。
當然,進行一定的編程訓練也是必不可少的。可以通過課堂練習、實驗和大作業訓練,可以讓學生對C 語言各方面知識作一個整體掌握,對比較重要的內容更要加強練習。同時,還可以將所學的“數據結構”的知識具體化,與實際問題相結合,提高綜合解決實際問題的能力。
“數據結構”內容繁復,高度抽象,廣泛涉及軟、硬件的各種知識,應給學生理出清晰的幾條主線,在他們頭腦中搭建課程的整體框架。在教學過程中,首先,要分析教材各個章節的關系,從課程要求的大局出發,由淺入深把握主線,采用縱橫對比的方法,詳細介紹《數據結構》課程體系。《數據結構》是研究非數值計算的程序設計問題中所出現的計算機操作對象(數據)、數據之間的關系(數據的邏輯結構)、對數據的操作(各種不同算法)、算法復雜性分析等內容的一門學科。每一種數據結構,都要搞清其邏輯結構、存儲結構、常用操作、算法性能分析、實際應用五個方面。其次,要吃透教材、突出重點[5]。對于數據結構課程,其基礎的且為重點的內容應該是“表、樹、圖”三大數據結構和“查找、排序”兩大類算法。還有很重要的是講好課程介紹即第一堂課,使得學生能夠理解該課程在整個計算機專業體系中所處的位置和該課程的重要性,為學好課程打好基礎。
在教學過程中要始終貫徹以學生為主體,教師為主導的教學模式。教學方式要力求多樣化,對不同章節的不同內容可采用不同教學方法。
采用問題驅動教學法。問題驅動是指學生在教師創設的情景下,應用已學知識提出相關問題,繼而解決問題的過程。在《數據結構》課程的教學過程中,教學除了講解基本的理論知識外,還要注意引導學生去分析問題、抓住本質、組織數據、設計算法、解決問題,并且要求學生能舉一反三,觸類旁通,從而培養學生的綜合能力。
實例教學法。《數據結構》課程理論性和邏輯性較強,學生理解起來有一定難度,在講授的時候,結合生活中常見的實例進行講解并與學生互動,會有利于學生的理解。在教授過程中可以提出一些模擬現實的課題,分組來組織學生對課題展開討論,在討論的過程中發現問題,提出問題,老師參與學生的討論,并針對問題講述解決問題所需要的數據結構的知識。這樣既增強了師生之間的交流,也讓學生由被動的“聽課”變主動地學習課程,可充分調動學生學習的主觀能動性;同時,學生的分析問題、解決問題的能力也可得到很大提高。
為了讓學生在有限的時間內更好的掌握知識,可以采用融合了多媒體技術的計算機輔助教學(CAI)。還可以采用現有的DSDEMO 數據結構課件演示系統,進行演示,這樣可以使教學內容變得更直觀、形象、生動和有趣,從而取得良好的教學效果。
同時利用計算機網絡構建教學支持平臺。充分發揮校園網的作用,利用計算機網絡輔助教學,將《數據結構》課程的教學大綱、電子教案、電子課件、程序案例以及相應的教學資料,進行匯集整理,逐步積累,最終集成一個資料豐富的網站,放在校園網上師生共享,形成一種全新的教學模式,因材施教,以便充分發揮學生的學習積極性和主觀能動性。另外也可以設立輔導答疑時間,利用網絡進行答疑,解決同學們在課余時間遇到的問題。
《數據結構》課程有很強的實踐性,應注重培養學生利用理論知識解決具體問題的能力培養。為使學生真正學好“數據結構”,除了在課堂上要采用行之有效的教學方法外,還要讓學生勤動手,多實踐。上機實踐是對學生綜合素質進行訓練的一種最基本方法,是與課堂聽課、課余自學和練習相輔相成的、必不可少的一個教學環節。在實踐中遇到的問題往往比平時的習題要復雜得多,也更接近于實際。在安排實訓項目時,從簡單程序起步,逐步加大難度,使學生的編程能力得到鍛煉。在授課過程中重點從以下幾個方面進行了探索實踐:第一,合理設置實訓內容,力爭與理論課的重點、難點及實用知識聯系起來,選擇有具體應用背景的實訓題目,充分發揮學生的主動性;第二,注重實踐過程,注重學生綜合能力的培養;第三,為了培養學生的創新意識和團隊協作精神,促進學生之間的交流和協作,使不同水平的學生都能在大型實驗項目中擔負起相應的工作,特別設計了一套針對綜合型實驗和探索創新型實驗考核方法。
根據不同的實驗項目采取不同的考核方式,基礎型和設計型實驗項目安排在平時每周的上機實驗課進行,根據學生提交的實驗報告進行考核。綜合型和創新型實驗項目較大,需要學生分工合作,共同完成,一般對學生進行分組,每組完成一個實驗項目,在課程設計環節完成,一般有兩周時間,教師根據每個學生在組內的表現給出一個考核成績,項目完成后,再根據各組提交的項目報告和項目的質量給出合理考核成績。這樣既激發了學生的創新能力,又提高了學生的團隊合作精神。
數據結構是計算機專業及相關專業的核心課程,是計算機程序設計的重要理論基礎。對該課程的教學改革是一項長期而艱巨的任務,既要重視基礎理論知識的學習,又要重視實踐教學環節。針對在數據結構教學過程中所發現的問題進行討論和改革,實踐證明該措施取得了良好的教學效果,對進一步的改革提出了一些建議,希望能夠更好地提高教學效果。
[1]嚴蔚敏,吳偉民.數據結構(C 語言版)[M].北京:清華大學出版社,2002.
[2]彭波.數據結構[M].北京:清華大學出版社,2006.
[3]孫岐峰.“數據結構”課程教學反思與改革[J].計算機教育,2009(11):66-68.
[4]張敬芝.數據結構課程教學改革研究[J].長春師范學院學報:自然科學版,2005,2:147-148.
[5]杜作陽.數據結構教學改革的研究[J].高教論壇,2007(6):46-48.