摘要:從非計算機專業的視角切入,基于非計算機專業學生學習數據結構存在的主要問題,探討數據結構教學的一些實踐策略以及創新思路。例如在課程教學中加入算法設計的學習,用比較法貫穿學習的始終等。通過培養學生對課程內容的興趣,提高其學習效率、效果及應用能力。
關鍵詞:非計算機專業;數據結構;實踐;創新
數據結構不僅是計算機專業的一門核心基礎課程,也是信息、通信等非計算機專業的重要課程之一。近年來,由于專業需求,其他一些理工類非計算機專業也相繼開設數據結構課程。鑒于Internet的發展對于程序設計人才的需求及該課程在程序設計中的重要性,在我國,數據結構已經成為理工科非計算機專業必修的信息技術基礎課程之一,目標為提高學生對數據的分析、組織、處理能力,培養學生良好的編程素養。以往該課程的大量教學研究主要針對計算機及其相關專業展開,針對非計算機專業則相對較少。本文就是從非計算機專業的視角切入,探討數據結構教學的一些實踐策略以及創新思維,為非計算機專業的數據結構教學提供一些有參考價值的建議,以促進該學科的可持續發展。
1 非計算機專業學生學習數據結構的現狀及問題
1.1 學生學習基礎薄弱,知識銜接不暢
程序設計基礎是數據結構的先導課程之一,大多數普通高校開設的都是C語言程序設計,學生對此課程的掌握程度直接關系到數據結構課程的教學效果。非計算機專業的學生一般在學習本課程之前,只學習過簡單的c語言程序設計知識,目的也常局限于計算機二級考試,缺乏系統、全局的編程訓練,加之未經過離散數學等數學理論的學習,因而無論是對C語言的運用還是程序設計的抽象思維能力,亦或是實際動手能力,與計算機類專業學生的起點相比都有一定差距,其薄弱的基礎令教學難度加大,效果不盡如人意。
1.2 課時不足
數據結構通常只作為非計算機專業學生的主要選修課而非專業基礎課,因此無論是理論授課還是實驗課時(包括實驗的軟環境),都相對不足。
1.3 課程教學內容理論性較強,實用性難以充分體現
數據結構對于任何一個專業的初學者都有難度,但對習慣了學習“所見即所得”的計算機知識(如Flash制作、網頁設計等)的非計算機專業學生來說,卻尤為困難。一來教材雖是C語言版的,但其實是以面向對象的思想進行描述,只學過C語言的學生往往覺得難以理解,二來教材中使用的類C語言不能夠直接上機使用,需要另行編寫調試C程序,而且即便寫出相應的C程序,其運行結果也遠不如生動的界面來得好看和直接,學生對課程的實用性,心存疑惑。浮躁的學習心態加上薄弱的基礎使得學生在學習時難以靜下心來學習,又有高年級學長的“諄諄告誡”,加劇了學生的畏懼情緒,學習興趣值較低。
1.4 編程能力兩極分化,上機能力普遍偏差
由于先導課程C語言程序設計的學習存在差異,直接導致了學生的編程能力出現兩極分化,而學習C語言的目標在于考級,決定了學生上機能力普遍偏差。
2 實踐策略
2.1 完善課程體系建設,增加課程的銜接度
我們在原課程體系中增加了過去未開設的離散數學課,重點學習與數據結構有關的知識,同時與上C語言程序設計課程的教師進行協調,將數據結構課程學習需要用到的幾個C語言知識點,如結構體和共用體、常用的動態分配存儲空間函數等進行講解;在教學上將原本集中于計算機二級考試的焦點轉向側重于對程序的分析和設計,解決學生基礎不到位的問題。
2.2 理清教學內容的基本脈絡
我們使用的教材是清華大學出版社出版的嚴蔚敏主編的《數據結構》,經分析,教材大部分章節是以數據邏輯結構為主線,以存儲結構及相關操作算法為副線。筆者在教學之初就通過讓學生閱讀目錄的方式,將相關章節劃分到數據結構的3種邏輯結構——線性(包括線性表、棧和隊列、串、數組、廣義表)、樹、圖中,使學生一開始進入學習過程就明確掌握學習內容的主體框架。而講授每種數據結構時,則始終圍繞兩種存儲結構——順序和鏈式結構及相關操作算法進行。
2.3 培養學生的學習興趣,明確學習目的
首先,爭取上好第一堂課。學習初期是培養學生學習興趣的良機,上好第一堂課不僅能掃除學生客觀存在的實際困難和心理障礙,也為今后的學習打下良好基礎。由多年的教學經驗得知,實際需求是引發學生學習興趣的最直接動機。因此,筆者利用案例法,將用人單位的實際需求與往屆學生畢業后的經歷告訴學生,讓他們對自己畢業后的處境提前進行情境式體驗,解決其關于課程實用性的疑問。由于是師范院校,大部分學生畢業后,或在大專院校及職校當老師,教授相關課程;或在中學任信息課教師,被安排輔導和帶領學生參加中學生信息奧林匹克競賽,需要用到數據結構的知識;亦有少部分學生因為在計算機方面有特長,而進入公司開發軟件,等等。這樣學生在心理上對自己的發展方向有了定位,學習目的也隨之明確。
其次,將經典問題用講故事的方式敘述,增加教學的趣味性,吸引學生的注意力。如將漢諾塔(Hanoi)問題與世界末日聯系起來,學生的神經一下就被調動起來;將迷宮問題與實驗心理學中老鼠找奶酪的經典問題聯系起來,學生雖經常接觸迷宮問題,但在實驗心理學中也有同樣應用仍感到新奇。
第三,在教學中向學生介紹ACM國際大學生程序設計競賽。競賽題有趣而生動,激發了學生的學習興趣和主動性。向學生提供程序的解題思路有助于學生熟練掌握C/C++編程,了解數據結構的應用的廣泛性。
最后,通過對教學進行創新,多角度拓寬學生知識面。教學的創新在后面進行了介紹。
2.4 算法分析模塊化、圖形化、動態化
數據結構中算法的教學難點在于其抽象性和動態性,“經驗之塔”理論告訴我們形象、具體的事件有助于加深理解,故教學中應盡可能將算法形象化、具體化,就具體做法而言,可以把一個復雜的問題分解成幾個功能相對簡單的模塊,并對其圖形化、動態化。美國數學家斯蒂恩指出:如果一個特定的問題可以轉化為一個圖形,那么,思想就整體地把握了問題,并且能創造性地思索問題的解法。而Kaplan D.E.(2006)則用實驗證明:用動畫演示可以增強思維表象力,提高推理能力,從而提高學習中的理解能力。
以頭插法建立單鏈表為例,將算法分解并圖形化后,結果見圖1所示。
將算法轉化為圖1后,再利用制作軟件(如PowerPoint)的動畫功能,制作出動態演示效果的多媒體課件。當然,亦可以使用有相同功能的多媒體輔助教學軟件進行演示。

