婁小平 戴 軍
[摘要]“數(shù)據(jù)結(jié)構(gòu)”是計算機科學與技術(shù)專業(yè)一門重要的專業(yè)基礎課程,針對該課程的特點,提出從先行基礎課程的銜接、教學內(nèi)容的組織、教學手段的創(chuàng)新、以及實踐環(huán)節(jié)等方面進行改革的思路,以提高該門課的教學效果。
[關(guān)鍵詞]數(shù)據(jù)結(jié)構(gòu) 教學內(nèi)容 教學手段
中圖分類號:G42文獻標識碼:A文章編號:1671-7597(2009)0320122-01
一、引言
《數(shù)據(jù)結(jié)構(gòu)》是計算機程序設計的重要理論技術(shù)基礎,是計算機學科的核心課程。但是由于“數(shù)據(jù)結(jié)構(gòu)”課程概念多、綜合性強、技巧性強,學生往往感到內(nèi)容并不難,課也都聽得懂,可是一做算法設計題就感到無從下乎,寫出的算法結(jié)構(gòu)不清晰、效率低下,根據(jù)課程內(nèi)容編寫上機題更是困難重重等。
二、《數(shù)據(jù)結(jié)構(gòu)》課程的現(xiàn)狀
(一)《數(shù)據(jù)結(jié)構(gòu)》課程的特點
(1)課程要求學生能較好地掌握《計算機導論》、《程序語言設計》以及《離散數(shù)學》這三門先行基礎課程;(2)課程中包括了大量的基本概念、算法的基本思想,而且內(nèi)容抽象;(3)課程中的數(shù)據(jù)結(jié)構(gòu)復雜、算法復雜,其實踐應用性也要求學生學會對問題的分析并用相應的數(shù)據(jù)。
(二)《數(shù)據(jù)結(jié)構(gòu)》教學中存在的問題
1.有關(guān)數(shù)學知識不夠。必要的數(shù)學知識是學好數(shù)據(jù)結(jié)構(gòu)的前提。有些學生認為數(shù)學與計算機關(guān)系不大,重視不夠,學好學不好無所謂,致使學習效果較差。
2.有關(guān)程序設計語言學得不透。程序設計語言本身內(nèi)容較多,大多數(shù)學生不能完全理解,特別是C語言中的指針部分,在數(shù)據(jù)結(jié)構(gòu)中用得較多,學生學不好的話,在設計數(shù)據(jù)結(jié)構(gòu)中的算法以及上機調(diào)試時,必然會有困難。
3.對數(shù)據(jù)結(jié)構(gòu)本身的概念理解不夠,由于數(shù)據(jù)結(jié)構(gòu)涉及到大量的概念、模型及操作算法,理論性較強,且高度抽象,學生學習起來也較難掌握。
三、《數(shù)據(jù)結(jié)構(gòu)》課程教學改革的思考
(一)注重與先行基礎課程的銜接
算法的描述和理解是《數(shù)據(jù)結(jié)構(gòu)》課程的難點和重點,而數(shù)據(jù)結(jié)構(gòu)算法的描述離不開C語言知識,《C語言程序設計》是學習數(shù)據(jù)結(jié)構(gòu)的先行基礎課程。但是許多同學的C語言功底并不扎實。為此,在開始展開數(shù)據(jù)結(jié)構(gòu)教學的同時要給學生布置《C語言程序設計》課程的復習任務,抓住兩門課程的銜接點實施教學。比如講解抽象數(shù)據(jù)類型,在數(shù)據(jù)結(jié)構(gòu)中要定義數(shù)據(jù)類型首先要確定處理對象的邏輯結(jié)構(gòu),并根據(jù)邏輯結(jié)構(gòu)的特點選擇存儲結(jié)構(gòu),最后對對象的各種基本操作進行算法描述。我們知道抽象數(shù)據(jù)類型的存儲結(jié)構(gòu)和基本操作是通過“C語言”中的數(shù)據(jù)類型來描述的,而許多學生對這些算法的理解存在障礙。在講解這些算法時我們可以通過講解C語言中不同類型的運算方式如數(shù)組、結(jié)構(gòu)體、指針等來加深學生對算法的理解。
(二)要精心設計教學內(nèi)容
1.以知識點為基礎,進行階段性總結(jié)。在教學中,將數(shù)據(jù)結(jié)構(gòu)分為3個講述階段:線性結(jié)構(gòu);樹型結(jié)構(gòu);網(wǎng)狀(圖形)結(jié)構(gòu)。講授線性結(jié)構(gòu)時要讓學生集中掌握一般線性表的特點、存儲結(jié)構(gòu)和在每種存儲結(jié)構(gòu)下的操作;透徹掌握棧、隊列、串、數(shù)組、廣義表,一般的線性表與集合的區(qū)別;特殊的線性表與一般線性表的區(qū)別。講授樹型結(jié)構(gòu)時,聯(lián)系《離散數(shù)學》中樹的概念,采用由一般到特殊,再由特殊到一般的策略,首先介紹一般樹的概念,再到特殊的二叉樹的概念、存儲、操作,最后由特殊推出一般的樹、森林的存儲、操作。講授網(wǎng)狀結(jié)構(gòu)時,首先對圖的存儲、操作等知識點進行介紹,有向圖和無向圖的異同點進行區(qū)別,再對這些知識點進行總結(jié),應用無向圖和有向圖解決實際的最短路徑和關(guān)鍵路徑的問題。經(jīng)過上述講述使學生掌握各個知識點。
2.以數(shù)據(jù)結(jié)構(gòu)的兩種存儲結(jié)構(gòu)為線,融會貫通各知識點。在講敘每個知識點的過程中,始終貫徹兩條主線,即數(shù)據(jù)結(jié)構(gòu)存儲的兩種存儲結(jié)構(gòu):順序結(jié)構(gòu)和鏈式結(jié)構(gòu)。
在線性表中,不論一般的線性表還是棧、隊列,靈活應用這兩種結(jié)構(gòu)去解決有關(guān)線性表、集合等問題。在以順序結(jié)構(gòu)和鏈式結(jié)構(gòu)為主線時,要融會貫通各個知識點,線性表的一般化形式廣義表的存儲,既可以采用課本介紹的線性表的鏈式存儲結(jié)構(gòu),也可以采用樹的存儲形式,這樣就將線性結(jié)構(gòu)和樹型結(jié)構(gòu)結(jié)合起來;圖的特例無向圖沒有回路并且連通可以看成樹,這樣樹的存儲可以利用圖的存儲來實現(xiàn),引導學生進行發(fā)散思維,融合各知識點。
3.重視習題布置、批好作業(yè)、上好習題課。要學好“數(shù)據(jù)結(jié)構(gòu)”,捷徑只有一個,多練習、勤思考。首先,布置大量的習題,反復練習,少數(shù)較難的習題適當加以提示。其次,認真批改作業(yè),找出學生的問題點,閃光點。最后,講評作業(yè),對共同出現(xiàn)的問題集中講解,對學生寫的優(yōu)秀算法加以表揚和鼓勵。再給出已做作業(yè)的參考答案供學生參考。
(三)創(chuàng)新教學手段
在傳統(tǒng)的“黑板+粉筆”的教學中,學生在學習《數(shù)據(jù)結(jié)構(gòu)》的時候完全只能靠自己的空間想象能力,不能給學生以直觀的影像,如果結(jié)合多媒體教學,就顯得更加直觀更加有效。例如在講解鏈表的插入或刪除操作的算法的時候,我們可以編寫教學軟件模擬講解的算法的動態(tài)運行,達到動態(tài)演示且直觀的效果。以圖形的方式,學生可以看到算法執(zhí)行每一條語句后鏈表的狀態(tài)、結(jié)點中指針的變化、在整個演示過程中學生可以看到如何在鏈表中插入或刪除一個結(jié)點,學生就會覺得很直觀,容易理解。
(四)注重實踐環(huán)節(jié)
要抓好實踐環(huán)節(jié),應引導學生做好以下幾點:
1.上機前先預習,熟知本次實驗目的、實驗內(nèi)容,畫出程序流程圖。
2.學會將類C語言描述的代碼,轉(zhuǎn)換成上機可執(zhí)行的C語言源程序或VC++,BC++中可執(zhí)行代碼。這就要求學生自己學會補充C語言細節(jié),將抽象的代碼轉(zhuǎn)為具體的可以上機執(zhí)行的C語言源程序。這將鍛煉學生綜合運用所學知識的能力。
3.對上機時共性的問題,教師要采取集體輔導方式;對個別學生的特殊問題給予個別指導。切忌給他們具體答案,使得培養(yǎng)學生抽象思維能力和動手能力的實踐過程變成簡單的上機重復,影響教學效果。
四、結(jié)語
數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)的骨干、核心課程,也是大多數(shù)學校研究生入學考試的必考課程,因此,對于該課程的教學,不僅要從理論上進行探討,還要從教學內(nèi)容結(jié)構(gòu)、教學方法等方面進行研究。作者根據(jù)自己的體會,提出了從先行基礎課程、教學內(nèi)容、教學手段、實踐環(huán)節(jié)等四個方面進行改革的探討。
參考文獻:
[1]劉亞波、劉大有,以實驗教學深化數(shù)據(jù)結(jié)構(gòu)理論教學[J].吉林大學學報增刊,2005.08:135-137.
[2]徐鳳生、任傳成,數(shù)據(jù)結(jié)構(gòu)教學改革探討[J].計算機時代,2006.03:58-59.
[3]徐成杰、嚴云洋,數(shù)據(jù)結(jié)構(gòu)課程教學要點的探討[J].現(xiàn)代計算機,2001.1:98-99.
[4]張敬芝,數(shù)據(jù)結(jié)構(gòu)課程教學改革研究[J].長春師范學院學報,2005.8:147-148.
[6]周克蘭、張玉華,數(shù)據(jù)結(jié)構(gòu)課程教學的實踐與思考[J].高等理科教育,2003.1:173-176.
作者簡介:
婁小平,女,湖南湘潭人,湖南文理學院計算機學院教師,主要從事嵌入式系統(tǒng)的研究。