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