文章編號:1672-5913(2008)18-0131-02
摘要:“數(shù)據(jù)結(jié)構(gòu)”是計(jì)算機(jī)專業(yè)的專業(yè)基礎(chǔ)課程,具有核心和基礎(chǔ)的地位。本文從教材選擇、教學(xué)方法、現(xiàn)代教學(xué)資源的利用、實(shí)踐教學(xué)等方面論述了作者的教學(xué)體會和觀點(diǎn)。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);教學(xué)方法;實(shí)踐教學(xué)
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:A
The Exploration and Research of the teaching of Data Structure
Abstract: Data Structure is a professional and basic course of the computer speciality,it is the basis and the core. The teaching experience and perspectives of the author are discussed about the choice of teaching materials,teaching methods,the use of modern teaching resources and the practice teaching.
Key words: Data Structure,teaching method,practice teaching
計(jì)算機(jī)碩士研究生入學(xué)考試2009年開始改革,采取全國統(tǒng)考的方式,數(shù)據(jù)結(jié)構(gòu)是考試的必考科目。數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)程序設(shè)計(jì)的重要理論和技術(shù)基礎(chǔ),它所涉及的內(nèi)容和方法,無論是對學(xué)習(xí)計(jì)算機(jī)領(lǐng)域的其他課程,還是對從事軟件項(xiàng)目的開發(fā)都有著重要的作用。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)要達(dá)到的目標(biāo)是:學(xué)會從問題入手,分析和研究計(jì)算機(jī)加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便為應(yīng)用所涉及的數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲結(jié)構(gòu)及其相應(yīng)的操作方法,并初步掌握算法的時間復(fù)雜度和空間復(fù)雜度概念。根據(jù)21世紀(jì)對人才培養(yǎng)的要求,教學(xué)應(yīng)重在學(xué)生能力、素質(zhì)的培養(yǎng),尤其是思維能力、創(chuàng)新能力、實(shí)踐能力的培養(yǎng)。因此,這些年我們致力于數(shù)據(jù)結(jié)構(gòu)課程的建設(shè),把課程建設(shè)作為一項(xiàng)系統(tǒng)工程來抓,從教材選擇、課程體系建設(shè)、師資隊(duì)伍、課程教學(xué)、實(shí)踐教學(xué)、教學(xué)管理等各個環(huán)節(jié)不斷實(shí)踐和探索,特別是在課程教學(xué)方面,加強(qiáng)教學(xué)研究和教學(xué)方法、教學(xué)手段的改革,從提高學(xué)生的學(xué)習(xí)興趣和加強(qiáng)實(shí)踐環(huán)節(jié)教學(xué)方面入手,取得了良好的效果。
1教材選擇
計(jì)算機(jī)軟件開發(fā)方法是不斷發(fā)展的,數(shù)據(jù)結(jié)構(gòu)的課程內(nèi)容也應(yīng)隨著軟件開發(fā)方法的不斷發(fā)展而發(fā)展。目前面向?qū)ο蟮能浖治雠c設(shè)計(jì)技術(shù)已發(fā)展成為軟件開發(fā)的主流方法。因此,用面向?qū)ο蟮乃枷虢M織數(shù)據(jù)結(jié)構(gòu)課程的內(nèi)容,用面向?qū)ο蟮某绦蛟O(shè)計(jì)語言描述數(shù)據(jù)結(jié)構(gòu)問題,就成為數(shù)據(jù)結(jié)構(gòu)課程內(nèi)容改革的必然。
國外在20世紀(jì)90年代已將數(shù)據(jù)結(jié)構(gòu)教材改為用C++或Java描述,這主要是適應(yīng)軟件開發(fā)技術(shù)發(fā)展的需要。國內(nèi)大學(xué)雖然在這門課程的教學(xué)內(nèi)容和教材建設(shè)方面起步較晚,但目前國內(nèi)用C++或Java描述的數(shù)據(jù)結(jié)構(gòu)教材已經(jīng)出現(xiàn),那么關(guān)于教材選擇問題應(yīng)該適應(yīng)軟件開發(fā)技術(shù)發(fā)展的需要。
2基于問題的教學(xué)方法
對于數(shù)據(jù)結(jié)構(gòu)教學(xué)過程中的許多抽象的概念、算法和思想,以教師為中心的教學(xué)模式起不到很好的效果。那么授課教師在教學(xué)過程中采用什么教學(xué)方法,對學(xué)生學(xué)習(xí)興趣的培養(yǎng)至關(guān)重要。在教學(xué)過程中,采用以學(xué)生為主體、以問題為中心的模式,激發(fā)學(xué)生的學(xué)習(xí)興趣,充分調(diào)動學(xué)生的求知欲,提高他們的積極性和主動性。在教學(xué)過程中,自始至終都圍繞問題而展開教學(xué)活動,引導(dǎo)學(xué)生不斷發(fā)現(xiàn)問題、提出問題、分析問題并最終解決問題,培養(yǎng)學(xué)生的創(chuàng)造性思維。
第一,概述講解中,可引入如下問題:1、[樹]人機(jī)對弈問題中,如何實(shí)現(xiàn)對弈?各格局之間是什么關(guān)系?2、[表結(jié)構(gòu)]學(xué)校學(xué)生基本信息管理中的表,各表項(xiàng)之間是什么關(guān)系?3、[圖]教學(xué)計(jì)劃編排問題中,如何表示課程之間的先修關(guān)系? 4、[圖的最短路徑]假如你想去大理、昆明、麗江旅游,如何安排路線時間最???通過這些學(xué)生非常熟悉的案例引入數(shù)據(jù)結(jié)構(gòu)的概念,生動直接,讓學(xué)生輕輕松松理解了數(shù)據(jù)結(jié)構(gòu)的概念及其實(shí)用,能夠提高學(xué)生的學(xué)習(xí)興趣。
第二,在講述每種線性結(jié)構(gòu)和非線性結(jié)構(gòu)之前,我們應(yīng)該提出一個應(yīng)用的實(shí)例。通過實(shí)例進(jìn)行課前導(dǎo)學(xué),讓學(xué)生明白為什么要學(xué)習(xí)它,它有什么用處。譬如,在講述隊(duì)列結(jié)構(gòu)前通過火車的進(jìn)站出站這個形象例子引出隊(duì)列理論;在講述樹形結(jié)構(gòu)前,可以引出在網(wǎng)站和信息系統(tǒng)中經(jīng)常見到的“樹形目錄結(jié)構(gòu)”的實(shí)例、操作系統(tǒng)中文件目錄結(jié)構(gòu)的實(shí)例,給出應(yīng)該怎樣實(shí)現(xiàn)和操作樹形的目錄,通過實(shí)例逐步引出理論。在講述圖結(jié)構(gòu)前,可以先講述“哥德斯堡七橋問題”,通過這個經(jīng)典問題引導(dǎo)出圖的理論。否則會出現(xiàn)這樣的現(xiàn)象:很多學(xué)生學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)之后,不知道所學(xué)習(xí)的這些數(shù)據(jù)結(jié)構(gòu)有什么用,或者干脆就認(rèn)為數(shù)據(jù)結(jié)構(gòu)這門課程就沒有用。為了避免這些怪現(xiàn)象的出現(xiàn),覺得數(shù)據(jù)結(jié)構(gòu)課程的講解務(wù)必要通過充分的實(shí)例讓學(xué)生真正理解這些常用結(jié)構(gòu)的實(shí)用之處,讓學(xué)生在分析解決具體問題的時候能夠很自然地想到去用自己所學(xué)的數(shù)據(jù)結(jié)構(gòu)。
第三,在講每一種算法的過程中,我們可以采用提出問題、分析問題、解決問題和討論問題的方式講解。譬如順序表的插入算法,我們首先提出問題:想要在一個順序表的第i個元素前插入一個新的元素,該怎么做?然后通過動畫演示分析問題的思路:(1)判斷線性表的存儲空間是否已滿,若已滿,則進(jìn)行“溢出”處理;(2)檢查i值是否超出所允許的范圍,若超出,則做“超出”處理;(3)將線性表的第i個元素和它后面的所有元素均后移一個位置;(4)將新的元素寫入到空出的第i個元素位置上;(5)線性表的長度加1。其次,怎樣用一門高級語言實(shí)現(xiàn)算法。最后,進(jìn)行算法分析。在教學(xué)中,不斷的引導(dǎo)學(xué)生分析問題,采取合作互動的方法,學(xué)生“畫龍”,老師“點(diǎn)睛”,讓課堂活躍起來。逐漸培養(yǎng)學(xué)生分析問題和解決問題的能力。
3充分利用各種現(xiàn)代教學(xué)資源
首先,在教學(xué)中通過合理使用現(xiàn)代化教學(xué)手段使教學(xué)效果更加直觀,編寫多媒體教學(xué)課件和演示程序,可以讓本來抽象的內(nèi)容變得很容易理解,既消除了學(xué)生的畏難情緒,也提高了學(xué)生的學(xué)習(xí)興趣,強(qiáng)化了教學(xué)效果。譬如:棧和隊(duì)列的入和出的動態(tài)表現(xiàn);排序和查找過程的動態(tài)演示;動態(tài)鏈表的基本操作和遞歸的模擬演示等;這些都可以利用Flash制作出過程演示動畫,在講課的適當(dāng)時候,給學(xué)生演示。而如果僅僅在黑板上畫圖,不僅浪費(fèi)上課的寶貴時間而且學(xué)生還不容易聽懂。比如我們對快速冒泡排序的講述,簡單講述概念之后,演示課前用Flash制作好的一組數(shù)值的冒泡排序過程動畫,然后根據(jù)演示過程提出快速冒泡排序需要解決的關(guān)鍵問題,再帶著提出的問題回放演示動畫,從而給出所提出的問題的解決方法。這樣形象地講述,教學(xué)效果非常好。
其次,充分利用網(wǎng)絡(luò)為學(xué)生提供各種信息資源,用于支持學(xué)生的自主學(xué)習(xí)和協(xié)作式探索。譬如:為數(shù)據(jù)結(jié)構(gòu)課程建立一個學(xué)習(xí)網(wǎng)站,包括如下內(nèi)容:(1)各種教學(xué)輔助材料:教學(xué)大綱、實(shí)驗(yàn)大綱、電子教案、教學(xué)錄像、算法演示程序、典型問題示例程序等等;(2)進(jìn)階學(xué)習(xí)指導(dǎo):在內(nèi)容上分層次,將每一章節(jié)的內(nèi)容分為基礎(chǔ)篇和提高篇?;A(chǔ)部分是大綱上要求的,每位同學(xué)必須掌握;提高部分可以供學(xué)習(xí)好的同學(xué)選學(xué);(3)測試系統(tǒng):用于學(xué)生自己考核自己的學(xué)習(xí)效果;(4)答疑解惑:為學(xué)生和教師之間的交流提供一個平臺,便于學(xué)生及時發(fā)布不懂的問題、教師及時解決學(xué)生的疑問。我們自己的數(shù)據(jù)結(jié)構(gòu)教學(xué)網(wǎng)站已經(jīng)發(fā)布在校園網(wǎng)上,而且一直處于完善中,起到的作用非常明顯,特別是答疑解惑部分,學(xué)生基本都能利用這個平臺及時將不懂得問題提交給老師。目前,我們準(zhǔn)備再添加關(guān)于學(xué)生數(shù)據(jù)結(jié)構(gòu)考研輔導(dǎo)的內(nèi)容。
4加強(qiáng)實(shí)踐教學(xué)環(huán)節(jié)
上機(jī)實(shí)踐是對學(xué)生全面綜合素質(zhì)進(jìn)行訓(xùn)練的一種基本方法,是課堂教學(xué)的一種延伸,是必不可少的一個教學(xué)環(huán)節(jié)。編程中的問題往往比平時的習(xí)題要復(fù)雜的多,也更接近實(shí)際。編程能使學(xué)生所學(xué)到的書本知識“活”起來,起到深化理解和靈活掌握教學(xué)內(nèi)容的目的,同時,編程也是對學(xué)生軟件設(shè)計(jì)綜合能力的訓(xùn)練。
精心選擇上機(jī)習(xí)題,著眼于基本知識的理解和基本編程能力的培養(yǎng)。類是一種實(shí)現(xiàn)設(shè)計(jì)復(fù)用和代碼復(fù)用的有力工具,在程序設(shè)計(jì)習(xí)題選擇時采取循序漸進(jìn)、逐步積累的方式,引導(dǎo)學(xué)生自己建立可復(fù)用的構(gòu)件,并在以后的練習(xí)中直接使用,提高編程的工程能力和思考能力。譬如:關(guān)于順序表、隊(duì)列、堆棧、樹和二叉樹等基本的數(shù)據(jù)結(jié)構(gòu),可以要求學(xué)生實(shí)現(xiàn)相應(yīng)的類,在實(shí)際的應(yīng)用習(xí)題中拿過來就用。比如關(guān)于樹結(jié)構(gòu)部分可以設(shè)計(jì)如下上機(jī)習(xí)題:(1)二叉樹的建立和遍歷。這個題目是基于學(xué)生對二叉樹的基本理解;(2)給定一顆二叉樹,打印指定結(jié)點(diǎn)的雙親和所有的孩子結(jié)點(diǎn)。學(xué)生在完成這個題目前需完成題目(1),直接利用(1)中所建立的二叉樹類和結(jié)點(diǎn)類來繼續(xù)進(jìn)行此題目的編程;(3)利用Java、C++或C#中提供的樹結(jié)構(gòu)API完成一個簡單資源管理器的實(shí)現(xiàn)。這個題目難度相對較大,但這個題目的完成應(yīng)該能讓學(xué)生真正理解樹結(jié)構(gòu)的實(shí)用之處。
5結(jié)束語
從2009年開始,計(jì)算機(jī)專業(yè)碩士研究生入學(xué)考試改革,所考的科目都統(tǒng)考,數(shù)據(jù)結(jié)構(gòu)是必考的四門專業(yè)課程之一。數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)專業(yè)的核心課程,是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ)。因此,開好這門課程對學(xué)生來說是至關(guān)重要的。所以對于該課程的教學(xué)不僅要從理論上進(jìn)行探討,還要從教材選擇、教學(xué)方法、教學(xué)輔助資源、實(shí)踐環(huán)節(jié)等方面進(jìn)行研究,以真正提高該課程的教學(xué)效果。
參 考 文 獻(xiàn)
[1] 殷人昆. 數(shù)據(jù)結(jié)構(gòu)(用面向?qū)ο蠓椒ㄅcC++語言描述)[M]. 北京:清華大學(xué)出版社,2007.
[2] 朱戰(zhàn)立. 數(shù)據(jù)結(jié)構(gòu)—Java語言描述[M]. 北京:清華大學(xué)出版社,2005.
[3] 王紅梅等. 數(shù)據(jù)結(jié)構(gòu)(C++版)[M]. 北京:清華大學(xué)出版社,2005.
[4] 殷人昆等. 數(shù)據(jù)結(jié)構(gòu)習(xí)題解析(用面向?qū)ο蠓椒ㄅcC++語言描述)[M]. 北京:清華大學(xué)出版社,2007.
[5] 連進(jìn). 數(shù)據(jù)結(jié)構(gòu)課程教學(xué)方法的研究[J]. 湖北經(jīng)濟(jì)學(xué)院學(xué)報(人文社會科學(xué)版),2008,5(5):183-184.