2.5 使用“交互式電子白板+多媒體”的教學手段
多媒體教學已經成為目前課堂教學的主要形式,多媒體課件能動態演示,生動形象,容易引起學生的興趣。然而,此課程算法多且不易理解,需要經常采用圖示法進行講解,完全利用多媒體課件教學很難達到理想的教學效果,此時傳統的“板書”有其優勢。但在實際操作中,教學地點通常是固定的,要利用多媒體課件教學就必須選擇多媒體教室,而多媒體教室都是無塵環境,不能使用粉筆,因此,我們在多媒體教室安裝了交互式電子白板,這種白板可以實現無塵書寫,且在其上的任何操作都可以在計算機上同步顯示并存儲,下課后如果同學對某部分內容有疑問,可隨時調閱。這種方式取得的教學效果,比單一形式或者“多媒體+黑板”式的教學更好。
2.6 加強上機實驗
對數據結構的學習,最終是體現在程序的設計上。如果學生程序設計和上機能力不提高,課程的實用性也難以體現,因此,必須加強學生上機實驗的能力。
首先,在上機實驗題目的選擇上,對于非計算機專業學生,若選擇的實驗題目過大,目標過高,則學生難以完成,會加重其畏難情緒。可從已經教授給學生的、書中一些簡單的算法的C程序開始進行驗證性實驗,熟悉使用VC++調試過程的同時,體會數據結構的理論和方法,然后再循序漸進,選擇一些設計性的題目進行訓練。
其次,對實驗報告的要求,可相對于計算機專業學生適當放低,但算法的思想、主要數據結構、程序源代碼、調試過程中的問題、結論及包括算法的注釋,仍要嚴格要求。在實踐過程中,學生會遇到很多細節問題,這是他們在平時很少能想到的,要給予耐心指導。
此外,由于課時不夠,采取實驗課前一周告知實驗任務,要求學生盡量提前完成或至少完成大部分工作。正式的實驗課時則用于學生間或與老師的相互討論,解決各層次的需求和疑問,比如設計思路的問題,調試中出現的問題,而不僅僅用于輸入程序,浪費寶貴的實驗課時。現在學校實行開放式實驗室管理模式,部分學生還擁有自己的電腦,學生可以很方便地使用電腦,保證了此舉措的順利實施。
3 課程教學的創新思路
3.1 將一些經典的算法設計策略融入課程教學中
在非計算機專業的課程設置中,通常沒有專門的算法設計課程,也很難從其他專業課程中得到相關的算法設計知識,于是,筆者嘗試在數據結構的理論教學過程中將一些簡單卻經典的算法設計知識融入其中。
常用的算法設計策略有:分治法(Divide and Conquer)、貪心法(Greedy Algorithm)、動態規劃法(Dynamic Programming)、遞歸(Recursion)技術等。
如構造哈夫曼樹(Huffman Tree)的過程其實就是使用了著名的貪心算法(Greedy Algorithm)思想,由此產生的哈夫曼編碼算法,出現頻率高的字符編碼較短,頻率低的字符編碼較長,使得總碼長較短。為更好地闡釋貪心算法,列舉其在日常生活中的1個常見應用,如:給顧客找錢。假設有面值分別為5元、2元、1元和5角、2角、1角的貨幣,要給顧客找4元6角錢,通常我們會給2個2元、1個5角、1個1角,而不是46個1角或其他。這種找硬幣的方法實際上就是貪心算法,其使用的貪心策略為:最大面值優先,使付出的貨幣最快滿足要求(即貨幣數量最少)。此后,在講到圖這一章構造最小生成樹的Prim、Kruskal算法和求單源最短路徑的Diikstra算法時,再次引導學生發現這些算法同樣是一個貪心算法,溫故知新,反復滲透,令學生在學習數據結構典型算法的同時,亦可掌握其最根本的思想來源。
數據結構中還有很多典型問題反映了各種不同的算法策略,這些策略在生活中應用廣泛,還有些是跨學科知識,將部分典型問題整理如表1所示。

