徐 暢,左丹霞
(湖南安全技術(shù)職業(yè)學(xué)院,湖南長沙,410151)
淺談《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)
徐 暢,左丹霞
(湖南安全技術(shù)職業(yè)學(xué)院,湖南長沙,410151)
《數(shù)據(jù)結(jié)構(gòu)》是計(jì)算機(jī)專業(yè)的一門基礎(chǔ)課。本文從實(shí)踐的角度出發(fā),介紹了該課程教學(xué)的若干方法和體會(huì),以提高該門課的教學(xué)質(zhì)量。
數(shù)據(jù)結(jié)構(gòu);教學(xué)改革;教學(xué)方法
“數(shù)據(jù)結(jié)構(gòu)”是研究非數(shù)值計(jì)算的程序設(shè)計(jì)問題中計(jì)算機(jī)操作對象(數(shù)據(jù))以及它們之間的關(guān)系(結(jié)構(gòu))和操作(算法)等的一門科學(xué)。由于其在計(jì)算機(jī)科學(xué)技術(shù)中的重要作用,數(shù)據(jù)結(jié)構(gòu)已成為了計(jì)算機(jī)專業(yè)的一門重要基礎(chǔ)課程。課程主要討論數(shù)據(jù)的各種邏輯結(jié)構(gòu)、物理結(jié)構(gòu)以及相關(guān)的算法,目的是使學(xué)生掌握如何把現(xiàn)實(shí)世界的客觀問題轉(zhuǎn)換為在計(jì)算機(jī)內(nèi)的表示形式;學(xué)會(huì)組織數(shù)據(jù)、選擇算法、設(shè)計(jì)算法,形成良好的程序設(shè)計(jì)風(fēng)格,培養(yǎng)邏輯思維和抽象思維能力,為軟件開發(fā)奠定堅(jiān)實(shí)的基礎(chǔ);同時(shí)也為軟件工程、數(shù)據(jù)庫等后續(xù)課程打下堅(jiān)實(shí)的理論和實(shí)踐基礎(chǔ)。但由于該課程涉及大量概念、模型及操作算法,理論性強(qiáng),外加又是一門實(shí)踐性很強(qiáng)的技術(shù)性基礎(chǔ)課,所以歷來被認(rèn)為既抽象又深?yuàn)W難懂。因此這讓很多學(xué)生剛開始接觸這門課時(shí),不知其所以然,等課程結(jié)束后,卻變得更加不知其所以然。
因此,改進(jìn)教學(xué)方式,在授課過程中采用多種教學(xué)方法去激發(fā)學(xué)習(xí)的興趣,可以幫助學(xué)生更好的理解知識(shí),運(yùn)用知識(shí),以達(dá)到更好的教學(xué)效果。
2.1形象法
形象法是指通過事物的直觀標(biāo)本、模型等來加深理解和掌握知識(shí)的一種學(xué)習(xí)方法。形象的東西容易引起人們的注意,誘發(fā)學(xué)習(xí)情感,激發(fā)學(xué)習(xí)的興趣。而在數(shù)據(jù)結(jié)構(gòu)中有許多的抽象概念,通過結(jié)合一些形象的實(shí)例進(jìn)行講解,可以有助于增加學(xué)生的感性認(rèn)識(shí)和對知識(shí)的消化理解。
例如,在講授棧“先進(jìn)后出”的特點(diǎn)時(shí),可以做這樣的比方:棧就好比我們平時(shí)洗碗,洗好的碗一般都是放在其他已洗好的碗的上面;而在使用碗的時(shí)候,也是從最上面逐個(gè)取出。一疊碗就相當(dāng)于一個(gè)棧,放碗的動(dòng)作相當(dāng)于進(jìn)棧,取碗的動(dòng)作相當(dāng)于出棧。
還有對于一些算法問題,如果直接用算法語言來描述,學(xué)生總感到難以理解。因此在教授的過程中教師還可以借助圖形的方式讓學(xué)生更加形象直觀地去理解問題。例如在講線性表的基本操作時(shí),就可以把日常生活中所熟悉的花名冊看成線性表,由此引出問題“我們在使用花名冊時(shí)通常有哪些操作”來引導(dǎo)學(xué)生討論和分析。然后配合畫圖:首先畫出一個(gè)空表(構(gòu)造線性表),然后統(tǒng)計(jì)花名冊上的人數(shù)(求線性表的長度),查找某人是否在名冊中(線性表的查找),從花名冊中獲取某人的信息(取線性表中的元素),找名冊中某人的前面是誰(求某一元素的前驅(qū)),找名冊中某人的后面是誰(求某一元素的后繼),在名冊中加入一個(gè)人(線性表的插人),在名冊中劃掉一個(gè)人(線性表的刪除)。實(shí)踐證明,這樣的講授方法比純粹的照本宣科可以取得更好的教學(xué)效果。
2.2歸納法
歸納是指從大量的事件中,總結(jié)和概括出一般原理;和歸納相反,演繹是指從一般到個(gè)別的推理。利用歸納和演繹這兩種方法,可以幫助學(xué)生對所授內(nèi)容的理解做到從點(diǎn)到面、從面到點(diǎn)的結(jié)合。
例如,在計(jì)算數(shù)組元素的地址時(shí),可以先利用一個(gè)具體的一維數(shù)組,計(jì)算出數(shù)組中每個(gè)元素的存儲(chǔ)地址;然后由教師歸納出在一維數(shù)組a[n]中,已知數(shù)組的起始地址為LOC(a[0]), 每個(gè)數(shù)組元素占d個(gè)存儲(chǔ)單元,則數(shù)組中數(shù)組元素a[i]的地址為:LOC(a[i])= LOC(a[0])+i*d。接下來,進(jìn)入二維數(shù)組的學(xué)習(xí)時(shí),就可以試著由學(xué)生自己歸納二維數(shù)組元素的地址一般表達(dá)式。在二維數(shù)組a[m][n]中,已知數(shù)組的起始地址為LOC(a[0][0]), 每個(gè)數(shù)組元素占c個(gè)存儲(chǔ)單元,按行存儲(chǔ),則數(shù)組中數(shù)組元素a[i][j]的地址:LOC(a[i][j])=LOC(a[0][0])+(i*n+j)*c。這也為后面章節(jié)中特殊矩陣存儲(chǔ)時(shí),元素地址的計(jì)算方法做了鋪墊。通過這種演繹思維的培養(yǎng),使學(xué)生對掌握知識(shí)能做到舉一反三,融會(huì)貫通。
2.3對比法
類比思維是將兩個(gè)或多個(gè)事物放在一起,從事物共有、相似或相同的屬性中,找到事物的本質(zhì)屬性和特征。在教學(xué)過程中,通過采用基于類比思維的對比法教學(xué),可以增強(qiáng)學(xué)生對課程內(nèi)容聯(lián)貫性的理解,提高學(xué)生的綜合運(yùn)用能力。數(shù)據(jù)結(jié)構(gòu)中有些內(nèi)容是非常類似的,所以在講授時(shí),教師可以進(jìn)行對比歸類,引導(dǎo)學(xué)生正確理解類似問題,從而起到舉一反三的效果。
例如,在介紹棧和隊(duì)列作為特殊的線性表時(shí),首先聯(lián)系日常生活中疊放碗來引入?!跋冗M(jìn)后出”的操作特性,聯(lián)系排隊(duì)買東西來引入隊(duì)列“先進(jìn)先出”的操作特性,通過兩者的對比來加強(qiáng)學(xué)生的理解和記憶。
例如,在講棧的順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)方式時(shí),可以先提出兩種方式:方式一是將棧頂設(shè)置在線性表的首端;方式二是將棧頂設(shè)置在線性表的尾端。若采用方式一,當(dāng)元素入棧時(shí),必須先將棧中的所有元素下移一個(gè)位置,空出棧頂指針?biāo)肝恢貌拍軐⒃厝霔?;而?dāng)元素出棧時(shí),必須將棧中的所有元素上移一個(gè)位置。入棧和出棧算法的時(shí)間復(fù)雜度都為O(n)。若采用方式二,入棧時(shí)只須將棧頂指針下移一個(gè)位置,即可將元素入棧;出棧時(shí),只須將棧頂指針上移一個(gè)位置即可。這時(shí),入棧和出棧算法的時(shí)間復(fù)雜度皆為O(1)。由此對比分析,引出最佳方案是方式二。最后,再通過一些應(yīng)用實(shí)例來加深對教學(xué)內(nèi)容的理解,從而使學(xué)生掌握應(yīng)用所學(xué)知識(shí)解決具體問題的步驟和方法。
再如介紹各種排序方法時(shí),教師可以首先重點(diǎn)講解其中的一種排序方法,包括其算法思想和程序?qū)崿F(xiàn),其余的排序算法則引導(dǎo)學(xué)生自己去思考、去實(shí)現(xiàn)。這種方式可以培養(yǎng)學(xué)生獨(dú)立思考的良好習(xí)慣,讓他們理清思路,發(fā)現(xiàn)各種算法之間的不同,最后在由教師做出評(píng)判與補(bǔ)充,從而達(dá)到事半功倍的效果。
2.4趣味法
興趣是最好的老師。如何激發(fā)學(xué)生的學(xué)習(xí)興趣,是教師在組織教學(xué)時(shí)需要重點(diǎn)考慮的問題。數(shù)據(jù)結(jié)構(gòu)是一門理論性較強(qiáng)的課程,如果教師在授課時(shí)僅僅滿足于只把知識(shí)點(diǎn)講解清楚,而不注重教學(xué)的生動(dòng)性,那么學(xué)生的學(xué)習(xí)將只能是一種被動(dòng)行為。如何變被動(dòng)學(xué)習(xí)為主動(dòng)學(xué)習(xí)?其實(shí)教師在課堂中可以貫穿一些趣味題,適當(dāng)?shù)貙栴}趣味化,引入一些生活中熟悉的問題來激發(fā)學(xué)生的好奇心與求知欲。
例如,在介紹有序表的查找方法時(shí),可以先和學(xué)生一起做一個(gè)“猜數(shù)字游戲”。首先任意選取一名學(xué)生來參加游戲,學(xué)生在心里想一個(gè)1000以內(nèi)的整數(shù),由老師來猜;當(dāng)老師每說出一個(gè)數(shù)字時(shí),學(xué)生要明確地回答心中所想的數(shù)是大于、小于還是等于老師所猜的數(shù)。通過幾組游戲后,教師可以提問“最多幾次可猜中學(xué)生所想的數(shù)”。這一問題的提出,將大大引起學(xué)生的好奇心。其實(shí)這個(gè)游戲的本質(zhì)就是有序表的查找問題,可以采用二分查找法來解決,每次猜所定范圍的中間數(shù)字即可,最多10次就可以找到所要猜的數(shù)字。由此可以讓學(xué)生很形象地理解二分查找法的原理和優(yōu)點(diǎn)。
同樣在學(xué)習(xí)線性表的概念及應(yīng)用時(shí),可以利用“猴子選大王”的問題;講解遞歸問題時(shí),可以舉例 “Hanoi塔問題”、“兔子生小兔子”(菲波那契數(shù)列)來幫助學(xué)生理解數(shù)組、遞歸及回溯;這些趣味問題的引入,大大激發(fā)了學(xué)生的學(xué)習(xí)興趣,增強(qiáng)了他們學(xué)習(xí)的主動(dòng)性。
任何形式的教學(xué)改革活動(dòng)需要在具體的教學(xué)中落實(shí),課堂教學(xué)水平的高低,將直接關(guān)系到學(xué)生的能力培養(yǎng)。經(jīng)過幾年的教學(xué)實(shí)踐表明,根據(jù)《數(shù)據(jù)結(jié)構(gòu)》課程的特點(diǎn),在教學(xué)中合理地運(yùn)用形象法、歸納法、對比法和趣味法等多種教學(xué)方法,能夠激發(fā)學(xué)生的學(xué)習(xí)興趣,幫助學(xué)生更好地理解數(shù)據(jù)結(jié)構(gòu)中抽象的內(nèi)容,提高了學(xué)生的算法設(shè)計(jì)水平和編程操作能力,教學(xué)質(zhì)量大大提高。
[1]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,1997
[2]譚浩強(qiáng).C語言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2000
[3] 周張?zhí)m.算法與數(shù)據(jù)結(jié)構(gòu)理論教學(xué)技巧探討[J].科教導(dǎo)刊(上旬刊).2013(11)
徐暢(1982.4—),女,漢族,湖南長沙人,湖南安全技術(shù)職業(yè)學(xué)院講師,主要研究方向:程序設(shè)計(jì)和計(jì)算機(jī)技術(shù)。
Discussion on the Teaching of Data Structure
Xu Chang,Zuo Danxia
(Hunan Vocational Institute of Safety Technology,Hunan Changsha,410151)
Data Structure is a basic course for computer specialty.This paper presents some teaching methods and teaching experience from the angle of practice.The teaching quality are greatly improved.
data structure;teaching reform;teaching method