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