任平紅++陳矗++劉清秀
摘要:數(shù)據(jù)結(jié)構(gòu)是一門核心的計(jì)算機(jī)專業(yè)基礎(chǔ)課,其主要的描述語(yǔ)言已由C語(yǔ)言逐漸轉(zhuǎn)變成C++。通過(guò)對(duì)課程教學(xué)現(xiàn)狀的分析,將面向?qū)ο蟮乃枷肴谌霐?shù)據(jù)結(jié)構(gòu)的教學(xué)中,提出了教學(xué)改革的幾個(gè)方法。通過(guò)使用對(duì)比分析法、實(shí)例引導(dǎo)算法、重視課程設(shè)計(jì)等,使學(xué)生更深刻地理解數(shù)據(jù)結(jié)構(gòu),有效地改善了教學(xué)效果。
關(guān)鍵詞:面向?qū)ο?;?shù)據(jù)結(jié)構(gòu);C++
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)33-0095-02
Research of Teaching Method of Object-Based Data Structures
REN Ping-hong, CHEN Chu, LIU Qing-xiu
(School of Information Science and Engineering,Qufu Normal University, Rizhao 276826,China)
Abstract: Data Structure is a core basic theoretical course of computer specialty. The main description language has gradually changed from C to C++. Through the analysis of the present situation of teaching, the object oriented idea is integrated into the teaching of data structure, and several methods of teaching reform are put forward. By using the comparative analysis method, taking advantage of examples to guide algorithms and paying more attention on teaching design, so that students have a deeper understanding towards data structures, and the teaching effect has been obviously improved.
Key words: object-based; data structure; C++
數(shù)據(jù)結(jié)構(gòu)是一門重要的專業(yè)基礎(chǔ)課,在計(jì)算機(jī)相關(guān)專業(yè)的教學(xué)體系中處于核心地位,是學(xué)習(xí)操作系統(tǒng)、數(shù)據(jù)庫(kù)、編譯原理、軟件工程等課程的基礎(chǔ)。早期的數(shù)據(jù)結(jié)構(gòu)一般采用面向過(guò)程的程序設(shè)計(jì)語(yǔ)言描述,例如C語(yǔ)言或者Pascal語(yǔ)言。由于面向?qū)ο蟮姆椒軌蚋玫孛枋霈F(xiàn)實(shí)世界,因而面向過(guò)程的程序設(shè)計(jì)已逐步被面向?qū)ο蟮某绦蛟O(shè)計(jì)所取代。數(shù)據(jù)結(jié)構(gòu)的描述也逐步采用面向?qū)ο蟮腃++語(yǔ)言或Java語(yǔ)言。數(shù)據(jù)結(jié)構(gòu)中涉及線性表、棧和隊(duì)列、字符串、樹(shù)和二叉樹(shù)、圖等諸多邏輯結(jié)構(gòu),每種邏輯結(jié)構(gòu)具有特定的操作,并且元素的類型不確定,更適合使用面向?qū)ο蟮乃枷朊枋?。由于?shù)據(jù)結(jié)構(gòu)理論性強(qiáng),涉及大量的算法,學(xué)生普通反映較難,往往不能深刻理解各種算法的思想,不能根據(jù)實(shí)際需求設(shè)計(jì)并實(shí)現(xiàn)相應(yīng)的算法。
針對(duì)上述問(wèn)題,結(jié)合多年的教學(xué)經(jīng)驗(yàn),提出了面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)教學(xué)的一些改革方法,實(shí)踐證明,這些方法可以有效地解決上述問(wèn)題。
1 現(xiàn)狀分析
數(shù)據(jù)結(jié)構(gòu)是一門理論性很強(qiáng)的課程,在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)之前,學(xué)生一般只學(xué)習(xí)了計(jì)算機(jī)文化基礎(chǔ)、C++語(yǔ)言等基礎(chǔ)課程,對(duì)數(shù)據(jù)結(jié)構(gòu)的作用理解的不夠深刻,體會(huì)不到其重要性。課程中所涉及數(shù)據(jù)結(jié)構(gòu)和算法較多,抽象性強(qiáng),學(xué)習(xí)效果達(dá)不到理想要求,并且會(huì)直接影響到后序課程的學(xué)習(xí)。目前,數(shù)據(jù)結(jié)構(gòu)的教學(xué)中存在的問(wèn)題主要有以下幾點(diǎn):
1.1 前導(dǎo)課程的基礎(chǔ)薄弱
在C++程序設(shè)計(jì)語(yǔ)言的學(xué)習(xí)過(guò)程中,由于受學(xué)時(shí)所限,一般會(huì)把教學(xué)重點(diǎn)放到基本的數(shù)據(jù)類型(例如整數(shù)、浮點(diǎn)數(shù)、字符等)、類和對(duì)象的特性、繼承和派生等內(nèi)容上。學(xué)生對(duì)指針、模板類等知識(shí)點(diǎn)掌握的不夠熟練,而這些又恰好是描述數(shù)據(jù)結(jié)構(gòu)的重點(diǎn),導(dǎo)致有的學(xué)生看不懂類的ADT定義,無(wú)法讀懂包括指針或模板類的算法[1]。
1.2 對(duì)數(shù)據(jù)結(jié)構(gòu)的作用理解模糊,學(xué)習(xí)積極性不高
因?yàn)槌绦蛟O(shè)計(jì)語(yǔ)言的教學(xué)重點(diǎn)一般為基本語(yǔ)法,所涉及的例子比較簡(jiǎn)單,使用的數(shù)據(jù)有時(shí)是簡(jiǎn)單的數(shù)據(jù)類型,有時(shí)是數(shù)組或結(jié)構(gòu)體等。這些數(shù)據(jù)結(jié)構(gòu)理解起來(lái)比較簡(jiǎn)單,學(xué)生體會(huì)不到復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的重要性。
1.3 對(duì)實(shí)踐環(huán)節(jié)的重視不夠
目前,數(shù)據(jù)結(jié)構(gòu)的教學(xué)仍然采用傳統(tǒng)的模式。教師講授,學(xué)生聽(tīng)講。每周安排一定的課時(shí)實(shí)踐練習(xí)。教師在課堂上安排的實(shí)踐作業(yè),學(xué)生獨(dú)立完成可能會(huì)存在困難。學(xué)生的自我約束力差,并且實(shí)踐環(huán)節(jié)一般難于考核,導(dǎo)致理論和實(shí)踐出現(xiàn)脫節(jié)的現(xiàn)象,同時(shí)實(shí)踐環(huán)節(jié)不能正常完成會(huì)影響課堂講授的效果,學(xué)生對(duì)算法的認(rèn)識(shí)只停留在理論階段,不能通過(guò)具體的實(shí)例與理論知識(shí)相互印證[2]。
1.4 面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)資料缺乏
數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)資料絕大部分是使用面向過(guò)程的語(yǔ)言描述的,例如C語(yǔ)言。雖然面向?qū)ο蟮某绦蛟O(shè)計(jì)的學(xué)習(xí)資料較多,但和數(shù)據(jù)結(jié)構(gòu)相相關(guān)的資料較少。目前面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)的教材主要為使用C++語(yǔ)言描述和使用Java語(yǔ)言描述的[3]。
2 面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)的教學(xué)方法
2.1 重點(diǎn)復(fù)習(xí)相關(guān)的基礎(chǔ)知識(shí)
在課程正式開(kāi)始之前,先了解學(xué)生對(duì)指針和模板類的掌握情況。針對(duì)學(xué)生掌握的比較薄弱的知識(shí)點(diǎn),進(jìn)行重點(diǎn)復(fù)習(xí),并說(shuō)明指針和模板類用于描述數(shù)據(jù)結(jié)構(gòu)的重要作用。可以接合實(shí)例說(shuō)明,例如順序表對(duì)應(yīng)的模板類SeqList的設(shè)計(jì)與實(shí)現(xiàn)。
2.2 將對(duì)象和數(shù)據(jù)結(jié)構(gòu)相結(jié)合
每種邏輯結(jié)構(gòu)都有相應(yīng)的存儲(chǔ)結(jié)構(gòu),例如線性表可采用順序表或鏈表進(jìn)行存儲(chǔ)。而順序表和鏈表都具有各自的屬性和操作集合。此特點(diǎn)與類的對(duì)象的特點(diǎn)相統(tǒng)一。線性表中的元素具有相同的類型,但是并沒(méi)有限定使用何種具體的類型。C++語(yǔ)言中的模板類可以描述類中元素類型不確定的類。使用模板類描述物理結(jié)構(gòu),能更好地體現(xiàn)面向?qū)ο蟮乃枷?。例如使用模板類描述單鏈表結(jié)構(gòu)[4],代碼如下:
template
class LinkList{
public:
LinkList(); /*無(wú)參構(gòu)造函數(shù),構(gòu)造空的單鏈表*/
LinkList(T a[],int n); /*根據(jù)數(shù)組a構(gòu)造單鏈表*/
int Length(); /*返回單鏈表的長(zhǎng)度*/
T Get(int i); /*返回邏輯上的第i個(gè)元素*/
int Locate(T x); /*返回元素x的邏輯次序*/
void Insert(int i, T x) ; /*在單鏈表的第i個(gè)位置上插入元素x*/
T Delete(int i) ; /*刪除單鏈表的第i個(gè)元素,并返回元素值*/
private :
Node
};
2.3 使用實(shí)例引導(dǎo)算法
數(shù)據(jù)結(jié)構(gòu)涉及算法較多。如果直接講解復(fù)雜算法的思想,學(xué)生會(huì)感覺(jué)到困難,不易理解。怎樣引導(dǎo)學(xué)生帶著興趣和問(wèn)題去學(xué)習(xí)是值得思考的問(wèn)題??梢允褂脤?shí)例引導(dǎo)算法,例如快速排序算法,使用一個(gè)待排序序列進(jìn)行快速排序,在排序過(guò)程時(shí),將排序算法的思想穿插其中。然后再使用偽代碼引入算法的描述。此方法可以降低授課難度,提高學(xué)生的學(xué)習(xí)積極性,改善授課效果。
2.4 使用對(duì)比分析法梳理相關(guān)的知識(shí)點(diǎn)
數(shù)據(jù)結(jié)構(gòu)中有許多相關(guān)的知識(shí)點(diǎn),在授課的過(guò)程中要引導(dǎo)學(xué)生進(jìn)行對(duì)比和分析。例如,由于單鏈表從結(jié)點(diǎn)p出發(fā)無(wú)法訪問(wèn)到其前驅(qū),因而引入了循環(huán)鏈表;由于循環(huán)鏈表從結(jié)點(diǎn)p出發(fā)訪問(wèn)其前驅(qū)的時(shí)間復(fù)雜度為O(n),因而引入了雙向鏈表;雙向鏈表從結(jié)點(diǎn)p出發(fā)訪問(wèn)其前驅(qū)的時(shí)間復(fù)雜度為O(1)。例如,在排序算法中,希爾排序可以看作是對(duì)直接插入排序的改進(jìn),快速排序是對(duì)冒泡排序的改進(jìn),堆排序是對(duì)簡(jiǎn)單選擇排序的改進(jìn)。
2.5 小作業(yè)和大作業(yè)相結(jié)合
作業(yè)是檢驗(yàn)并加強(qiáng)聽(tīng)課效果的重要手段。每一節(jié)完成后,應(yīng)該給學(xué)生布置比較容易實(shí)現(xiàn)的小作業(yè)。每一章完成后,給學(xué)生布置較有難度的大作業(yè),并給予必要的指導(dǎo)??蓪W(xué)生分成不同的小團(tuán)隊(duì),進(jìn)行協(xié)同開(kāi)發(fā)。避免因?yàn)樽鳂I(yè)難度太大,學(xué)生無(wú)法獨(dú)立完成的情況。
3 結(jié)束語(yǔ)
數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)相關(guān)專業(yè)的核心的專業(yè)基礎(chǔ)課,面向?qū)ο蟮某绦蛟O(shè)計(jì)已逐步替代了面向過(guò)程的程序設(shè)計(jì)。面向?qū)ο蟮恼Z(yǔ)言更適用于描述數(shù)據(jù)結(jié)構(gòu)。通過(guò)分析教學(xué)現(xiàn)狀,提出了使用知識(shí)框圖、實(shí)例引導(dǎo)算法、對(duì)比分析法、小作業(yè)和大作業(yè)相結(jié)合的幾種教學(xué)方法。這些方法在授課的過(guò)程中明顯改善了教學(xué)效果,具有一定的參考價(jià)值。
參考文獻(xiàn):
[1] 鐘美.以培養(yǎng)應(yīng)用型人才為目標(biāo)的數(shù)據(jù)結(jié)構(gòu)教學(xué)改革[J].計(jì)算機(jī)教育,2014(14):26-29.
[2] 呂雅麗.面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)教學(xué)改革的研究與探索[J].現(xiàn)代企業(yè)教育,2012(10):123-124.
[3] 王淮亭.數(shù)據(jù)結(jié)構(gòu)實(shí)踐教學(xué)探討與實(shí)踐[J].計(jì)算機(jī)教育,2009(12):133-134
[4] 王紅梅,胡明,王濤.數(shù)據(jù)結(jié)構(gòu)(C++版) [M]. 2版.北京:清華大學(xué)出版社,2011: 32.