程艷芬
摘要:文章針對(duì)“數(shù)據(jù)結(jié)構(gòu)”課程邏輯性強(qiáng)、抽象性高, 以及當(dāng)前教學(xué)環(huán)節(jié)普遍存在的問題, 結(jié)合多年的教學(xué)實(shí)踐, 提出了從教學(xué)內(nèi)容、教學(xué)方法方面出發(fā)來提高學(xué)生的實(shí)踐能力和學(xué)習(xí)積極性的有效設(shè)計(jì)。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);算法;教學(xué);教學(xué)設(shè)計(jì)
中圖分類號(hào):G623文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1006-8937(2009)08-0172-01
1前言
1.1 “數(shù)據(jù)結(jié)構(gòu)”課程的重要性
“數(shù)據(jù)結(jié)構(gòu)”在計(jì)算機(jī)科學(xué)中是一門綜合性的專業(yè)基礎(chǔ)課,是介于數(shù)學(xué)、計(jì)算機(jī)硬件和計(jì)算機(jī)軟件之間的一門核心課程。主要研究非數(shù)值計(jì)算的程序設(shè)計(jì)問題中計(jì)算機(jī)操作對(duì)象以及它們之間的關(guān)系和操作等。本課程可以為理解、應(yīng)用和開發(fā)程序提供技術(shù)和方法支持, 是程序設(shè)計(jì)的基礎(chǔ)?!皵?shù)據(jù)結(jié)構(gòu)”的教學(xué)旨在鍛煉學(xué)生的抽象思維和創(chuàng)造能力, 培養(yǎng)學(xué)生的實(shí)踐能力, 使學(xué)生學(xué)會(huì)用計(jì)算機(jī)解決實(shí)際問題時(shí)能有效地組織、存儲(chǔ)和處理數(shù)據(jù)的方法, 并設(shè)計(jì)出相應(yīng)的結(jié)構(gòu)清晰、可讀性好、質(zhì)量高的高效率算法, 為后續(xù)課程的學(xué)習(xí)和計(jì)算機(jī)應(yīng)用軟件的研制打下堅(jiān)實(shí)的理論和實(shí)踐基礎(chǔ)。
1.2 教學(xué)中普遍存在的問題
“數(shù)據(jù)結(jié)構(gòu)”課程的先行課是相應(yīng)的算法描述程序設(shè)計(jì)語言(如C++程序設(shè)計(jì)語言), 學(xué)習(xí)本課程要求學(xué)生掌握一定的用算法描述語言來編程解決問題的能力。 因此, 基礎(chǔ)差的學(xué)生對(duì)本課程的學(xué)習(xí)會(huì)更加敬畏。另外, “數(shù)據(jù)結(jié)構(gòu)”課程本身邏輯性強(qiáng)、抽象性高。因此在多年的教學(xué)實(shí)踐中發(fā)現(xiàn), 學(xué)生認(rèn)為這門課程理論性太強(qiáng)、不好學(xué), 學(xué)了不知有什么用、怎么用; 當(dāng)面對(duì)具體問題時(shí), 不知該如何應(yīng)用學(xué)過的知識(shí)來給出切實(shí)可行的解決方案以及編制程序, 得到正確的結(jié)果。
2教學(xué)設(shè)計(jì)要點(diǎn)
要解決上述問題, 首先要加強(qiáng)理論教學(xué), 教師在教學(xué)過程中盡量多采用一些動(dòng)態(tài)效果來描述算法的思想, 使學(xué)生易于接受和理解, 并加深印象; 盡可能多地將前后內(nèi)容聯(lián)系起來從中尋找一些規(guī)律進(jìn)行歸納提煉和使其系統(tǒng)化, 使學(xué)生能較好地理解各個(gè)知識(shí)點(diǎn)間的聯(lián)系, 從而“削減”課程的復(fù)雜度。然后通過合理、有效地設(shè)計(jì)實(shí)驗(yàn)內(nèi)容, 來強(qiáng)化理論教學(xué)的效果。
2.1以學(xué)生為主體, 溫故而知新的教學(xué)方法
筆者在教學(xué)過程中發(fā)現(xiàn), 由于C 語言是學(xué)生最先接觸的程序設(shè)計(jì)語言, 編程思想與以往的思維方式不同, 教學(xué)難度比較大, 使得教學(xué)時(shí)間大部分花費(fèi)在基本概念上。而學(xué)生對(duì)數(shù)組、結(jié)構(gòu)體、指針這三種數(shù)據(jù)類型的認(rèn)識(shí)和理解不深, 甚至印象模糊, 對(duì)函數(shù)、函數(shù)的參數(shù)、函數(shù)的返回值、函數(shù)調(diào)用的理解也不夠, 對(duì)遞歸及遞歸過程更是難以理解。但是, 這些內(nèi)容是數(shù)據(jù)結(jié)構(gòu)課程的重要基礎(chǔ), 在數(shù)據(jù)結(jié)構(gòu)課程中使用頻率很高。對(duì)這些內(nèi)容, 在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中, 盡管老師費(fèi)盡唇舌, 學(xué)生仍然模糊不清, 致使教學(xué)效果不理想, 學(xué)生甚至喪失對(duì)該課程學(xué)習(xí)的興趣和信心。
為了解決這一具體問題, 要求學(xué)生在課余時(shí)間認(rèn)真復(fù)習(xí)C++語言,課堂上結(jié)合課程實(shí)際適當(dāng)補(bǔ)充C++語言必要的知識(shí), 培養(yǎng)他們建立程序設(shè)計(jì)的思想體系, 逐步提高學(xué)生閱讀和理解算法的能力。在本課程的教學(xué)過程中,同時(shí)設(shè)置、討論、檢查C++相關(guān)內(nèi)容題目,穿插教學(xué)、溫故知新。在教學(xué)中以學(xué)生為主體, 改變“ 填鴨式”的做法, 有效設(shè)計(jì)“ 提問—— 解決方法—— 再提問”的方式, 讓眾多的學(xué)生參與, 用問題去激發(fā)學(xué)生思考, 引導(dǎo)他們?nèi)绾谓鉀Q問題。
2.2多舉實(shí)例, 調(diào)動(dòng)學(xué)生學(xué)習(xí)興趣
由于《數(shù)據(jù)結(jié)構(gòu)》理論性很強(qiáng), 直接從定義出發(fā)講解相關(guān)概念學(xué)生不易接受, 在教學(xué)過程中, 結(jié)合日常生活中的事例引入, 可大大激發(fā)學(xué)生的興趣, 從而調(diào)動(dòng)學(xué)生的求知欲。
例如, 在講解棧和隊(duì)列這一章時(shí), 分別舉出日常生活中的事例。如棧的例子, 在刷洗盤子時(shí), 依次把每個(gè)洗凈的盤子摞到洗好的盤子上面, 相當(dāng)于進(jìn)棧; 取用盤子時(shí), 又從上面一個(gè)接一個(gè)地向下拿, 相當(dāng)于出棧。又如穿、脫衣服時(shí), 一層一層往身上穿相當(dāng)于進(jìn)棧, 脫衣服時(shí), 又反過來一層一層地向外脫相當(dāng)于出棧。隊(duì)列的例子, 人們?yōu)榱速徫锘虻溶嚂r(shí)所排的隊(duì)就是一個(gè)隊(duì)列, 新來購物或等車的人接到隊(duì)尾(即進(jìn)隊(duì)) , 站在隊(duì)首的人購到物品或上車后離開(即出隊(duì)) , 當(dāng)最后一人離隊(duì)后, 則整個(gè)隊(duì)列為空。通過引用實(shí)例既形象又直觀, 即而使學(xué)生更加明確結(jié)構(gòu)與算法的作用, 提高學(xué)生運(yùn)用算法解決實(shí)際問題的能力。
2.3注重實(shí)驗(yàn)題目實(shí)用性和現(xiàn)實(shí)性, 提高學(xué)生興趣愛好
在設(shè)計(jì)實(shí)驗(yàn)題目時(shí)應(yīng)注重相關(guān)課程和實(shí)際生活和學(xué)習(xí)中的應(yīng)用, 題目生動(dòng)、接近學(xué)習(xí)和生活實(shí)際, 學(xué)生容易接受和理解, 易調(diào)動(dòng)學(xué)習(xí)積極性。
2.4用普遍授課,不同設(shè)問的教學(xué)方法,提高所有同學(xué)的學(xué)習(xí)興趣
教學(xué)中強(qiáng)調(diào)學(xué)生思考, 針對(duì)基礎(chǔ)不同的學(xué)生采用不同提示和設(shè)問, 提高學(xué)生的學(xué)習(xí)信心。教師還應(yīng)根據(jù)學(xué)生對(duì)基礎(chǔ)內(nèi)容的掌握情況來設(shè)計(jì)上機(jī)實(shí)踐內(nèi)容, 采用對(duì)不同學(xué)生進(jìn)行不同提示和設(shè)問的教學(xué)方法, 在實(shí)驗(yàn)過程中充分發(fā)揮每個(gè)學(xué)生的思維能力和實(shí)踐能力, 通過實(shí)驗(yàn), 使每個(gè)學(xué)生都有不同程度的收獲, 以提高他們對(duì)該課程學(xué)習(xí)的自信心。
2.5注意知識(shí)點(diǎn)的分類對(duì)比、適時(shí)總結(jié)
《數(shù)據(jù)結(jié)構(gòu)》課程中很多內(nèi)容是具有類比性的, 在具體教學(xué)過程中我們要把握這方面的特點(diǎn), 充分挖掘出內(nèi)容相關(guān)的知識(shí)點(diǎn)進(jìn)行分類對(duì)比。比如對(duì)于《數(shù)據(jù)結(jié)構(gòu)》內(nèi)部排序的學(xué)習(xí), 我們總共要講述近十種排序方法, 對(duì)于每一種排序方法都要講清楚排序算法的執(zhí)行原理、算法的執(zhí)行效率、算法的執(zhí)行步驟以及所需存儲(chǔ)空間的情況。內(nèi)容非常多, 學(xué)生很容易把問題弄混淆。在教學(xué)過程中如果能夠?qū)λ兴惴◤臅r(shí)間復(fù)雜度、空間復(fù)雜度、穩(wěn)定性等方面進(jìn)行列表、歸類、對(duì)比; 然后給出具體的一組待排序數(shù)值序列用不同的排序方法通過多媒體演示的方法分別進(jìn)行排序, 學(xué)生便可以一目了然, 輕松的掌握各種排序方法。
《數(shù)據(jù)結(jié)構(gòu)》課程中同樣有很多內(nèi)容是層層遞進(jìn), 前后聯(lián)系的, 比如數(shù)據(jù)類型的存儲(chǔ)結(jié)構(gòu)始終是順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)兩種方式。與此同時(shí), 學(xué)生對(duì)學(xué)過的知識(shí)又是分散的、片面的, 無法將知識(shí)相互銜接起來, 做到舉一反三。這就要求我們?cè)诮虒W(xué)過程中要承前啟后、不斷總結(jié)、及時(shí)復(fù)習(xí)、注重理解。以鏈表學(xué)習(xí)為例,在線性表章節(jié)我們學(xué)習(xí)了單鏈表、雙鏈表以及循環(huán)鏈表。它們?nèi)呤窍嗷リP(guān)聯(lián)、層層深入的, 而后面章節(jié)中樹的鏈表表示、圖的鄰接表和逆鄰接表表示、拉鏈法解決哈希表沖突都是鏈表的應(yīng)用。 在授課的時(shí)候應(yīng)注意將前面的內(nèi)容加以復(fù)習(xí), 把有聯(lián)系的內(nèi)容相互串聯(lián)起來形成一個(gè)完整的知識(shí)體系。
2.6設(shè)計(jì)綜合性實(shí)驗(yàn), 提高學(xué)生實(shí)踐創(chuàng)新能力
綜合理論教學(xué)和實(shí)踐教學(xué)的結(jié)果, 組織學(xué)生以小組為單位,由教師布置綜合性的題目, 或者由學(xué)生自己尋找感興趣的題目,教師引導(dǎo)學(xué)生全面、綜合地運(yùn)用所學(xué)的基礎(chǔ)知識(shí)來解決實(shí)際問題, 如開發(fā)一套具有售票、退票、查詢、統(tǒng)計(jì)等功能的火車票自動(dòng)售票系統(tǒng), 或編一個(gè)學(xué)生愛玩的游戲等, 使學(xué)生進(jìn)一步掌握數(shù)據(jù)結(jié)構(gòu)的應(yīng)用和軟件開發(fā)的方法, 提高學(xué)生分析問題、組織數(shù)據(jù)、解決實(shí)際問題的能力。學(xué)生在整個(gè)過程中, 可以相互討論、交流, 充分發(fā)揮學(xué)習(xí)積極性, 發(fā)揮團(tuán)隊(duì)精神, 共同進(jìn)步。把優(yōu)秀的解決方法放在校園網(wǎng)內(nèi)供大家學(xué)習(xí)參考, 或者由完成者進(jìn)行講解, 讓學(xué)生了解其他解題方法, 從中分析和比較不同算法的效率, 教師要及時(shí)了解學(xué)生對(duì)知識(shí)的掌握情況、題目的完成情況和學(xué)生意見, 有利于及時(shí)調(diào)整教學(xué)方法, 提高教學(xué)效果。
3結(jié)語
由于“數(shù)據(jù)結(jié)構(gòu)”課程在計(jì)算機(jī)專業(yè)課程中的重要性, 及其較強(qiáng)的理論性和實(shí)踐性, 使得它更需要合理、有效、系統(tǒng)地組織教學(xué)及實(shí)驗(yàn),形成一個(gè)以教學(xué)方法、內(nèi)容和手段為一體的教學(xué)體系, 才能有效地提高教學(xué)效果, 提高學(xué)生分析問題和解決問題的能力。
參考文獻(xiàn):
[1] 嚴(yán)蔚敏, 吳偉民.數(shù)據(jù)結(jié)構(gòu)(C 語言版)[M].北京:清華大學(xué)出版社,1997.
[2] 嚴(yán)蔚敏, 吳偉民.米寧數(shù)據(jù)結(jié)構(gòu)題集(C 語言版)[M].北京:清華大學(xué)出版社,1999.
[3] 唐策善.數(shù)據(jù)結(jié)構(gòu)(用C 語言描述)[M].北京:高等教育出版社,1995.