馬竹娟+陳明華+汪宏喜+尹超
摘 要:針對(duì)學(xué)生對(duì)數(shù)據(jù)結(jié)構(gòu)課程認(rèn)知“乏”、水平“弱”、掌握“難”的現(xiàn)象,以緒論部分教學(xué)為例,提出利用虛擬實(shí)驗(yàn)平臺(tái)演示、借題發(fā)揮、化繁為簡(jiǎn)等多樣化教學(xué)方法,提高學(xué)生學(xué)習(xí)的興趣和探索的欲望。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);虛擬實(shí)驗(yàn)平臺(tái);教學(xué)方法
文章編號(hào):1672-5913(2017)07-0085-04
中圖分類號(hào):G642
1 教學(xué)中遇到的問題
數(shù)據(jù)結(jié)構(gòu)課程內(nèi)容比較抽象,理論性較強(qiáng),學(xué)習(xí)和理解這門課的時(shí)候有一定的難度,但在實(shí)際教學(xué)中遇到的最大的困難,不是“會(huì)不會(huì)”,而是“學(xué)不學(xué)”。很多學(xué)生在接觸數(shù)據(jù)結(jié)構(gòu)的第一堂課時(shí)就沒有學(xué)好這門課的欲望,原因主要可以分為3種。
(1)因?yàn)椤胺Α倍鴽]有興趣。缺乏對(duì)數(shù)據(jù)結(jié)構(gòu)知識(shí)的了解,不知道學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)有什么用或者盲目地認(rèn)為數(shù)據(jù)結(jié)構(gòu)只是程序設(shè)計(jì)的延伸,從而沒有學(xué)習(xí)興趣。
(2)因?yàn)椤叭酢倍鴽]有興趣。一部分學(xué)生由于未能熟練地掌握C語言,尤其是缺乏對(duì)指針、數(shù)組、結(jié)構(gòu)體等內(nèi)容的理解,還沒有理解算法與代碼的區(qū)別,因此在看到滿教材的類C語言偽代碼時(shí),便早已望而卻步。
(3)因?yàn)椤半y”而沒有興趣。數(shù)據(jù)結(jié)構(gòu)課程的知識(shí)介于數(shù)學(xué)、計(jì)算機(jī)軟件、計(jì)算機(jī)硬件之間,理論性很強(qiáng),內(nèi)容較抽象[1]。如果僅用單純的口頭講授、枯燥的黑板板書的傳統(tǒng)授課形式,理解力不強(qiáng)的學(xué)生很容易產(chǎn)生畏難情緒,失去對(duì)這門課程的學(xué)習(xí)和鉆研興趣。
我們以緒論為例,針對(duì)上述3種現(xiàn)象,以激發(fā)學(xué)生學(xué)習(xí)興趣為主旨,提出:①以課程概述填補(bǔ)學(xué)生知識(shí)之“乏”,輔以虛擬實(shí)驗(yàn)平臺(tái)展示,使學(xué)生認(rèn)清學(xué)習(xí)目標(biāo);②借助答疑,進(jìn)行知識(shí)展開,使學(xué)生正確自評(píng),避開“弱”項(xiàng),勇于探索知識(shí);③以化抽象為具體、化繁為簡(jiǎn)的方法,使“難”懂的問題變得容易理解,使學(xué)生不僅能學(xué)會(huì),而且能學(xué)好;④以動(dòng)畫演示和圖文并茂的教學(xué)方式,令課程更加生動(dòng)有趣。
2 教學(xué)方法及實(shí)踐
緒論部分作為數(shù)據(jù)結(jié)構(gòu)課程的先鋒,必須承擔(dān)起“先聲奪人”的任務(wù):就是在第一堂課讓學(xué)生比較透徹地理解數(shù)據(jù)結(jié)構(gòu)的含義,從宏觀上了解數(shù)據(jù)結(jié)構(gòu)的內(nèi)容以及它在課程體系結(jié)構(gòu)中的重要位置。針對(duì)學(xué)生畏難現(xiàn)象,教師可采用概述補(bǔ)“乏”、實(shí)驗(yàn)提鮮,借題發(fā)揮、識(shí)強(qiáng)避“弱”,化繁為簡(jiǎn)、變“難”成易,圖文并茂、動(dòng)畫結(jié)合等教學(xué)方法,引導(dǎo)學(xué)生自主、自覺地完成學(xué)習(xí),激發(fā)學(xué)生學(xué)習(xí)的熱情和興趣。
2.1 概述補(bǔ)“乏”、實(shí)驗(yàn)提鮮
對(duì)數(shù)據(jù)結(jié)構(gòu)課程進(jìn)行統(tǒng)領(lǐng)性介紹,可以使學(xué)生對(duì)整個(gè)課程內(nèi)容有宏觀上的了解,同時(shí)明確其在計(jì)算機(jī)學(xué)科中的重要地位。除了內(nèi)容的概述,緒論部分還有許多基本概念和術(shù)語的介紹,如果僅憑口頭講解和板書,就很容易產(chǎn)生呆板、沉悶的課堂氣氛。為了避免概念的枯燥堆砌,教師應(yīng)盡量增加實(shí)驗(yàn)展示或?qū)嵗v解。我們建立了虛擬實(shí)驗(yàn)平臺(tái),用來展示數(shù)據(jù)結(jié)構(gòu)中的各種實(shí)驗(yàn),使學(xué)生對(duì)各種結(jié)構(gòu)特性一目了然,如利用虛擬實(shí)驗(yàn)平臺(tái)建立的棧結(jié)構(gòu),向?qū)W生演示數(shù)據(jù)入棧和出棧操作,如圖1所示。棧結(jié)構(gòu)是一種只允許在一端進(jìn)行插入和刪除的線性結(jié)構(gòu),數(shù)據(jù)插入的一端為棧頂,數(shù)據(jù)的插入操作稱為入棧,具有后來居上的特點(diǎn)。棧結(jié)構(gòu)的出棧操作,如圖2所示,明顯具有后進(jìn)先出的特點(diǎn),因此棧又被稱為后進(jìn)先出(last in first out,LIFO)表。直觀的實(shí)驗(yàn)結(jié)果不僅可以加深學(xué)生對(duì)知識(shí)點(diǎn)的記憶,還提高學(xué)生進(jìn)一步探索學(xué)習(xí)的興趣。
2.2 借題發(fā)揮、識(shí)強(qiáng)避“弱”
教材使用類C語言作為數(shù)據(jù)結(jié)構(gòu)和算法的描述語言,與實(shí)際運(yùn)行的C語言程序是有區(qū)別的。類C語言利用了C語言的特點(diǎn),而又不拘泥于C語言的細(xì)節(jié)。C語言掌握不好的學(xué)生在上機(jī)實(shí)驗(yàn)環(huán)節(jié)會(huì)有難度,但并不影響對(duì)核心算法的正確理解。如果是因?yàn)闆]有學(xué)好C語言而主動(dòng)放棄學(xué)好數(shù)據(jù)結(jié)構(gòu),那么更是因小失大,因此,教師在緒論部分要借助少量的核心算法進(jìn)行講解,明確算法與程序之間的聯(lián)系和區(qū)別。
例如,教師在講解算法時(shí)間效率問題時(shí),可利用冒泡排序算法進(jìn)行討論。冒泡排序算法如下:
void bubble_sort(int a[],int n)
{for(i=n-1,change=true;i>=1&&change;--i)
{change=false;
for (j=0;j
if(a[j]>a[j+1])
{ a[j]a[j+1];change=true;}
}
}
它只是借助類C語言描述冒泡排序的方法。如果需要以程序的形式輸出結(jié)果,就要按C語言的語法要求進(jìn)行修改和加工。程序代碼如下:
#include
void Bubble_Sort(int a[], int n)
{int i,j,t,change;
change=1;
for (i=n-1,change=1;i>=1&&change==1;--i)
{change = 0;
for (j =0; j< i; j++)
if (a[j] > a[j+1])
{t=a[j+1];
a[j+1]=a[j];
a[j]=t;
change = 1;
}
for(i=0; i printf("%d ", a[i]); printf("\n "); } } int main() {int i; int a[8] = {49,38,65,97,76,13,27,49}; printf("未排序數(shù)為:\n ");
for(i=0; i<8; i++)
printf("%d ", a[i]);
printf("\n ");
printf("每次排序結(jié)果為:\n ");
Bubble_Sort(a, 8);
return 0;
}
在親歷算法改寫成程序代碼的過程中,學(xué)生可以很清楚地認(rèn)識(shí)到算法和程序不能等價(jià),因此完全不必因?yàn)闆]有學(xué)好C語言而對(duì)數(shù)據(jù)結(jié)構(gòu)望而卻步,反而能夠因?yàn)閷W(xué)好數(shù)據(jù)結(jié)構(gòu)而更加熟練地操作C語言。
在對(duì)有序序列進(jìn)行冒泡排序的實(shí)驗(yàn)對(duì)比和討論中,學(xué)生也能很容易觀察到,經(jīng)過改進(jìn)的算法可以在最好的情況下,即排序序列本身有序的情況下,只執(zhí)行一次循環(huán)就結(jié)束程序,在時(shí)間效率上有很大的提高,如圖3、圖4所示,由此便可理解優(yōu)化算法的意義,討論算法效率的必要性以及“時(shí)間復(fù)雜度”的概念。這些結(jié)論不是教師填鴨式的知識(shí)灌輸,而是由學(xué)生通過實(shí)踐、觀察和討論后自己總結(jié)得出的,不僅可以鍛煉學(xué)生的實(shí)踐能力,還能使學(xué)生學(xué)習(xí)的主動(dòng)性、學(xué)習(xí)興趣和熱情大幅度提高。
2.3 化繁為簡(jiǎn)、變“難”成易
數(shù)據(jù)結(jié)構(gòu)在很大程度上依賴于數(shù)學(xué)的基礎(chǔ),許多概念是以數(shù)學(xué)的方式表達(dá)描述的,含義精準(zhǔn),但抽象難懂。教師在授課時(shí),可以采用化繁為簡(jiǎn)、化抽象為具體、用口語化語言表達(dá)等方式,使學(xué)生對(duì)知識(shí)要點(diǎn)理解得更加透徹。例如,“數(shù)據(jù)結(jié)構(gòu)”的定義為:數(shù)據(jù)結(jié)構(gòu)是一個(gè)二元組
Data_Structure={D, S}
其中,D是數(shù)據(jù)元素的有限集,S是D上關(guān)系的有限集[2]。
如果把抽象的數(shù)學(xué)表達(dá)轉(zhuǎn)化為具體的算式“數(shù)據(jù)結(jié)構(gòu)=數(shù)據(jù)元素+元素關(guān)系”,則更加容易被學(xué)生理解。最常見的數(shù)據(jù)結(jié)構(gòu)莫過于學(xué)生在初中、高中就接觸過的方程式,它就是一種數(shù)據(jù)結(jié)構(gòu),未知數(shù)x, y構(gòu)成的方程就是它們之間的約束關(guān)系,計(jì)算結(jié)果是一個(gè)具體的數(shù)值。在非數(shù)值領(lǐng)域如信息管理、人機(jī)對(duì)弈等,數(shù)據(jù)之間的約束關(guān)系就呈現(xiàn)出一對(duì)一、一對(duì)多等情況,而這正是數(shù)據(jù)結(jié)構(gòu)課程所要討論的內(nèi)容。經(jīng)過化繁為簡(jiǎn),化抽象為具體,學(xué)生對(duì)概念的理解更為清晰。其實(shí),數(shù)據(jù)結(jié)構(gòu)后續(xù)章節(jié)里的很多抽象概念或數(shù)學(xué)表達(dá)式都可以采用這種方法,改用比較通俗、具體的語言去講解和描述。這種理解方法的轉(zhuǎn)變可以在很大程度上緩解學(xué)生畏難的情緒。
2.4 圖文并茂、動(dòng)畫結(jié)合
加入圖像、Flash動(dòng)畫等輔助措施不僅能夠提高數(shù)據(jù)結(jié)構(gòu)知識(shí)講解的條理性,還可以使枯燥的理論變得有趣味,如在緒論中的一道例題可以用來描述課題小組導(dǎo)師、研究生和本科生的數(shù)據(jù)結(jié)構(gòu),如果單從定義的角度進(jìn)行講解,則晦澀難懂,但加以圖示說明,則很容易理解,如圖5所示。這種數(shù)據(jù)結(jié)構(gòu)具有明顯的層次性,是一對(duì)多的樹型結(jié)構(gòu)。
在數(shù)據(jù)結(jié)構(gòu)后續(xù)章節(jié)的講解中,如哈夫曼編碼、最小生成樹、拓?fù)渑判虻戎R(shí),教師更需要利用圖像和Flash動(dòng)畫加以演示,使知識(shí)要點(diǎn)更清晰,學(xué)生對(duì)算法的理解更透徹。
3 結(jié) 語
采用概述補(bǔ)“乏”、實(shí)驗(yàn)提鮮,借題發(fā)揮、識(shí)強(qiáng)避“弱”,化繁為簡(jiǎn)、變“難”成易,圖文并茂、動(dòng)畫結(jié)合等教學(xué)方法,結(jié)合虛擬實(shí)驗(yàn)平臺(tái)演示、實(shí)驗(yàn)動(dòng)畫展示等多樣化教學(xué)手段,可以不斷增進(jìn)教學(xué)質(zhì)量,充分調(diào)動(dòng)學(xué)生的學(xué)習(xí)熱情,提高和培養(yǎng)學(xué)生的學(xué)習(xí)能力。圖6所示為2011—2014級(jí)學(xué)生學(xué)習(xí)本課程的期末考試平均成績(jī)。除了2012級(jí)學(xué)生成績(jī)因試卷難度偏大而造成平均分略有降低之外,學(xué)生成績(jī)基本呈上升趨勢(shì),說明我們提出的幾種教學(xué)改良措施是積極有效的,課堂的內(nèi)容生動(dòng)有趣可以大大提高學(xué)生的學(xué)習(xí)興趣。
參考文獻(xiàn):
[1] 沈鵬飛. 數(shù)據(jù)結(jié)構(gòu)及其在計(jì)算機(jī)科學(xué)中的作用和地位[J]. 自然雜志, 1986, 9(6): 447-452.
[2] 嚴(yán)蔚敏, 吳偉民. 數(shù)據(jù)結(jié)構(gòu)[M]. C語言版. 北京: 清華大學(xué)出版社, 2009: 5.
(編輯:宋文婷)