馬竹娟+陳明華+汪宏喜+尹超



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