摘 要:“數(shù)據(jù)結(jié)構(gòu)”是計(jì)算機(jī)專業(yè)基礎(chǔ)課程,具有邏輯性強(qiáng)、抽象性高的特點(diǎn),學(xué)生在學(xué)習(xí)中往往不得要領(lǐng)。本文針對(duì)當(dāng)前教學(xué)中存在的問題,結(jié)合自身的教學(xué)經(jīng)驗(yàn),提出了“數(shù)據(jù)結(jié)構(gòu)”課程教學(xué)的新思路。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);算法;課程教學(xué);上機(jī)實(shí)驗(yàn)
“數(shù)據(jù)結(jié)構(gòu)” 是計(jì)算機(jī)專業(yè)基礎(chǔ)課程,是程序設(shè)計(jì)的的重要基礎(chǔ),也是計(jì)算機(jī)專業(yè)碩士研究生入學(xué)必考科目。教學(xué)應(yīng)重在學(xué)生能力、素質(zhì)的培養(yǎng),尤其是思維能力、創(chuàng)新能力的培養(yǎng)。因此,很多學(xué)校都致力于數(shù)據(jù)結(jié)構(gòu)課程的建設(shè),把課程建設(shè)作為一項(xiàng)系統(tǒng)工程來抓。同樣,這些年來我校在這方面也做出不懈努力,包括從教材選擇、課程體系建設(shè)、師資隊(duì)伍、課程教學(xué)、實(shí)踐教學(xué)、教學(xué)管理等各個(gè)環(huán)節(jié)不斷實(shí)踐和探索,特別是在課程教學(xué)方面,加強(qiáng)教學(xué)研究和教學(xué)方法、教學(xué)手段的改革,從提高學(xué)生的學(xué)習(xí)興趣和加強(qiáng)實(shí)踐環(huán)節(jié)教學(xué)方面入手,取得了良好的效果。
1 教材選擇
筆者多次講授“數(shù)據(jù)結(jié)構(gòu)”課程,所用教材為清華大學(xué)出版社的嚴(yán)蔚敏、吳偉民編著的《數(shù)據(jù)結(jié)構(gòu)》(C語言版)。該教材內(nèi)容全面,有較高的深度,但在敘述一些基本概念和算法時(shí)過于精練,使學(xué)生在理解上有一定的困難。計(jì)算機(jī)軟件開發(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)容改革的必然。
2 基于問題的教學(xué)方法
在數(shù)據(jù)結(jié)構(gòu)教學(xué)過程中,許多概念、算法和思想是抽象的。傳統(tǒng)的教學(xué)模式起不到很好的效果。所以在教學(xué)過程中,采用以學(xué)生為主體、以問題為中心的模式,激發(fā)學(xué)生的學(xué)習(xí)興趣,充分調(diào)動(dòng)學(xué)生的求知欲,才能提高他們的積極性和主動(dòng)性,引導(dǎo)學(xué)生不斷發(fā)現(xiàn)問題、提出問題、分析問題并最終解決問題,培養(yǎng)學(xué)生的創(chuàng)造性思維。
第一,概述講解中,可引入如下問題:a.[樹]某家族的血統(tǒng)關(guān)系中,各層的關(guān)系是如何的?b.[表結(jié)構(gòu)]學(xué)生成績(jī)表中,各表項(xiàng)之間是什么關(guān)系?c.[圖]田徑賽的時(shí)間安排問題中,如何表示各比賽項(xiàng)目之間的不同時(shí)關(guān)系?通過這些學(xué)生非常熟悉的案例引入數(shù)據(jù)結(jié)構(gòu)的概念,讓學(xué)生輕輕松松理解了數(shù)據(jù)結(jié)構(gòu)的概念及其實(shí)用,能夠提高學(xué)生的學(xué)習(xí)興趣。
第二,在講述每種線性結(jié)構(gòu)和非線性結(jié)構(gòu)之前,我們應(yīng)該提出一個(gè)應(yīng)用的實(shí)例。通過實(shí)例進(jìn)行課前導(dǎo)學(xué),讓學(xué)生明白為什么要學(xué)習(xí)它,它有什么用處。譬如,在講述隊(duì)列結(jié)構(gòu)前通過超市排隊(duì)結(jié)帳的形象例子引出隊(duì)列理論;在講述樹形結(jié)構(gòu)前,可以引出家族血統(tǒng)關(guān)系的實(shí)例,通過實(shí)例逐步引出理論。用充分的實(shí)例讓學(xué)生真正理解這些常用結(jié)構(gòu)的實(shí)用之處。
第三,在講每一種算法的過程中,我們可以采用分析問題、解決問題的方法。譬如順序表的插入算法,我們首先分析問題:(1)判斷線性表的存儲(chǔ)空間;(2)檢查i值的范圍;(3)將線性表的第i個(gè)元素和它后面的所有元素均后移一個(gè)位置;(4)將新的元素寫入到空出的第i個(gè)元素位置上;(5)線性表的長(zhǎng)度加1。再解決問題:編寫要實(shí)現(xiàn)上述各步驟需要的語言。最終培養(yǎng)學(xué)生分析問題和解決問題的能力。
3 加強(qiáng)實(shí)踐教學(xué)環(huán)節(jié)
有些教師在教學(xué)的過程中,著重講解理論知識(shí),對(duì)實(shí)驗(yàn)不夠重視,學(xué)生往往動(dòng)手能力不強(qiáng),久而久之,就不能解決實(shí)際問題,對(duì)這門功課就有聽天書的感覺了。這種教學(xué)方式,勢(shì)必導(dǎo)致多數(shù)學(xué)生在上機(jī)實(shí)驗(yàn)中往往編制不出完整的程序,得不到正確的結(jié)果。
我們?cè)诮虒W(xué)中不僅要教會(huì)學(xué)生各種算法,而且要教會(huì)他們?nèi)绾螌⑺惴ㄞD(zhuǎn)換為具體程序設(shè)計(jì)語言中的函數(shù)以及編寫出運(yùn)行該函數(shù)的主程序。筆者上課除了詳細(xì)講授各種基本運(yùn)算的實(shí)現(xiàn)算法與函數(shù)外,還在課堂上編制出針對(duì)各實(shí)際問題的主程序。例如,在線性表的教學(xué)中,為“將以順序表為存儲(chǔ)結(jié)構(gòu)的線性表就地逆置”實(shí)例編寫算法設(shè)計(jì),具體如下:
void ReverseList(Seqlist * L)
{
DataType temp;
//設(shè)置臨時(shí)空間用于存放data
Int i ;
for (i=0 ; i<=l->length/2;i++)
//l->length/2為整除運(yùn)算
{temp=l->data[i];
//交換數(shù)據(jù)
L->data[i]= L->data[l->length-1- i];
L->data[l->length-1- i]=temp;
}
}
通過這種方式,學(xué)生對(duì)程序設(shè)計(jì)有較為直觀的認(rèn)識(shí),這為“數(shù)據(jù)結(jié)構(gòu)”實(shí)踐教學(xué)取得較好的效果奠定了基礎(chǔ)。上機(jī)實(shí)踐是對(duì)學(xué)生全面綜合素質(zhì)進(jìn)行訓(xùn)練的一種基本方法,是課堂教學(xué)的一種延伸,是必不可少的一個(gè)教學(xué)環(huán)節(jié)。上機(jī)實(shí)踐能使學(xué)生所學(xué)到的書本知識(shí)“活”起來,起到深化理解和靈活掌握教學(xué)內(nèi)容的目的,因此我們要從下面幾方面著手做好這項(xiàng)工作。
精心選擇上機(jī)習(xí)題,著眼于基本知識(shí)的理解和基本編程能力的培養(yǎng)。在程序設(shè)計(jì)習(xí)題選擇時(shí)采取循序漸進(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)二叉樹的建立和遍歷。這個(gè)題目是基于學(xué)生對(duì)二叉樹的基本理解;(2)給定一顆二叉樹,打印指定結(jié)點(diǎn)的雙親和所有的孩子結(jié)點(diǎn)。學(xué)生在完成這個(gè)題目前需完成題目(1),直接利用(1)中所建立的二叉樹類和結(jié)點(diǎn)類來繼續(xù)進(jìn)行此題目的編程。
明確實(shí)驗(yàn)步驟。為了培養(yǎng)學(xué)生良好的工作作風(fēng)和方法,并且為后續(xù)課程做準(zhǔn)備,書中按軟件工程方法要求學(xué)生遵循相應(yīng)的實(shí)驗(yàn)步驟,先需求分析,抽象出數(shù)據(jù)結(jié)構(gòu),再明確數(shù)據(jù)類型,詳細(xì)設(shè)計(jì),最后進(jìn)行編碼及調(diào)試。
明確每個(gè)實(shí)驗(yàn)的具體要求。有了具體要求,學(xué)生實(shí)驗(yàn)時(shí)才有章可循。書中對(duì)每個(gè)實(shí)驗(yàn)都提出了具體要求。開始部分的實(shí)驗(yàn)除給出要求外,還給出問題的需求分析、設(shè)計(jì)以及完整的程序,學(xué)生上機(jī)主要是驗(yàn)證程序,后期的實(shí)驗(yàn)則要求學(xué)生獨(dú)立設(shè)計(jì)算法,編制并調(diào)試程序。整個(gè)實(shí)驗(yàn)指導(dǎo)書在難度上有一定的梯度,便于學(xué)生循序漸進(jìn)的學(xué)習(xí)。
學(xué)生在上機(jī)之前,預(yù)習(xí)實(shí)驗(yàn)指導(dǎo)書中的內(nèi)容。實(shí)驗(yàn)指導(dǎo)書獨(dú)立于教材,上機(jī)實(shí)驗(yàn)學(xué)時(shí)又有限,這就要求學(xué)生在上機(jī)實(shí)驗(yàn)之前預(yù)習(xí)實(shí)驗(yàn)指導(dǎo)書中的內(nèi)容。在實(shí)驗(yàn)內(nèi)容之前給出了一些與本實(shí)驗(yàn)有關(guān)的思考題,讓學(xué)生在閱讀中思考,同時(shí)列出相應(yīng)的參考資料或參考書,讓學(xué)生在上機(jī)之前通過查閱參考資料或參考書,加深對(duì)實(shí)驗(yàn)內(nèi)容的理解。這種方式還可以鍛煉學(xué)生獨(dú)立解決問題的能力。
總之,我們要重視《數(shù)據(jù)結(jié)構(gòu)》的教學(xué),不僅要注重理論教學(xué),同時(shí)要注重實(shí)踐教學(xué),在教學(xué)過程中,我們?nèi)匀恍枰粩嗳ヌ剿餮芯浚瑢ふ倚碌?、行之有效的教學(xué)方法。相信只要傾注心力,把《數(shù)據(jù)結(jié)構(gòu)》的特點(diǎn)和學(xué)生實(shí)際聯(lián)系起來進(jìn)行教學(xué),就一定會(huì)達(dá)到既定的教學(xué)目標(biāo)。
參考文獻(xiàn)
[1]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)清華大學(xué)出版社,1997.
[2]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)題集.清華大學(xué)出版社,1999.
[3]黃劉生.數(shù)據(jù)結(jié)構(gòu).經(jīng)濟(jì)科學(xué)出版社, 1999.
[4]余曉龍,張?jiān)?,朱曉東.數(shù)據(jù)結(jié)構(gòu)配套題解 光明日?qǐng)?bào)出版社,2007.