摘要:針對數據結構課程的特點,文章探索了一種基于“五字訣”的教學模式。該模式強調“精講、勤練、展示、深思、創新”,并結合線上線下混合式教學、案例教學、演示教學、翻轉課堂等多種教學方法,旨在幫助學生深入理解算法本質,提升算法設計、分析和編碼能力。實踐表明,該模式有助于激發學生的學習興趣,提高其分析問題、解決問題的能力,取得了良好的教學效果。
關鍵詞:數據結構;算法;混合式教學;案例教學;翻轉課堂
中圖分類號:G642" " " 文獻標識碼:A
文章編號:1009-3044(2025)28-0099-03
開放科學(資源服務) 標識碼(OSID)
0 引言
數據結構是計算機專業的核心基礎課程,處于承上啟下的重要位置,對編程技能提升、專業方向發展、職業能力起著決定性作用。然而,在教學實踐中,學生在學習數據結構課程時普遍存在“理論與實踐脫節”的現象。產生這一問題的原因是多方面的,一個典型的緣由是:在前導課程“C/C++程序設計”中被作為難點和非重點的知識——結構體及指針,在“數據結構”中卻成了基礎和必會知識,且被全程使用。問題具體表現為:對數據的抽象和分析能力不足;對數據類型的選擇、設計和定義存在困難;對指針的理解和操作不夠熟練,尤其是在鏈表操作方面;對自定義函數的參數傳遞和返回值設置不夠準確;缺乏函數化(模塊化) 思維等。這些問題的存在嚴重影響了學生對數據結構課程的學習效果,尤其是在實驗和實踐應用環節。
廣大教師都認識到了數據結構課程的重要性及問題癥結所在,并提出了一些可行的解決方案,如建立OJ實驗平臺[1-2]、實行分層教學[3]、推行CDIO教學[4-5]、開展BOPPPS模式教學[6]等,都有力地推動了“數據結構”教學的改革和教學質量的提高。教學是師生互動的過程,而學生的學習積極性對教學效果起著至關重要的作用。本文提出的“五字訣”教學模式,旨在通過多種教學策略和方法,促進師生互動、學生主動,提升教學質量。
1 “五字訣”教學模式
所謂“五字訣”,就是在教學過程中實施“講、練、展、思、創”,即精講、勤練、展示、深思、創新。
1.1 精講:注重循序漸進與培養嚴謹思維
1) 遵循循序漸進。C/C++程序設計中的一些難點,尤其是結構體指針,是學習數據結構的必備知識。而線性表則是數據結構課程的起點和基礎。因此,教師須采用循序漸進的教學方式,并結合有效的教學策略,幫助學生克服學習難點,為后續學習打下堅實基礎。
線性表是數據結構中的重要概念,其本質是由n個元素組成的有限序列。在講解線性表時,應重點強調元素個數和元素有序這兩個關鍵點,并將其貫穿于線性表各種操作的講解過程中。在介紹線性表基本操作的實現時,必須遵循循序漸進的原則,從簡單的順序存儲結構(數組) 開始,逐步過渡到動態申請存儲空間的順序存儲結構、靜態鏈表,最后再講解動態鏈表。這樣可以幫助學生更好地理解不同存儲結構的特點和聯系,避免學習上的斷層。在教學過程中,教師應充分了解學生的認知規律,采用由易到難、由淺入深的講解方式。同時,應結合案例分析、代碼演示、類比推理等多種教學方法,幫助學生理解和掌握線性表的概念和操作。例如,可以通過手工畫圖、單步調試等方式,幫助學生理解鏈表的結構和操作過程。
為幫助學生理解和掌握線性表,必須配以相應的練習題目,尤以鏈表為重點。若按循序漸進的模式組織相關練習題,典型的題目有:鏈表的建立(包括頭插法、尾插法) ;鏈表的遍歷、元素個數統計、增刪改查操作;模擬集合的并、交、差、補(包括帶頭結點的、不帶頭結點的鏈表) ;一元多項式的加法、乘法;使用鏈表完成插入排序;鏈表的就地逆置等。
總之,打好基礎、熟練重點、解決難點,才能更好地學習后續內容。與線性鏈表直接相關的后續內容主要有二叉樹的二叉鏈表和三叉鏈表存儲,樹的孩子鏈表存儲表示、孩子兄弟表示法,圖的鄰接表、逆鄰接表、十字鏈表、多重鄰接表存儲,以及哈希表沖突解決方法中的拉鏈法等。且這些內容是數據結構后續課程、實踐應用及科學研究的基礎。
2) 培養嚴謹思維。除了循序漸進,在講解算法時,還須注重培養學生的算法設計思維,包括算法的完備性、健壯性和效率性。算法設計與數學思維密切相關,但不能完全照搬數學方法,須結合計算機的特點進行設計。
完備性、健壯性和效率性是評價算法質量的重要指標,但在C/C++程序設計課程中,往往較少涉及這些方面的內容。
算法的完備性指的是算法能夠處理所有可能輸入數據的能力。例如,在定義線性表數據類型時,須考慮元素類型和表長這兩個要素才能完整地描述線性表的特征。對于順序存儲結構,這兩個要素比較直觀;而對于鏈式存儲結構,表長通常須通過遍歷鏈表才能獲取,故鏈表中一般不設置表長這一數據項。
算法的健壯性指的是算法對異常情況的處理能力。例如,在設計線性表的插入、刪除等操作時,須考慮邊界情況和非法情況,以確保算法的正確性。
算法的效率性指的是算法的執行時間和占用存儲空間的大小。在設計算法時,通常需要在算法的清晰性和效率性之間進行權衡,優先考慮算法清晰易懂,然后再考慮如何提高算法的效率。
在講解算法時,還可以結合算法的各種特性,融入課程思政元素,從而培養學生嚴謹求實、精益求精的科學精神。
1.2 勤練:強調量變到質變
1) “三課”學習。為了提高學習效果,學生須做好課前預習、課上專心、課后復習這“三課”學習。課前預習可以幫助學生更好地理解課堂內容;課上專心聽講可以提高學習效率;課后復習可以鞏固學習成果。“三課”學習是保證教學質量的重要環節,也是開展SPOC教學、啟發式教學、翻轉課堂等新型教學模式的基礎。
為了幫助學生做好“三課”學習,學校采取了一系列措施:在“學習通”平臺上建設了MOOC課程,提供講解視頻和基礎練習題,供學生課前預習;在課堂教學中,采用教師引導、學生參與的互動式教學模式,并結合交互提問、問題翻轉等教學手段,提高課堂效率;課后布置編程練習題,并將其納入期末總評成績,以檢驗學習效果,督促學生及時復習。
2) 量變引起質變。學習是一個量變引起質變的過程,只有通過大量的練習,才能熟練掌握知識和技能。因此,在數據結構課程教學中,編程練習是必不可少的環節。
在設計編程練習題時,應選擇一些典型的線性表應用實例,例如集合運算、多項式運算、約瑟夫問題等。這些問題可以使用不同的存儲結構來實現,如順序線性表、靜態鏈表、動態鏈表、循環鏈表等。通過比較不同存儲結構的實現方法,可以幫助學生更好地分辨兩種存儲結構的優缺點。
為了提高學生的學習興趣,還可以引入一些游戲性題目,例如貪吃蛇游戲。貪吃蛇游戲可以使用數組或鏈表來實現,通過編寫游戲程序,可以幫助學生更好地理解數據結構的應用。
為了方便學生進行編程練習,學校引進了PTA程序設計類實驗輔助教學平臺,學生可以在該平臺上進行在線編程練習。此外,還可以鼓勵學生在LeetCode等其他OJ平臺上進行自主練習。
1.3 展示:鼓勵學生展示學習成果
展示學習成果可以促進學生之間的相互學習和交流,幫助學生發現自身不足,激發學習興趣,提高學習積極性。同時,還可以鍛煉學生的表達能力、組織能力和團隊合作能力。典型的做法有:開設“數據結構課程設計”“數據結構創新訓練班”等短學期課程,從教材例題、課后習題、競賽題、生活應用等方面衍生出緊扣數據結構算法的題目來練習、應用、創新。還可以鼓勵學生參加各種程序設計競賽,包括藍橋杯競賽、天梯賽、ACM國際大學生程序設計競賽等。參加競賽可以開拓學生的視野,提高其編程能力和解決問題的能力;也可以將競賽成績作為創新學分、創新獎學金認定的重要依據,從而激發學生參與的熱情。
1.4 深思:引導學生多角度思考
1) 鑒賞式思考。互聯網時代,學生可以方便地獲取各種學習資源,但也須具備一定的鑒別能力,避免被錯誤的信息誤導。在學習數據結構的過程中,應鼓勵學生多思考、多比較,不要盲目相信網絡上的代碼,要學會分析代碼的優缺點,并消化吸收、嘗試自己設計更優的算法。
隨著大模型和AI技術的興起,將AI技術嵌入編程軟件,讓其補充幾行代碼或者編寫一個具體功能的函數是沒有問題的,但讓其根據敘述和要求完成一個項目則有些相形見絀。所以,個人必須具備一定的編碼能力、鑒賞能力。至于AI能完全代替程序員工作的說法則是無稽之談。
2) 溯源式思考。在學習數據結構的過程中,應鼓勵學生進行溯源式思考、尋找問題的雛形,嘗試將復雜問題分解成簡單問題,并尋找解決簡單問題的基本方法。例如,集合運算、多項式運算可以看作是線性表的應用,圖的遍歷可以看作是樹遍歷的擴展。但基本操作則是鏈表的增、刪、改、查,更原始的操作就是與指針相關的幾個賦值語句。通過類似方式追根溯源、刨根問底,可以讓學生抓住事物的本質和源泉,更好地理解基礎的重要性,從而“窺一斑而知全豹,處一隅而觀全局”,最終提高探究問題源泉的能力。
3) 總結式思考。“學而不思則罔,思而不學則殆”,學習數據結構須注重思考和總結。例如,在設計函數時,學生常常對如何確定參數個數和類型感到困惑。通過實踐和總結,可以發現函數參數的個數取決于問題的已知條件和求解目標,而參數的類型(傳值或傳址) 則取決于參數值是否需在函數內部被修改。通過引導學生進行總結和反思,可以幫助他們更好地理解和應用知識。
4) 拓展式思考。拓展式思考是指在掌握基本知識和方法的基礎上,嘗試從不同的角度思考問題,探索問題的最優解決方法,或在原有問題的基礎上進行延伸拓展。例如,在學習了一元多項式加法后,可以拓展到一元多項式乘法的實現,或者再加上語音、動畫,延伸到實現具備多媒體功能的加法、乘法模擬器(即動畫模擬手工演算過程) 。通過拓展式思考,可以培養學生的創新思維和提出問題、解決問題的能力。
1.5 創新:鼓勵學生在實踐中探索
學習數據結構的最終目標是能夠運用所學知識解決實際問題,而創新的最高境界則是提出新的算法和數據結構來解決問題。
例如,在教材上,鄰接表主要用來描述和存儲圖中結點間的關系,其主要由表頭結點和表結點兩種結構體指針構成。顯而易見,樹是特殊的圖,當然可以使用鄰接表來描述和存儲樹中結點間的父子或兄弟關系。
再例如,散列表中解決地址沖突的拉鏈法,是圖中鄰接表存儲模式的簡化及應用;索引順序表的查找(分塊查找) 可以轉換成類似于鄰接表的存儲和查找;手機通信錄中的聯系人信息,將聯系人的姓名按姓氏聲母進行分塊存儲,相同的聲母組織成一個鏈表,26個鏈表的表頭再組織到一個數組之中,這也包含有鄰接表的存儲思維;還可用于自建英文單詞小詞典、知識點的思維導圖等。
在“數據結構和算法”微信公眾號上看到“統計十進制整數對應二進制中1的個數”[7]一文,其提供了三類十余種解法:既有時間復雜度為O(n)的算法(最普通的算法) ,更有時間復雜度為O(1)的超高效率算法。雖然它們的難易程度不同,但共同點是都運用了移位運算和位與運算。
創新不是憑空想象,而是建立在對基礎知識和方法深刻理解和掌握的基礎之上的。只有打好基礎,才能進行有效的創新。
2 教學資源建設與應用
近幾年,隨著新工科、金課、一流課程、一流專業、OBE教學理念和工程教育認證的興起,為了更好地支持“五字訣”教學模式的實施,順應時代潮流因勢而為,建設了豐富的教學資源,包括在線課程平臺、編程練習平臺、教學案例庫、學生編程互惠庫等。同時,還積極引進和開發優質教學資源,例如中國大學MOOC、SPOC視頻、PTA程序設計實驗實踐平臺等。
3 實踐效果
采用“五字訣”教學模式后,學生的學習興趣、學習成績、競賽獲獎率等方面均有所提高。
4 結語
“五字訣”教學模式既針對教師,也針對學生,更強調學生的主動學習和實踐能力培養。該教學模式具有廣泛的適宜性,若將其基本原理與具體課程相結合,深入研究課程內容,師生協作,則一定能大大提高教學質量。
參考文獻:
[1] 范立新,黃龍軍,唐開山.基于OJ的《數據結構》探究式實驗教學探索[J].紹興文理學院學報(自然科學),2015,35(1):91-95.
[2] 張仕,吳聞,郭躬德,等.基于PCOJ的數據結構實驗教學探索[J].計算機教育,2015(3):30-32,36.
[3] 張華,張淼,張巖,等.數據結構實驗教學研究與實踐[J].實驗技術與管理,2018,35(5):218-221.
[4] 曾曉輝,文展,付琳.CDIO教學模式在編程類課程中的改革與評價探索[J].教育教學論壇,2016(31):123-125.
[5] 劉越暢,鐘秀玉,鐘治初,等.數據結構課程工程化實驗教學的探索和實踐[J].實驗室研究與探索,2012,31(8):339-341.
[6] 柳欣,張斌,李徐周,等.基于BOPPPS模式的《數據結構實驗》教學改革實踐[J].高教學刊,2020(18):64-66,70.
[7] 山大王wld.位1的個數系列(一) [EB/OL].(2020-05-19)[2025-02-23].https://mp.weixin.qq.com/s/wd3ZdWPtKS-b_4ReBCyfwQ.
【通聯編輯:王力】