摘 要:數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)專(zhuān)業(yè)重要的基礎(chǔ)課程,也是從事軟件開(kāi)發(fā)工作的內(nèi)功,但是該課程學(xué)習(xí)內(nèi)容概念眾多,各種結(jié)構(gòu)抽象難懂,算法實(shí)現(xiàn)復(fù)雜。在教學(xué)過(guò)程中,要注意聯(lián)系實(shí)際趣味引導(dǎo),采用多種形式將抽象的內(nèi)容具體化,注重實(shí)踐性教學(xué),合理安排教學(xué)進(jìn)度和難度以達(dá)到好的效果。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);抽象與具體;實(shí)踐;
0 引言
《數(shù)據(jù)結(jié)構(gòu)》是計(jì)算機(jī)軟件相關(guān)專(zhuān)業(yè)的基礎(chǔ)課程,從計(jì)算機(jī)專(zhuān)業(yè)設(shè)立開(kāi)始至今,很多的專(zhuān)業(yè)課程隨著技術(shù)的發(fā)展逐步淘汰,《數(shù)據(jù)結(jié)構(gòu)》是一直開(kāi)設(shè)的少數(shù)課程之一,其重要性不言而喻,但是該課程學(xué)習(xí)內(nèi)容非常抽象,以致于學(xué)習(xí)困難也是大家的共識(shí)。如何結(jié)合該課程的特點(diǎn),分析教與學(xué)中遇到的困難,找到合適的能夠真正用于教學(xué)實(shí)踐的教學(xué)方式與教學(xué)手段是值得探討的問(wèn)題。
1 課程教學(xué)需要解決的問(wèn)題
數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式。該課程研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及相應(yīng)的運(yùn)算,好的數(shù)據(jù)結(jié)構(gòu)可以帶來(lái)更高的運(yùn)行或存儲(chǔ)效率。具體來(lái)說(shuō),學(xué)好數(shù)據(jù)結(jié)構(gòu)可以把現(xiàn)實(shí)中的實(shí)際問(wèn)題抽象為計(jì)算機(jī)能夠理解的數(shù)據(jù)模型,然后選擇適當(dāng)?shù)乃惴▉?lái)高效地解決問(wèn)題。
抽象是數(shù)據(jù)結(jié)構(gòu)這門(mén)課程最主要的特點(diǎn),也是導(dǎo)致學(xué)生認(rèn)為課程難學(xué)的原因之一。數(shù)據(jù)結(jié)構(gòu)這門(mén)課介紹了線性表、棧與隊(duì)列、二叉樹(shù)、圖、散列等多種邏輯結(jié)構(gòu),每種邏輯結(jié)構(gòu)又有順序和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),不同的存儲(chǔ)結(jié)構(gòu)對(duì)于同一種操作有不同的算法,不同的算法就有不同的效率。教學(xué)內(nèi)容復(fù)雜概念眾多,很多學(xué)生雖然能夠掌握一些基本知識(shí),但往往不明白學(xué)習(xí)該課程有什么用途,覺(jué)得遠(yuǎn)不如學(xué)習(xí)Java、C等語(yǔ)言實(shí)際。
數(shù)據(jù)結(jié)構(gòu)這門(mén)課也是實(shí)踐性很強(qiáng)的課程。在學(xué)習(xí)這門(mén)課之前,學(xué)生都已經(jīng)學(xué)過(guò)C、C++或者Java編程語(yǔ)言,數(shù)據(jù)結(jié)構(gòu)的算法需要采用編程語(yǔ)言來(lái)實(shí)現(xiàn)。在實(shí)際教學(xué)中,編程語(yǔ)言一般開(kāi)課課時(shí)80學(xué)時(shí)左右,大部分的學(xué)生只掌握了基本的選擇、循環(huán)和數(shù)組,對(duì)于在數(shù)據(jù)結(jié)構(gòu)算法中大量使用的結(jié)構(gòu)體、指針、函數(shù)遞歸、文件等內(nèi)容沒(méi)有學(xué)或者僅僅是有一些了解,在調(diào)試數(shù)據(jù)結(jié)構(gòu)算法時(shí),程序無(wú)法通過(guò)或者無(wú)法理解,學(xué)生產(chǎn)生很強(qiáng)的挫敗感,大大降低了學(xué)習(xí)的興趣。同時(shí),教師可能會(huì)因?yàn)檎n時(shí)有限等原因,重理論思想而忽視代碼講解,導(dǎo)致學(xué)生算法實(shí)現(xiàn)困難。
2 教學(xué)措施
根據(jù)對(duì)課程學(xué)習(xí)中存在問(wèn)題的分析,教學(xué)內(nèi)容抽象、教學(xué)實(shí)踐沒(méi)有落實(shí)是最主要的原因。數(shù)據(jù)結(jié)構(gòu)的教學(xué)主要從以下幾個(gè)方面采取必要的措施:
首先,趣味引導(dǎo)是提高學(xué)生學(xué)習(xí)興趣,將現(xiàn)實(shí)世界與抽象內(nèi)容聯(lián)系起來(lái)的紐帶。尼采曾說(shuō)過(guò):“人們無(wú)法理解他沒(méi)有經(jīng)歷過(guò)的事情”。從學(xué)生熟悉的知識(shí)出發(fā),一個(gè)場(chǎng)景、一段視頻、一個(gè)趣題或是一個(gè)故事作為每個(gè)教學(xué)主題的開(kāi)始[1],讓學(xué)生了解學(xué)習(xí)的內(nèi)容與客觀世界的關(guān)系,了解實(shí)際問(wèn)題如何抽象成數(shù)據(jù)模型,提升對(duì)進(jìn)一步學(xué)習(xí)算法的興趣。
其次,抽象內(nèi)容直觀具體化是讓學(xué)生充分理解學(xué)習(xí)內(nèi)容的關(guān)鍵。在認(rèn)識(shí)過(guò)程中,有了感性具體,才可能有思維的抽象,感性具體是思維抽象的前提。但是數(shù)據(jù)結(jié)構(gòu)里面的概念、算法都是抽象的結(jié)果。讓抽象內(nèi)容變得直觀具體可以采用下面幾種方式。
(1)“靜圖”變“動(dòng)圖”。在教學(xué)形式上,畫(huà)圖是最常用的方法之一,每一種結(jié)構(gòu)、每一個(gè)算法都采用直觀的圖形來(lái)體現(xiàn),大部分的教材都采用了這種方法。借助多媒體手段,可以將單一的“靜圖”變成“動(dòng)圖”,更能夠直觀的體現(xiàn)數(shù)據(jù)之間的關(guān)系以及算法執(zhí)行中的變化過(guò)程,同時(shí)也提高了趣味性。
(2)教具的使用。教具是用來(lái)講解說(shuō)明某事物的模型、實(shí)物,直觀教具可以使知識(shí)具體化、形象化,為學(xué)生感知、理解和記憶知識(shí)創(chuàng)造了條件。直觀能促使學(xué)生的具體感知與抽象思維相結(jié)合,減少學(xué)生掌握抽象概念的困難,幫助其形成明確的概念,發(fā)展其觀察能力和思維能力。傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)教學(xué)中,很少使用教具,同時(shí)市面上也沒(méi)有專(zhuān)門(mén)的課程教具,需要教師自己來(lái)設(shè)計(jì)教具??梢圆捎檬占{盒表示變量、貼上寫(xiě)好變量名,用很多的小方塊或是寫(xiě)好數(shù)字的卡片來(lái)表示數(shù)據(jù),隨著每一步算法的實(shí)施,變量的值發(fā)生改變,這樣可以演示整個(gè)執(zhí)行的過(guò)程,學(xué)生會(huì)得到直觀的感受。
(3)情景立體教學(xué)。現(xiàn)在的教學(xué)資源非常豐富,很多內(nèi)容可以融入到教學(xué)中。比如,排序是數(shù)據(jù)結(jié)構(gòu)非常重要的內(nèi)容之一,各類(lèi)排序算法很多,我找了到一組排序舞蹈視頻,組織學(xué)生觀看后討論,充分理解排序算法的思想,組織學(xué)生進(jìn)行表演,了解數(shù)據(jù)的變化過(guò)程。這樣課程也變得有趣多了,也提高的學(xué)生的學(xué)習(xí)主動(dòng)性。
最后,需要強(qiáng)化實(shí)踐性教學(xué)。數(shù)據(jù)結(jié)構(gòu)的教師往往有一個(gè)誤區(qū),認(rèn)為只要講好算法的基本原理就好了,至于編程如何去實(shí)現(xiàn),應(yīng)該是C、C++或Java老師的事情。同時(shí),因?yàn)樗惴ǖ膶?shí)現(xiàn)比較復(fù)雜,學(xué)生往往心有余而力不足,就會(huì)很快放棄。教師主要從以下兩個(gè)方面入手,讓實(shí)踐性教學(xué)落到實(shí)處。
(1)精心選擇,算法內(nèi)容實(shí)現(xiàn)分層。根據(jù)算法的難度和教學(xué)大綱可以把算法分為基礎(chǔ)訓(xùn)練、簡(jiǎn)單應(yīng)用、綜合應(yīng)用三個(gè)層次,教學(xué)過(guò)程中循序漸進(jìn),提出基本要求和更高要求。應(yīng)用題目貼近生活,鼓勵(lì)學(xué)生拓展思維,采用多種方法解決問(wèn)題。
(2)算法精講。教師首先思想上要認(rèn)識(shí)到算法實(shí)現(xiàn)也是數(shù)據(jù)結(jié)構(gòu)課程非常重要的一方面,不能僅僅只講原理,實(shí)現(xiàn)過(guò)程也要精講,復(fù)雜的算法更要精講。教材上如果只提供零散的代碼片段或偽碼,教師可以提供完整的代碼參考。
3 結(jié)束語(yǔ)
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)實(shí)際上是邏輯思維能力的鍛煉,更重要的是學(xué)習(xí)如何把現(xiàn)實(shí)問(wèn)題轉(zhuǎn)化為計(jì)算機(jī)語(yǔ)言的表示,所有的算法必須基于數(shù)據(jù)結(jié)構(gòu)生存。我們需要合理利用各種資源,與時(shí)俱進(jìn)不斷改進(jìn)教學(xué)方法與教學(xué)手段,培養(yǎng)學(xué)生分析解決問(wèn)題和創(chuàng)新的能力。
參考文獻(xiàn):
[1]程杰. 大話數(shù)據(jù)結(jié)構(gòu). 清華大學(xué)出版社. 2011
作者簡(jiǎn)介:
陳暢,女,湖南長(zhǎng)沙人,副教授,研究方向:軟件開(kāi)發(fā)