摘要:探討了學生在學習“數據結構”課程時所要注意的方法原則,提出堅定學生學習信心,要求學生采用主動式、團隊協作方式等良好的學習方法,勤練多復習,重視實踐環節,養成終生學習觀念,最終能達到循序漸進、穩步提高、熟練掌握課程內容的目的。這對于“數據結構”課程的教學質量的提高可起到實質作用。
關鍵詞:數據結構;學習方法;主動學習
作者簡介:吳陳(1962-),男,湖北天門人,江蘇科技大學計算機學院,教授。(江蘇 鎮江 212003)
基金項目:本文系江蘇省成人高等教育精品課程2010年度課題資助項目(項目編號:313830001)的研究成果。
中圖分類號:G642.0 文獻標識碼:A 文章編號:1007-0079(2012)22-0071-02
“數據結構”是計算機科學與技術等相關專業的一門專業基礎課,具有承上啟下的作用,所以,掌握好數據結構的基本理論、基本方法和基本技能,學會運用數據結構知識去分析問題和解決問題,為后續課程如操作系統、數據庫系統、編譯方法、計算機網絡打好扎實基礎,對計算機專業學生能力的架構培養具有十分重要的地位。然而,由于“數據結構”課程內容本身具有一定的難度,既具有如抽象數據類型描述等抽象性,又具有算法設計的思想性,還具有算法到源程序代碼編制轉換的靈活性和具體調試運行的工程應用性和嚴密性,因而學習內容較為豐富,知識量較大,掌握和運用的技巧性要求也較高,加上課程內容涉及前導課程如程序設計語言、數學等方面知識,因此,學生感到解答問題上仍存在不少困難。如何學習好“數據結構”這門課程,特別是在對數據結構中相應算法較好理解的基礎上,較為快捷而且正確地做好作業,理解實驗任務,加以代碼實現,并能調試運行,得到正確結果,是這門課程在學習時學生所最為關心問題。
本文通過從“學”的方面闡述數據結構學習的一些方法,以企達到讓學生真正愿意學習、希望好好學習、按時又好又快地完成學習任務,實現能力培養養成和提高,促進“數據結構”教改,提高“數據結構”課程的教學效果和質量。[1]
一、建立信心,堅持就是勝利
端正學習態度,樹立必勝信念,是學生學好數據結構所必備的素質。數據結構在較大程度上是建立在計算機程序設計語言基礎之上的,學習數據結構必然要接觸到計算機程序設計語言,要把自己求解問題的算法用程序設計語言描述出來,交給計算機去執行,從而得到正確的解答結果。這一過程有時顯得任務十分艱巨,因為在過程中的每一步都需要自己付出很大的努力才能完成。雖然學生在最初接觸數據結構時,可能會感覺有點難,學習這門課程非常吃力,但是,只要保持一個良好的心態,樹立“我能行”、“堅持就是勝利”的自信心,不斷努力,肯定能學好這門課程。反復培養他們“我能行”的自信心是至關重要。只有堅定了自信心,就會靜下心來認真學習數據結構。通過學生自己反反復復摸索,逐步掌握每一個問題的求解,既要有克服困難的勇氣和毅力,也要會不斷改進學習方法,把握學習規律,靈活運用所學知識,最終必能透徹地學好“數據結構”這門課程。
二、溫故而知新
“數據結構”的學習涉及前導課程有程序設計語言、高等數學、離散數學、概率論等。在學習該課程的過程中,要經常用到相關的前導知識,所以,要時常對前課程加以復習,尤其是程序設計語言。“數據結構”這門課與程序設計語言如C++關系緊密,要求學生經常把相關的程序設計語言的書翻拿出來研習,多復習在程序設計語言中編寫程序時所使用的語法規則、方法甚至編程技巧。由于C++既保留了面向過程的編程成分,又引入了面向對象的方法,在“數據結構”這門課程中,在數據組織方面,很自然地實現了抽象數據類型的思想,并使用模板機制實現了代碼的復用。學生以前在學習該語言時主要側重各種語法現象,但仍有很多有待深入學習和應用的內容并沒有涉入,而現在數據結構中大多用C++語言中的類、對象、方法的概念來描寫算法,甚至用到模板結構(體)、模板類、模板函數以及異常處理機制等,所以,一定要經常復習C++程序設計語言,在原有基礎上自學新的內容,深化C++的使用技能,爭取使數據結構和程序設計語言,如C++的知識達到兩相漸長。
另外,雖然過去在一些課程如離散數學中學過一些理論知識,但并不涉及用程序設計語言來具體實現,而在“數據結構”中卻要實現從理論到算法,再到代碼的轉換,這實質上有轉換技巧和難度存在的。特別是從算法到代碼的轉換,并不是一蹴而就。如在合并兩個遞增有序表為一個遞增有序表的線性表順序對象實現時,算法上可同時從頭開始分別掃描這兩個遞增有序表對象的元素,比較當前兩個元素的大小,把小的添加到結果表中,最后,結果順序表對象中的長度置為這兩個遞增有序表的長度之和。這看似很合理的算法思想,[2,3]但是,在實際的實現中,如果結果順序表對象在創建時可能初始長度置為零,合并過程中,要加入的元素可能根據對象的操作要求根本就加不進去,程序始終出錯,同時也找不到出錯的語法錯誤,顯然,存在的是邏輯錯誤。若將結果表對象初始時將其內部的長度數據成分直接置為兩個遞增有序表的長度之和,那么就解決了該邏輯錯誤。所以,算法實現也要結合語言的特點以及設計的對象方法的接口加以應變性修改,才能最終完成正確的代碼轉化工作,實現原定任務的求解。而這種應變能力只有通過大量練習才有可能養成。
因此,準確定位自己目前的知識結構和儲備狀況,做好正確的心理準備,經常復習,穩步前進,這都是十分重要的。[4]
三、主動學習,多看算法
學生在遇到作業、實驗上的問題時,在立足于獨立完成的思想下,可通過多種渠道如圖書館或網上查找資料、多閱讀算來解決,這樣既可看到與自己原有設計的算法思想基本相同的求解算法,也可了解到對同一問題用多種不同的算法或程序來加以求解的多種不同方法。算法閱讀多了,眼界也就開闊了。通過熟悉多種算法,了解多種算法思路,自己也會在潛隱默化中借用他人的方法和技巧,用于設計和編寫自己的算法或程序之中,從而使自己的算法設計和編程應用能力得到大幅度的提高。所以,遇到任何算法設計要求或新實驗任務,都不能因為難而不主動學習,更不能輕言放棄。
為什么熟練的編程者看一個算法一下子就看懂了,而初學者要看很久才能看懂,而且即使弄懂了,過一陣子又忘記了或再看又不明白了?其實這是因為熟練者以前閱讀理解并掌握了大量的算法或程序,寫了很多算法或程序,所以有了那種“上了軌道”的感覺。因而,要學好數據結構,就要多閱讀理解并掌握算法或程序,多寫算法或程序,開闊視野,培養自己的那種“上了軌道”的感覺,使自己分析和解決實際問題的能力得到切實的提高。
四、認真多做實驗
注重應用,認真地多做實驗,也是學好這門課的一個重要方法。實驗內容都與課程相關聯,并且大都能與應用相結合。認真調試程序,使自己更深入地理解算法的實質,從實驗中可學到不少實際知識。
編程實驗做得越多,對算法的掌握就越熟練,當然編程的能力也就越強,水平也就越高,而且無形中也能養成對程序或算法的關鍵點的敏感意識。
書寫代碼不能急于求成,寫完以后要仔細檢查,多調試多運行。程序中的語法錯誤往往可借助于編譯程序檢查出來,但程序的邏輯錯誤卻不能檢查出來。因此,在編譯通過后,即使程序能運行了,也要通過多組數據加以測試。好的程序應該是:正確的數據得到正確的結果,錯誤的數據得不到正確的結果,通過測試可以發現程序中是否存在邏輯錯誤。若有邏輯錯誤,則需要花大力氣才能加以改正,因為邏輯錯誤的改正要比語法錯誤的改正更困難,而且,系統并不會報出出錯的位置等信息,需要自己去找原因。只有通過反復測試,才可以使程序達到不斷改進,不斷完善,最終令人滿意。
“數據結構”這門課程雖然有多次上機實驗,但也要珍惜每一次上機的機會,因為老師就在身邊。小問題自己解決,大的或自己不熟悉的問題,還是要請教老師。老師對于學生當面提出的問題,一般會給出正確的解決方法,甚至會連帶地講出不少道理,面對面向老師請教、與老師交流的機會千萬不能輕易放過。因此,在學生做上機實驗之前,最好將源代碼輸入完成,在實驗室主要是進行調試和測試工作。這樣能夠盡早發現問題,修正可能出現的錯誤,保證能運行得到正確的結果。千萬不能把有限的在實驗室時間花在基本代碼的輸入上,否則,等實驗時間都要過完了,源代碼尚未準備好,學習的機會就大大減少。
通過實驗環節,增強學生設計算法解決問題的能力,鍛煉其實際動手的能力,同時,加深了他們對課程的理解,這不僅為本課程后續內容的學習,也為后續其他課程的學習奠定了扎實的基礎。
在大的實驗項目中,也可體會到團隊協作的魅力。自己首先要完成在協作情況下自己所需要完成的任務,同時要保持與他人的同步,還要考慮到與他人的數據或代碼的接口,因此交流就顯得格外重要了。除自己完成基本的任務外,也要擠出盡可能多的時間嘗試將他人所要做的工作或功能模塊了解透徹,最好也能實現一遍,使自己對整個項目都具有總攬直至獨立承擔和完成的實力。
五、結語
本文從學的角度探討了學生在學習“數據結構”這門計算機專業學科基礎課時學生所要注意和采用的一些學習方法,對于類似的其他課程的學習,這些方法也是通用的。通過采用這些學習方法,學生學好這門課程就會有較大的把握。當然,每個人的情況可能都有一定的差異,具體發揮決定于個體。學生學習效果的好壞是對教學的最直接的檢驗。只有學生學得好,掌握牢,會應用,教學的目的才是真正達到。
參考文獻:
[1]陳雪剛.數據結構課程教學改革與實踐[J].計算機教育,2011,(4):
34-37.
[2]嚴蔚敏,吳偉民.數據結構(C語言版)[M].北京:清華大學出版社,
1997.
[3]王紅梅.數據結構(C++版)[M].北京:清華大學出版社,2011.
[4]孫波,劉丹.“數據結構”多媒體教學改革研究[J].科技信息,2011,
(2):264,266.
(責任編輯:宋秀麗)