摘要:本文根據(jù)高等職業(yè)院校學(xué)生的特點,從提高學(xué)生的實驗?zāi)芰Τ霭l(fā),結(jié)合教學(xué)實踐的經(jīng)驗,討論了基于Java語言的“數(shù)據(jù)結(jié)構(gòu)”課程的實驗方法。
關(guān)鍵詞:Java語言;實驗;算法
“數(shù)據(jù)結(jié)構(gòu)”是高等職業(yè)技術(shù)學(xué)院(以下簡稱高職)計算機(jī)相關(guān)專業(yè)的一門重要專業(yè)基礎(chǔ)課,重點討論計算機(jī)數(shù)據(jù)處理領(lǐng)域的方法問題,具有概念較為抽象、方法靈活、強(qiáng)調(diào)邏輯思維能力的特點。對于高職學(xué)生來說,這是一門難度較大、實踐性強(qiáng)的課程。
實驗是本課程教學(xué)的重要組成部分,是幫助學(xué)生加深對教學(xué)內(nèi)容的理解,提高學(xué)生利用程序設(shè)計語言實現(xiàn)算法,提高嚴(yán)密邏輯思維能力不可缺少的組成部分。由于Java語言是一種完全面向?qū)ο蟮某绦蛟O(shè)計語言,因此在提高程序的復(fù)用性和安全性時,在不同類的資源配置方面,較面向過程的程序設(shè)計語言有更高層面的要求,這給基礎(chǔ)薄弱的學(xué)生完成實驗帶來很大困難,因此我們需要在要求上、結(jié)構(gòu)上、方法上重新組織和設(shè)計實驗。
1實驗要求分析
1.1基本要求
掌握不同邏輯結(jié)構(gòu)的基本算法,并通過程序加以驗證。在實驗的總體結(jié)構(gòu)中實現(xiàn)函數(shù)的編寫、調(diào)試,并通過調(diào)用測試驗證其準(zhǔn)確性。這是每個學(xué)生都必須完成的部分。
1.2提高性要求
(1) 編寫在基本算法上進(jìn)行修改的算法。
(2) 能夠使用課程提供的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)實現(xiàn)其他拓展性實驗,如統(tǒng)計二叉樹的結(jié)點個數(shù)等,開拓學(xué)生的思路,提高學(xué)生分析問題、解決問題的能力。
(3) 靈活應(yīng)用編寫的函數(shù),實現(xiàn)不同的功能要求,如利用隊列實現(xiàn)單鏈表的逆序排列,培養(yǎng)學(xué)生對實驗總體結(jié)構(gòu)配置、函數(shù)外特性的認(rèn)識。
這部分實驗主要針對基礎(chǔ)較好的同學(xué),為他們提供發(fā)揮能力的空間,有效提高他們的學(xué)習(xí)興趣。[4]
1.3擴(kuò)展性要求
部分學(xué)生學(xué)習(xí)基礎(chǔ)較差,對類的認(rèn)識較模糊,對函數(shù)在程序設(shè)計中的作用缺乏認(rèn)識,需要在函數(shù)的作用、函數(shù)的編寫及函數(shù)的調(diào)用等方面加強(qiáng)實驗。
2實驗作業(yè)的設(shè)計
2.1作業(yè)的說明和任務(wù)
說明:介紹實驗使用的類及實驗的結(jié)構(gòu)構(gòu)成。
任務(wù):指明需要編寫的函數(shù)及相應(yīng)的調(diào)用要求。
2.2相關(guān)的類
提供完成實驗所使用的類。
2.3作業(yè)主體
包括實驗的總體結(jié)構(gòu)及需要編寫的函數(shù),對于編寫的函數(shù)只給出函數(shù)名,要求完成整個函數(shù);在整個結(jié)構(gòu)中以填空方式調(diào)用函數(shù)。對于提高性的實驗部分,以文字、圖示方式給出提示,加以引導(dǎo)。
根據(jù)課程的要求和學(xué)生的現(xiàn)狀設(shè)計客觀、可行的作業(yè)。一要以符合人們認(rèn)識事物的特點加以引導(dǎo),避免因為作業(yè)難度太大挫傷學(xué)生的學(xué)習(xí)熱情;二要達(dá)到預(yù)期的實驗?zāi)康?。因此在作業(yè)組織中要做到有說明,對整體結(jié)構(gòu)加以介紹;有提示,給學(xué)生完成實驗的思路;有參照,對有一定難度的任務(wù)給出具有參考價值的函數(shù)。
3實驗的實施
3.1實驗準(zhǔn)備
實驗前開設(shè)實驗指導(dǎo)課,說明和分析實驗作業(yè)的構(gòu)成、注意點及實驗所涉及的類,介紹和分析與實驗有關(guān)的算法。
3.2實驗過程
加強(qiáng)現(xiàn)場指導(dǎo),注意與學(xué)生的交流、溝通,及時發(fā)現(xiàn)學(xué)生的困難,有針對性地幫助學(xué)生提高認(rèn)識、解決問題。為了提高實驗效率,提示學(xué)生注意類的小型化、原子化,提高他們發(fā)現(xiàn)問題和解決問題的能力。
3.3實驗結(jié)果分析
實驗完成后進(jìn)行總結(jié),對實驗作業(yè)進(jìn)行分析,主要討論實驗中的一些普遍問題,不僅有對算法的分析,還有對實現(xiàn)算法所用的存儲結(jié)構(gòu)、實現(xiàn)過程的要素和環(huán)節(jié)的討論,幫助學(xué)生總結(jié)實現(xiàn)算法的內(nèi)在規(guī)律。[5]
4編寫函數(shù)的提示舉例
下面以編寫函數(shù)rev()為例,實現(xiàn)將單鏈表中的數(shù)據(jù)按相反的順序存儲的功能。
提示:
4.1基本過程1
(1) 將單鏈表拆分成兩個部分,附加表頭結(jié)點單獨列出,建立一個空的單鏈表(稱為單鏈表1),其余部分構(gòu)成一個無附加表頭結(jié)點的單鏈表(稱為單鏈表2)。
(2) 當(dāng)單鏈表2不空時,取出第一個結(jié)點,插在單鏈表1的表頭位置(即附加表頭結(jié)點之后)。
(3) 重復(fù)②操作,直到單鏈表2為空。[3]
4.2基本過程2
當(dāng)單鏈表不為空時,先將HL指向表頭結(jié)點,即表頭附加結(jié)點的后一個結(jié)點,然后將表頭附加結(jié)點的next域設(shè)置為NULL,依次從單鏈表中取出表頭結(jié)點,將其插入表頭附加結(jié)點之后。[1][2]
以上過程如圖1~圖5所示。
圖1初始情況
圖2拆分成兩個單鏈表
圖3取單鏈表的第一個結(jié)點
圖4插入第一個結(jié)點
圖5插入第二個結(jié)點
5結(jié)束語
由于采用了以Java語言為算法的實現(xiàn)語言,“數(shù)據(jù)結(jié)構(gòu)Java語言描述”課程對高職學(xué)生提出了更高的要求,而如何通過Java語言實現(xiàn)算法一直是本課程的一個難點。因此,要設(shè)計合理有效的實驗環(huán)節(jié),除了組織切實可行的實驗作業(yè)外,還要加強(qiáng)引導(dǎo)、分析和總結(jié),從學(xué)期開始的全程指導(dǎo)到逐步放手,幫助學(xué)生在學(xué)習(xí)過程中發(fā)揮積極的作用。由于本課程是我系近年來才開設(shè)的(以前采用C/C++語言描述),因此課程的實驗組織還需要進(jìn)一步完善。
參考文獻(xiàn):
[1] 朱戰(zhàn)立. 數(shù)據(jù)結(jié)構(gòu)-Java語言描述[M]. 北京:清華大學(xué)出版社,2005.
[2] Duane A.Bailey. 數(shù)據(jù)結(jié)構(gòu)-Java語言描述[M]. 北京:清華大學(xué)出版社,2004.
[3] 殷人昆. 數(shù)據(jù)結(jié)構(gòu)[M]. 北京:清華大學(xué)出版社,2001.
[4] 楊桂芝.“數(shù)據(jù)結(jié)構(gòu)”教學(xué)方法探索與實踐[J]. 計算機(jī)教育,2007(6):8-9.
[5] 王紅.“Java語言程序設(shè)計”課學(xué)生能力的培養(yǎng)[J]. 計算機(jī)教育,2007(15):31-32.
(編輯:張玥)