任平紅++陳矗++劉清秀
摘要:數據結構是一門核心的計算機專業(yè)基礎課,其主要的描述語言已由C語言逐漸轉變成C++。通過對課程教學現(xiàn)狀的分析,將面向對象的思想融入數據結構的教學中,提出了教學改革的幾個方法。通過使用對比分析法、實例引導算法、重視課程設計等,使學生更深刻地理解數據結構,有效地改善了教學效果。
關鍵詞:面向對象;數據結構;C++
中圖分類號:G642 文獻標識碼:A 文章編號: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++
數據結構是一門重要的專業(yè)基礎課,在計算機相關專業(yè)的教學體系中處于核心地位,是學習操作系統(tǒng)、數據庫、編譯原理、軟件工程等課程的基礎。早期的數據結構一般采用面向過程的程序設計語言描述,例如C語言或者Pascal語言。由于面向對象的方法能夠更好地描述現(xiàn)實世界,因而面向過程的程序設計已逐步被面向對象的程序設計所取代。數據結構的描述也逐步采用面向對象的C++語言或Java語言。數據結構中涉及線性表、棧和隊列、字符串、樹和二叉樹、圖等諸多邏輯結構,每種邏輯結構具有特定的操作,并且元素的類型不確定,更適合使用面向對象的思想描述。由于數據結構理論性強,涉及大量的算法,學生普通反映較難,往往不能深刻理解各種算法的思想,不能根據實際需求設計并實現(xiàn)相應的算法。
針對上述問題,結合多年的教學經驗,提出了面向對象的數據結構教學的一些改革方法,實踐證明,這些方法可以有效地解決上述問題。
1 現(xiàn)狀分析
數據結構是一門理論性很強的課程,在學習數據結構之前,學生一般只學習了計算機文化基礎、C++語言等基礎課程,對數據結構的作用理解的不夠深刻,體會不到其重要性。課程中所涉及數據結構和算法較多,抽象性強,學習效果達不到理想要求,并且會直接影響到后序課程的學習。目前,數據結構的教學中存在的問題主要有以下幾點:
1.1 前導課程的基礎薄弱
在C++程序設計語言的學習過程中,由于受學時所限,一般會把教學重點放到基本的數據類型(例如整數、浮點數、字符等)、類和對象的特性、繼承和派生等內容上。學生對指針、模板類等知識點掌握的不夠熟練,而這些又恰好是描述數據結構的重點,導致有的學生看不懂類的ADT定義,無法讀懂包括指針或模板類的算法[1]。
1.2 對數據結構的作用理解模糊,學習積極性不高
因為程序設計語言的教學重點一般為基本語法,所涉及的例子比較簡單,使用的數據有時是簡單的數據類型,有時是數組或結構體等。這些數據結構理解起來比較簡單,學生體會不到復雜的數據結構的重要性。
1.3 對實踐環(huán)節(jié)的重視不夠
目前,數據結構的教學仍然采用傳統(tǒng)的模式。教師講授,學生聽講。每周安排一定的課時實踐練習。教師在課堂上安排的實踐作業(yè),學生獨立完成可能會存在困難。學生的自我約束力差,并且實踐環(huán)節(jié)一般難于考核,導致理論和實踐出現(xiàn)脫節(jié)的現(xiàn)象,同時實踐環(huán)節(jié)不能正常完成會影響課堂講授的效果,學生對算法的認識只停留在理論階段,不能通過具體的實例與理論知識相互印證[2]。
1.4 面向對象的數據結構的學習資料缺乏
數據結構的學習資料絕大部分是使用面向過程的語言描述的,例如C語言。雖然面向對象的程序設計的學習資料較多,但和數據結構相相關的資料較少。目前面向對象的數據結構的教材主要為使用C++語言描述和使用Java語言描述的[3]。
2 面向對象的數據結構的教學方法
2.1 重點復習相關的基礎知識
在課程正式開始之前,先了解學生對指針和模板類的掌握情況。針對學生掌握的比較薄弱的知識點,進行重點復習,并說明指針和模板類用于描述數據結構的重要作用??梢越雍蠈嵗f明,例如順序表對應的模板類SeqList的設計與實現(xiàn)。
2.2 將對象和數據結構相結合
每種邏輯結構都有相應的存儲結構,例如線性表可采用順序表或鏈表進行存儲。而順序表和鏈表都具有各自的屬性和操作集合。此特點與類的對象的特點相統(tǒng)一。線性表中的元素具有相同的類型,但是并沒有限定使用何種具體的類型。C++語言中的模板類可以描述類中元素類型不確定的類。使用模板類描述物理結構,能更好地體現(xiàn)面向對象的思想。例如使用模板類描述單鏈表結構[4],代碼如下:
template
class LinkList{
public:
LinkList(); /*無參構造函數,構造空的單鏈表*/
LinkList(T a[],int n); /*根據數組a構造單鏈表*/
int Length(); /*返回單鏈表的長度*/
T Get(int i); /*返回邏輯上的第i個元素*/
int Locate(T x); /*返回元素x的邏輯次序*/
void Insert(int i, T x) ; /*在單鏈表的第i個位置上插入元素x*/
T Delete(int i) ; /*刪除單鏈表的第i個元素,并返回元素值*/
private :
Node
};
2.3 使用實例引導算法
數據結構涉及算法較多。如果直接講解復雜算法的思想,學生會感覺到困難,不易理解。怎樣引導學生帶著興趣和問題去學習是值得思考的問題??梢允褂脤嵗龑惴ǎ缈焖倥判蛩惴?,使用一個待排序序列進行快速排序,在排序過程時,將排序算法的思想穿插其中。然后再使用偽代碼引入算法的描述。此方法可以降低授課難度,提高學生的學習積極性,改善授課效果。
2.4 使用對比分析法梳理相關的知識點
數據結構中有許多相關的知識點,在授課的過程中要引導學生進行對比和分析。例如,由于單鏈表從結點p出發(fā)無法訪問到其前驅,因而引入了循環(huán)鏈表;由于循環(huán)鏈表從結點p出發(fā)訪問其前驅的時間復雜度為O(n),因而引入了雙向鏈表;雙向鏈表從結點p出發(fā)訪問其前驅的時間復雜度為O(1)。例如,在排序算法中,希爾排序可以看作是對直接插入排序的改進,快速排序是對冒泡排序的改進,堆排序是對簡單選擇排序的改進。
2.5 小作業(yè)和大作業(yè)相結合
作業(yè)是檢驗并加強聽課效果的重要手段。每一節(jié)完成后,應該給學生布置比較容易實現(xiàn)的小作業(yè)。每一章完成后,給學生布置較有難度的大作業(yè),并給予必要的指導。可將學生分成不同的小團隊,進行協(xié)同開發(fā)。避免因為作業(yè)難度太大,學生無法獨立完成的情況。
3 結束語
數據結構是計算機相關專業(yè)的核心的專業(yè)基礎課,面向對象的程序設計已逐步替代了面向過程的程序設計。面向對象的語言更適用于描述數據結構。通過分析教學現(xiàn)狀,提出了使用知識框圖、實例引導算法、對比分析法、小作業(yè)和大作業(yè)相結合的幾種教學方法。這些方法在授課的過程中明顯改善了教學效果,具有一定的參考價值。
參考文獻:
[1] 鐘美.以培養(yǎng)應用型人才為目標的數據結構教學改革[J].計算機教育,2014(14):26-29.
[2] 呂雅麗.面向對象的數據結構教學改革的研究與探索[J].現(xiàn)代企業(yè)教育,2012(10):123-124.
[3] 王淮亭.數據結構實踐教學探討與實踐[J].計算機教育,2009(12):133-134
[4] 王紅梅,胡明,王濤.數據結構(C++版) [M]. 2版.北京:清華大學出版社,2011: 32.