張一倩
(濟南職業學院,濟南 250000)
《數據結構與算法》作為高職軟件技術專業的職業基礎課,具有一定的理論性與實踐性,采用課堂教學與上機實訓1:1的課時分配模式。其中的實訓課程是學生對課堂所學知識的綜合運用,與課堂聽講、課后練習、自學總結相輔相成,構成一個完整的課程教學體系。要真正掌握數據結構的知識并能根據實際情況應用知識解決問題,只依靠課堂聽講、課后練習不夠,還需要完成與課堂教學同步的上機實驗,動手設計實施有效的測試,才能培養全面、靈活的算法設計思想和較高的編程能力,為今后從事軟件開發打下基礎。當今的行業、企業需要具有較強動手能力、能解決實際問題、有創造能力的新型技能型人才,這也是實訓教學的最終目的。
筆者在校任職期間,除了擔任《數據結構與算法》課程及實訓任課教師外,還多次指導了大學生數學建模競賽。在教學、比賽過程中深刻體會到,許多理工科大學生綜合運用所需知識,分析、解決問題的能力,與現代社會的要求還相距較遠。
很多同學能夠憑借對程序設計的興趣,自覺學習數據結構相關知識;但也有為數不少的學生在學習過程中未能建立絲毫的興趣。這一現狀,無疑與實訓內容設計有密切的關系。原有實訓教學過程單一,學生只需按照要求照抄教材上的例程,就可以看到實訓結果,可供學生發揮的空間小,不能充分激發學生的主動性與創造性。
分析上述問題,原因是缺乏對實訓教學的內容和過程進行深入研究和設計。通過梯次配置不同難度的任務,持續激發學生學習的積極性,從而獲得較好的實訓教學效果。
針對原有實訓教學環節中存在的不足,對實訓的內容進行充實和提高。但如果僅提高實訓難度,學生很難在短時間內全部接受。因此還應梯次配置的任務,使學生保持學習的積極性,從而獲得最佳的實訓教學效果。
針對原有實訓內容單一,實訓過程缺乏創造性的缺點,對實訓內容進行了充實,所做的工作有:
首先,設計、探索、實施了“問題驅動”的實訓教學模式,將課程分為基本概念、線性結構、樹形結構、圖形結構、查找技術、排序技術六大模塊,針對每個模塊設計一個有趣的實際問題,從常識性思考出發,讓學生明白這些數據結構為什么存在,可以解決什么問題。實訓題目圍繞該實際問題展開。第二,圍繞主要知識點,設計了10個上機實驗題目,給出了實驗目標、源代碼、測試用例,讓學生在做中學,在學中做,從實際應用的角度更好的理解知識點。第三,采用“分階段設計、實施、調整”的研究方法。首先由課程負責人提出“課程各模塊知識點分布圖”,之后與軟件教研室主任、課程組成員討論、研究、確定具體方案;依據方案實施、修改、完善;課程負責人對項目各開發步驟的完成情況進行匯總,形成《數據結構與算法實訓任務書》。
如果僅一味增加實訓內容,提高實訓難度,在有限的實訓時間內,大多數同學將難以學習和接受,反而容易挫傷他們學習的自信心和積極性。因此必須對實訓內容進行合理的規劃,根據難度高低分解為不同的任務。通過梯次配置的任務,吸引學生在“任務挑戰-嘗試解決-編程實踐-取得進展”的循環中,不斷保持學習的積極性,從而獲得較好的實訓教學效果。
實例1 線性表的應用
統計是我們在日常數據處理中經常碰到的問題,大到國家經濟指標的統計,小到家庭的日常收支的統計。對于這類問題,涉及的數據對象是線性表。順序表是線性表的順序存儲形式,其基本操作有插入、刪除、查找等。該實訓項目中,將實現順序表的插入和刪除算法。要求學生首先分析項目涉及到的順序表的初始化、插入、刪除、輸出等基本操作;并分析出各函數之間的調用關系:主函數main調用 Init_Seqlist、Insert_Seqlist、Delete_Seqlist、Display_Seqlist, 進 而利用C語言實現以上算法。
某餐廳前臺客服人員接聽客戶訂餐電話后,需填寫訂餐記錄單,包括姓名、人數、用餐時間,要求分析客戶電話訂餐的各種情況,并編程模擬前臺客服人員對“客戶電話訂餐”的管理過程。該實訓項目中,要求學生首先應考慮的是,如何存儲客服接聽電話的紙質記錄單,以及選擇何種數據結構才更加貼近實際情況、更加方便程序控制。學生認識到這是一個小型管理系統后,應明確該系統的基本功能,并依據功能模塊設計系統菜單,進而利用基本任務中已實現的線性表的基本操作,實現整個訂餐系統的功能。
將實訓內容劃分為基本任務和進階任務,任務之間前后承接,難度遞增。通過梯次配置各個任務,不斷地吸引學生認真學習相關的命令,通過編程實踐解決問題。教師能夠很好的把握實訓進度。學生在前一個任務取得進展后,可以獲得學習的快樂,但隨即又面臨后續任務的挑戰。
經過上述各任務的實踐,學生可以由淺入深地逐步掌握線性表的基本操作,并在實踐中多次練習編程技巧。經過兩學時的實訓,大多數同學都能夠獨立設計算法并編程,掌握了線性表的基本使用方法。
實例2 二分查找算法的應用
解決實際問題中,查找與排序技術對程序的運行效率有明顯影響,是重要的數據處理功能。如何高效地對數據進行查找、排序,是各種軟件系統中的重要問題。本實訓項目要求完成以下功能:
任務1 輸入一個無序的查找序列,自選直接插入排序、選擇排序、快速排序算法其一,將該無序序列調整為一個有序序列;
任務2 為調整后的有序查找序列建立查找結構,查找結構可以選擇基于數組的順序存儲,也可以選擇基于單鏈表的鏈式存儲;
任務3 用二分查找算法,實現對某一給定值kx的查找;若查找成功,返回該元素在序列中的位置;若查找失敗,給出反饋信息;
任務4 給出二分查找算法的比較次數。
原有的“二分查找”實訓的內容較為單一,實現難度偏低。學生較短時間內完成實訓功能后,往往自以為已經完全掌握,很快失去了繼續學習的興趣。將原有項目擴充為四個任務,對學有余力的學生,可以在原有照搬教材算法的同時增加了“原始數據的整理”、“數據存儲結構的選擇”、“算法效率的分析”等步驟,在這一過程中,學生對相應知識的掌握和編程能力都得到了很大的提高。
在此次實訓過程中,通過補充的任務,極大地吸引了學生的注意力,始終保持了較高的積極性和學習熱情;學生通過編程實踐進一步加強了相關知識點的理論學習。
綜上所述,通過擴展實訓內容,可以將《數據結構與算法》課程實訓與C語言程序設計等課程相結合,通過知識點的聯系和對比,使學生能夠更好的將多門專業課程融會貫通。通過合理劃分和調整,將實訓內容分解為多個任務,梯次配置,使學生可以由淺入深地開展學習和實踐,學習的積極性和主動性得以充分的調動。