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