承蓓
[摘 要] “數(shù)據(jù)結(jié)構(gòu)”是五年制高職計(jì)算機(jī)專業(yè)學(xué)生必修的重要專業(yè)基礎(chǔ)課,在教學(xué)過程中,有的學(xué)生由于前導(dǎo)課程C語言學(xué)習(xí)的不扎實(shí),導(dǎo)致許多學(xué)生認(rèn)為數(shù)據(jù)結(jié)構(gòu)聽起來像“天書”,數(shù)據(jù)結(jié)構(gòu)學(xué)了沒有用,文章就如何有效地進(jìn)行數(shù)據(jù)結(jié)構(gòu)的教學(xué)進(jìn)行了探討。
[關(guān)鍵詞] 高職;數(shù)據(jù)結(jié)構(gòu);有效教學(xué)
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2018. 01. 076
[中圖分類號(hào)] G632 [文獻(xiàn)標(biāo)識(shí)碼] A [文章編號(hào)] 1673 - 0194(2018)01- 0184- 03
0 前 言
“數(shù)據(jù)結(jié)構(gòu)”是我校五年制高職計(jì)算機(jī)專業(yè)學(xué)生必修的重要專業(yè)基礎(chǔ)課,目前基于各種語言的“數(shù)據(jù)結(jié)構(gòu)”教材的版本很多,有C++版的、C語言版的、Java版本的等,由于我校高職學(xué)生在學(xué)習(xí)“數(shù)據(jù)結(jié)構(gòu)”之前學(xué)習(xí)的前導(dǎo)語言課程是C語言,所以我校采用的教材是C語言版本。在教學(xué)過程中,從學(xué)生的學(xué)習(xí)效果以及和學(xué)生的溝通過程中,發(fā)現(xiàn)許多學(xué)生聽不懂,認(rèn)為學(xué)了也沒用,更不用說感興趣了。本文試著對如何來進(jìn)行“數(shù)據(jù)結(jié)構(gòu)”的有效教學(xué)進(jìn)行探討。
1 數(shù)據(jù)結(jié)構(gòu)的重要性
數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)專業(yè)學(xué)生必修的重要專業(yè)基礎(chǔ)課,該課程主要研究數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和對數(shù)據(jù)的各種操作運(yùn)算,而操作運(yùn)算主要就是涉及算法的問題。
1.1 學(xué)好數(shù)據(jù)結(jié)構(gòu)是參加各類計(jì)算機(jī)專業(yè)考試的必備條件
在許多不同層次、不同水平的考試中,數(shù)據(jù)結(jié)構(gòu)是必考的。計(jì)算機(jī)軟件考試的考綱、研究生博士生入學(xué)考試、甚至一些軟件公司的面試題中都涉及到數(shù)據(jù)結(jié)構(gòu)的內(nèi)容。
1.2 學(xué)好數(shù)據(jù)結(jié)構(gòu)為計(jì)算機(jī)專業(yè)的后續(xù)課程打下良好的基礎(chǔ)
計(jì)算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)、數(shù)據(jù)庫等課程中都會(huì)使用數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí)。比如計(jì)算機(jī)網(wǎng)絡(luò)中的路由器在源和目的之間要尋找出最短路徑,在數(shù)據(jù)結(jié)構(gòu)的圖中有相應(yīng)的算法,操作系統(tǒng)中的目錄結(jié)構(gòu)使用的是一種樹形結(jié)構(gòu),CPU進(jìn)程管理中用到了隊(duì)列。
1.3 學(xué)好數(shù)據(jù)結(jié)構(gòu)能提高編程能力
程序設(shè)計(jì)語言是工具,數(shù)據(jù)結(jié)構(gòu)和算法是靈魂,學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)不僅是學(xué)習(xí)隊(duì)列、二叉樹、排序等數(shù)據(jù)結(jié)構(gòu)及相應(yīng)的算法,更重要的是要學(xué)習(xí)一種思想:如何把現(xiàn)實(shí)問題轉(zhuǎn)化為計(jì)算機(jī)語言的表示。這是一種非常重要的邏輯思維能力的鍛煉,也是程序員入門的條件??傊绻J(rèn)真學(xué)好“數(shù)據(jù)結(jié)構(gòu)”這門課,其實(shí)會(huì)潛移默化地影響學(xué)習(xí)者的邏輯思維。
2 “數(shù)據(jù)結(jié)構(gòu)”教學(xué)過程中存在的問題
2.1 學(xué)生在學(xué)過程中面臨的問題
2.1.1 數(shù)據(jù)結(jié)構(gòu)抽象聽不懂
數(shù)據(jù)結(jié)構(gòu)由于比較抽象,尤其在一些算法的理解上,很多同學(xué)都覺得有困難,另外,由于學(xué)生在前序課程的學(xué)習(xí)過程中,基礎(chǔ)沒有打扎實(shí),導(dǎo)致在后續(xù)過程中的學(xué)習(xí)也是困難重重。
2.1.2 數(shù)據(jù)結(jié)構(gòu)學(xué)了沒用
許多學(xué)生覺得聽不懂,部分聽得懂的學(xué)生學(xué)過數(shù)據(jù)結(jié)構(gòu)后,也覺得用處不大, 還不如學(xué)習(xí)C、Java等語言來的值,覺得學(xué)習(xí)這門課就是在浪費(fèi)時(shí)間,因此在學(xué)習(xí)過程中存在目標(biāo)不明確、動(dòng)力不足的現(xiàn)象。
2.2 教師在教過程中面臨的問題
2.2.1 教學(xué)內(nèi)容無法深入
由于學(xué)生前序課程的學(xué)習(xí)基礎(chǔ)薄弱,加上課程本身的特點(diǎn),比較抽象,難以理解,導(dǎo)致教學(xué)無法深入,除了講解一些簡單的數(shù)據(jù)結(jié)構(gòu)的基本知識(shí)外,在相關(guān)的算法以及算法分析上只能簡略講解。
2.2.2 教學(xué)過程學(xué)生響應(yīng)度不高
由于學(xué)習(xí)內(nèi)容的枯燥,所以學(xué)生根本不感興趣,很多同學(xué)也聽不懂,在教學(xué)過程中,學(xué)生的學(xué)習(xí)是很被動(dòng)的,響應(yīng)度不高。
正因?yàn)樵诮虒W(xué)過程中,存在了以上的一些問題,導(dǎo)致這門課程的存在,似乎主要是為考試服務(wù),學(xué)生在真正學(xué)習(xí)的過程中,并沒有什么收獲。因此,筆者在實(shí)踐中不斷思考,發(fā)現(xiàn)可以通過一些途徑來提高教學(xué)的有效性。
3 有效教學(xué)的含義
所謂“有效”,主要是指通過教師在一段時(shí)間的教學(xué)后,學(xué)生所獲得的具體進(jìn)步或發(fā)展。教學(xué)有沒有效益,并不是指教師有沒有教完內(nèi)容或教得認(rèn)不認(rèn)真,而是指學(xué)生有沒有學(xué)到什么或?qū)W生學(xué)得好不好。如果學(xué)生不想學(xué)或者學(xué)了沒有收獲,即使教師教得再辛苦也是無效教學(xué)。同樣如果學(xué)生學(xué)得很辛苦,也沒有得到應(yīng)有的發(fā)展,也是無效或低效教學(xué)。因此,學(xué)生有無進(jìn)步或發(fā)展是衡量有效教學(xué)的唯一指標(biāo)。
筆者認(rèn)為衡量教學(xué)是否有效,不僅是看學(xué)生學(xué)習(xí)的結(jié)果,也看學(xué)習(xí)的過程,比如學(xué)習(xí)態(tài)度上是否有進(jìn)步,注意力是否比以前集中,學(xué)習(xí)的參與度是否是提高了,每堂課的學(xué)習(xí)目的是否都達(dá)到了。
4 實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)有效教學(xué)的途徑
4.1 實(shí)現(xiàn)C語言與數(shù)據(jù)結(jié)構(gòu)的有效銜接,夯實(shí)學(xué)習(xí)基礎(chǔ)
4.1.1 教學(xué)安排的有效銜接
如果在上課安排上,數(shù)據(jù)結(jié)構(gòu)的教學(xué)和C語言程序設(shè)計(jì)的教學(xué)是同一個(gè)老師,對老師來講,相應(yīng)內(nèi)容的教學(xué)能夠由淺入深,而且也能比較了解學(xué)生對前導(dǎo)課程的學(xué)習(xí)情況,在講解時(shí)能把握好教學(xué)的側(cè)重點(diǎn),另外對學(xué)生來講,能了解教師的教學(xué)風(fēng)格,在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)上也能較好地適應(yīng)。
4.1.2 課程內(nèi)容的有效銜接
C語言程序設(shè)計(jì)的課程教學(xué)的安排時(shí)間雖然在“數(shù)據(jù)結(jié)構(gòu)”的前面,但是在教學(xué)過程中,由于課時(shí)的限制,內(nèi)容上往往講解不到指針、結(jié)構(gòu)體等內(nèi)容,導(dǎo)致學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的先導(dǎo)內(nèi)容沒有學(xué)到,是脫節(jié)的。另外,許多學(xué)生在開始學(xué)習(xí)二維數(shù)組時(shí)就覺得有點(diǎn)吃力,所以為了能給學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)打下扎實(shí)的基礎(chǔ),可以采取如下措施:①增加C語言學(xué)習(xí)課時(shí),保證學(xué)習(xí)內(nèi)容不缺失;②加強(qiáng)C語言實(shí)踐操作以及測試鞏固,夯實(shí)學(xué)習(xí)基礎(chǔ),保證前導(dǎo)課程的學(xué)習(xí)效果;③由于數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)和C語言的學(xué)習(xí)不在一學(xué)期安排,學(xué)生往往對已學(xué)內(nèi)容有所遺忘,因此在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)這門課程時(shí),可以安排先將C語言中的數(shù)組、函數(shù)、指針、結(jié)構(gòu)體等頻繁用到的內(nèi)容預(yù)先復(fù)習(xí)鞏固一下,然后再開始數(shù)據(jù)結(jié)構(gòu)新課內(nèi)容的學(xué)習(xí)。endprint
在學(xué)校C語言程序設(shè)計(jì)是該門課的先修課程。這兩門課程的一些知識(shí)點(diǎn)是緊密相關(guān)聯(lián)的,在教學(xué)內(nèi)容上有延續(xù)銜接的關(guān)系。尤其是C語言程序設(shè)計(jì)中的函數(shù)、結(jié)構(gòu)體、指針,在數(shù)據(jù)結(jié)構(gòu)中各種數(shù)據(jù)結(jié)構(gòu)的定義、算法的實(shí)現(xiàn)過程中是經(jīng)常需要用到的。
比如數(shù)據(jù)結(jié)構(gòu)中線性表的單鏈表的結(jié)點(diǎn)定義是這樣的:
typedef struct node{
ElemType data;
struct node*next;
}LNode;
在對于這個(gè)結(jié)點(diǎn)定義的理解中,涉及C語言中結(jié)構(gòu)體的定義,typedef 的使用,指針的定義,學(xué)生如果對C語言中這些知識(shí)沒有掌握,對于該結(jié)點(diǎn)的定義也無法理解。
數(shù)據(jù)結(jié)構(gòu)中的很多算法的實(shí)現(xiàn)最終是用C語言的函數(shù)來實(shí)現(xiàn)的,為了驗(yàn)證和理解這些算法,常常通過用C語言編寫程序后實(shí)現(xiàn)這些算法的途徑,在實(shí)踐過程中加深對數(shù)據(jù)結(jié)構(gòu)和相應(yīng)算法的理解。當(dāng)然數(shù)據(jù)結(jié)構(gòu)并不就是編寫程序,更重要的是要學(xué)習(xí)一種思想:如何把現(xiàn)實(shí)問題通過抽象轉(zhuǎn)化為計(jì)算機(jī)語言的表示。
4.2 厘清教學(xué)思路,明確學(xué)習(xí)目標(biāo)
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),主要是在理解已有數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,知道了數(shù)據(jù)如何組織,如何存儲(chǔ),以及在不同存儲(chǔ)結(jié)構(gòu)下進(jìn)行運(yùn)算或操作,為以后如何才能把現(xiàn)實(shí)世界中的問題,抽象成計(jì)算機(jī)能夠表示的問題,然后利用計(jì)算機(jī)求解打下基礎(chǔ)。為以后如何更好地組織數(shù)據(jù),更好地設(shè)計(jì)出高效率的算法打下基礎(chǔ)。
數(shù)據(jù)結(jié)構(gòu)主要研究的內(nèi)容有三方面:數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)以及對數(shù)據(jù)的操作運(yùn)算(算法)。這不僅是數(shù)據(jù)結(jié)構(gòu)研究的主要內(nèi)容,也是講解各種數(shù)據(jù)結(jié)構(gòu)時(shí)的線索。
明確了以上的學(xué)習(xí)思路后,學(xué)生在學(xué)習(xí)過程中,就能知道每種數(shù)據(jù)結(jié)構(gòu),分別都是從這三方面來學(xué)習(xí)的。在學(xué)習(xí)過程中就能做到心中有數(shù),思路清晰。
4.3 激發(fā)學(xué)生的學(xué)習(xí)興趣,加強(qiáng)學(xué)習(xí)動(dòng)力
數(shù)據(jù)結(jié)構(gòu)的教學(xué)內(nèi)容還是有點(diǎn)枯燥的,又是比較費(fèi)腦筋的,在教學(xué)實(shí)踐過程中,我試著在課堂導(dǎo)入過程中,盡量選取一些學(xué)生感興趣的東西入手,在教學(xué)過程中,也結(jié)合多媒體手段進(jìn)行教學(xué),發(fā)現(xiàn)學(xué)生比原來純粹利用黑板粉筆進(jìn)行的傳統(tǒng)教學(xué)注意力更集中些。
例如:在學(xué)習(xí)線性表時(shí),我借助課件采用類比的手段,把一組同學(xué)比作線性表,通過一組同學(xué)在講臺(tái)上表演,如何在一組中某個(gè)位置增加一位同學(xué),如何從一組中讓一位同學(xué)出列,整個(gè)過程由同學(xué)自己思考,自己表演,自己總結(jié)。讓學(xué)生在體驗(yàn)中,理解順序表中元素的增加與刪除。
在學(xué)習(xí)遍歷二叉樹時(shí),又設(shè)計(jì)一張景點(diǎn)地圖,這張地圖的實(shí)質(zhì)就是一棵二叉樹,要求學(xué)生自己設(shè)計(jì)一定的路線,每個(gè)景點(diǎn)只玩一次,并且每個(gè)景點(diǎn)必須玩到。學(xué)生在這種情景中學(xué)習(xí),興趣也十分濃厚。
4.4 加強(qiáng)理論與實(shí)踐的結(jié)合,提高學(xué)習(xí)效果
數(shù)據(jù)結(jié)構(gòu)涉及許多的理論知識(shí),這部分內(nèi)容,我采用的是設(shè)計(jì)相關(guān)問題和習(xí)題,讓學(xué)生自己去書上尋找答案,根據(jù)學(xué)生答題反饋來診斷學(xué)生的學(xué)習(xí)情況,然后教師進(jìn)行總結(jié)和講解。
另外,數(shù)據(jù)結(jié)構(gòu)是提高編程能力的必由之路,所以在學(xué)習(xí)過程中,能將理論與實(shí)踐相互結(jié)合,不但能加深對理論的學(xué)習(xí)還能提高編程實(shí)踐能力。以前,剛剛學(xué)習(xí)C語言時(shí),學(xué)生只能編寫幾行的代碼,通過學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),在處理一些稍微復(fù)雜的問題時(shí),可以逐漸編寫幾十行甚至上百行的代碼,在學(xué)生學(xué)習(xí)過程中,也是一種激勵(lì)。
例如,在講解線性表的順序結(jié)構(gòu)時(shí),為了加深學(xué)生對順序結(jié)構(gòu)的理解。我設(shè)置了如下實(shí)驗(yàn)。
【實(shí)驗(yàn)題目】順序表的就地逆置
【實(shí)驗(yàn)?zāi)康摹?/p>
知識(shí):理解線性表的特點(diǎn)和順序結(jié)構(gòu)的特點(diǎn)
掌握線性表順序結(jié)構(gòu)的定義方法
技能:學(xué)會(huì)編寫程序?qū)崿F(xiàn)順序表逆置
情感:通過教師引導(dǎo),學(xué)會(huì)分析問題;通過小組學(xué)習(xí),培養(yǎng)學(xué)生學(xué)會(huì)合作探究。
【實(shí)驗(yàn)內(nèi)容】
順序表的就地逆置就是利用原表的存儲(chǔ)空間將線性表(a1,a2,…,an)逆置為(an,an-1,…,a1),并且此處要求只使用一個(gè)元素的輔助空間。
【實(shí)驗(yàn)分析】
1.空表或長度為1的表,不做任何處理。
2.表長大于或等于2時(shí),做如下處理。設(shè)兩個(gè)指針i和j,分別指向順序表的第1個(gè)元素和尾元素。若i 【程序框架】 1.頭文件包含 2.順序表的定義 3.各種函數(shù)的聲明 4.創(chuàng)建線性表函數(shù) 5.線性表逆置函數(shù) 6.線性表輸出函數(shù) 7.主函數(shù) 【代碼編寫】 學(xué)生完成,教師輔導(dǎo) 通過實(shí)踐,學(xué)生對順序結(jié)構(gòu)是如何定義的,就非常清楚了。從而通過實(shí)踐來指導(dǎo)理論知識(shí),讓學(xué)生在動(dòng)手過程中進(jìn)行了學(xué)習(xí),比講解純粹的理論知識(shí)效果好。 4.5 積極利用學(xué)習(xí)工具,引導(dǎo)學(xué)生拓寬學(xué)習(xí)途徑 隨著技術(shù)的進(jìn)步,手機(jī)已經(jīng)成為生活中不可缺少的工具,移動(dòng)學(xué)習(xí)也稱為一種流行的學(xué)習(xí)方式,這種學(xué)習(xí)方式也可以應(yīng)用到數(shù)據(jù)結(jié)構(gòu)教學(xué)上,讓學(xué)生利用手機(jī)去補(bǔ)充學(xué)習(xí)。在課堂上有些概念學(xué)生還不是很理解,課后可以通過與老師交流進(jìn)行答疑;課堂上也可以適當(dāng)布置一些拓展學(xué)習(xí)的內(nèi)容,讓學(xué)生根據(jù)自己的需要,通過手機(jī)去進(jìn)一步學(xué)習(xí)。 5 結(jié) 語 以上是筆者個(gè)人一些粗淺的想法,課堂教學(xué)的有效性是教師不斷追求的目標(biāo),在以后的教學(xué)實(shí)踐中,仍將不斷探索思考。 主要參考文獻(xiàn) [1]陳雁.數(shù)據(jù)結(jié)構(gòu)[M].北京:高等教育出版社,2010. [2]邱勁,王平,徐展.《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)改革與實(shí)踐探索[J].西南師范大學(xué)學(xué)報(bào):自然科學(xué)版,2013,38(1):139-142. [3]宋秋前.有效教學(xué)的涵義和特征[J].教育發(fā)展研究,2007(1a):39-42. [4]岳欣云,董宏建.有效教學(xué)的價(jià)值取向及其啟示[J].首都師范大學(xué)學(xué)報(bào):社會(huì)科學(xué)版,2014(2):152-156. [5]蔡寶來,楊伊.基于移動(dòng)學(xué)習(xí)的課堂有效教學(xué)策略研究[J].教育科學(xué)研究,2015(9):42-47.