這一做法雖然并不在教學大綱要求的范圍之內,但從綜合的角度來看,實際上是以較小的時間代價,拓寬學生的知識面,增加他們的學習興趣,更重要的是通過總結各算法的思想共性,提高他們的思維能力,最終提升其在程序設計方面的造詣。學生經過這樣的學習過程,對知識的內在聯系有了更多的了解,其知識水平和思維能力會提升到一個新的層次,筆者認為這是值得一試的教學思路。而從學生在聽到這些內容的表情和注意力集中度來看,他們是覺得有意思并愿意聽的。需要注意的是,策略知識的講解不可占用過多課堂教學時間。
3.2 對知識點的橫、縱向比較貫穿于教學過程始終
比較1:對順序表和鏈表進行比較,見表2所示。

比較2:雙向鏈表的斷鏈。由于已經有了之前學習單鏈表的斷鏈過程的經驗,可以要求學生暫時不看教材中的的算法,提示學生雙向鏈表的斷鏈與單鏈表類似,不同之處僅在于有兩個方向的鏈域,學生做后,會發現做的順序與書上的不一致,進而思考產生不一致的原因,最后引導學生得到一個結論,即只要在斷鏈前保證已經保存后繼或前驅的地址信息即可。
比較3:將建立帶頭結點的單鏈表的頭插法,與尾插法比較;將建立帶頭結點與不帶頭結點的單鏈表過程進行比較。
比較4:約瑟夫(Joseph)問題。將利用循環隊列求解,和利用循環鏈表求解比較。
以上僅僅是列舉幾個例子,在整個教學過程中,教師可通過對比各種數據結構的異同和他們之間的相互關系,加深學生對各種數據結構的理解;通過對同一問題尋找不同的數據結構和算法來求解,開闊學生的思路,活躍學生的思維,使他們不拘泥于書本算法,學會思考問題,培養其創造性思維和靈活運用多種方法解決實際問題的能力,增加他們學習的廣深度和趣味性。
3.3 加大英語教學力度,為實施雙語教學做鋪墊
隨著世界經濟一體化和教育手段的網絡化,英語在教育傳播的過程中起著越來越重要的作用,實施雙語教學正成為我國高等教育發展的趨勢之一。
然而,由于數據結構在非計算機均專業中的性質、作用以及課程的主體素質和師資問題,該課程并不作為主體課程采用雙語教學。但筆者認為,這不意味任課教師就不必考慮英語教學的問題。鑒于未來中國的發展和整體英語素質的提高,教師有責任在教學中適度引導學生在有英文的環境下學習,以幫助學生最低限度做到無障礙(包括實質上和心理上的)閱讀相關的英文專業知識。因而,筆者通過如下措施加大英語教學的力度:1)課件中的專業術語全部用加注英語。2)每2~3周發放一份精心挑選的英文影印材料,篇幅不長,讓學生讀后寫閱讀心得,寫作語言分階段:初期用中文,接近教程一半時改用英文,再利用講解習題的時間請寫得較好的同學宣讀并討論。3)教學1個月后,開始課間播放與本節課內容相關的英語視頻(盡量使用國外知名大學的)。4)在教學內容中章節知識銜接的部分加入對國外優秀的數據結構教學網站的介紹,需要注意的是,國外的一些著名大學如MIT、Chicago等是不開設數據結構這門課程的,而是把這些知識放到Programming Fundamentals這個模塊中講授。這些措施與真正實施雙語教學甚至半雙語教學都有一定距離,但由于課程本身不作為雙語教學課程,在沒有相應政策的支助下進行英語教學的改革,筆者不但要考慮學生的承受能力,也要承擔額外的壓力和風險,在此僅作為個人經驗與讀者交流。
4 結語
數據結構是門綜合課程,它涉及多方面的知識,在針對非計算機專業的具體教學過程中,筆者結合自身的教學經驗及體會,對存在的問題提出了相應的教學實踐措施及策略,提供了一些創新的教學改革新思路。筆者認同,教育重要的是要喚醒學生的力量,培養其自我性、主動性、抽象的歸納力和理解力,在教學中始終堅持培養學生的思維能力甚于知識本身的理念,以期對學生未來的發展起到有益的作用。
參考文獻:
[1]張銘,許卓群,楊冬青,等,數據結構課程的知識體系和教學實踐[J],計算機教育,2004(3):89.
[2]南國農,電化教育學[M],北京:高等教育出版社,1985.
[3]劉小燕,楊維東,圖形形象思維的研究及應用前景[J].自然辯證法研究,2000(10):10.
[4]Kaplan D.E.,Chia-lingWu,E.Computer Based Graphical Displays for Enhancing Mental Animation and ImprovingReasoning in Novice Learning of Probability[J].Journal of Computing in Higher Education,2006,18(1):55-79.
[5]王紅梅,算法設計與分析[M].北京:清華大學出版社,2006:115-116.
[6]CCC2002研究組,中國計算機科學與技術學科教程2002[M].北京:清華大學出版社,2002: