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