摘要:數據結構是高職軟件專業的基礎必修課,由于該門課理論性太強,難以適應高職軟件專業的實踐性,所以對其上機實踐的要求顯得尤為突出。而關于高職數據結構課程上機實踐的組織,目前沒有統一的認可,本文總結數據結構上機教學實踐經驗,得出一種創新的教學模式,以期為高職院校開展數據結構上機實踐提供教學方法上的參考。
關鍵詞:高職;數據結構;“填空式”實驗手冊上機教學模式
一、引言
數據結構是高職軟件專業的一門專業基礎必修課,它是軟件開發類課程的基礎。目前高校采用的數據結構上機教學實踐模式是“大作業”或者“課程設計”,而這兩種模式對高職學生而言難度很大,絕大多數的學生很難按照要求完成設計,因此收不到很好的教學效果。高職教學最需要的是教師能夠帶領學生“手把手”編寫并實現算法,再讓學生自行設計其他算法。鑒于這一點,同時也考慮到高職學生以后的工作需要,我們在上機實踐中擬定這樣的總體教學目標:對數據結構的一些過深入的理論不要求學生過多掌握,注重培養學生對常用算法的實踐編寫能力。本文針對如何手把手教學生編寫算法作一定程度的探討和研究,并提出一種創新的教學模式。
二、上機教學實踐總體設計思路的提出
我們的總體設計思路是:編寫“填空式”實驗手冊,實施“填空式”實驗手冊上機教學模式。“填空式”實驗手冊并不是代碼的羅列,而是在每個實驗題目中給出引導文本,以及相應的C++程序框架代碼,引導學生進行關鍵語句或子程序的填寫,并要求學生編譯、運行、調試,記錄相應的實驗結果,最后師生共同進行實驗結果分析,在實驗結果分析中注重對學生的過程性評價,在學期結束時,教師再給予學生總結性評價。“填空式”實驗手冊上機教學模式圖如下圖:
三、“填空式”實驗手冊上機教學實踐之案例探討
本文以二叉樹的上機教學為例來探討如何編寫行之有效的“填空式”實驗手冊藍本。通過理論課堂學習二叉樹的抽象數據類型及常見算法以后,學生已經有了一定的理解,實踐教學難點是怎樣編程實現它,這需要逐步回顧和提取學生已學的編程知識,由淺入深地引導學生編寫。
(一)探討1——針對要求學生必須掌握的算法
對于理論教學和上機教學中都要求學生必須掌握的算法,在實驗手冊中必須給出盡可能多的空格,來填寫數據結構及相應的算法。首先是二叉樹結點的定義,在實驗手冊中可以這樣編排:給出大致的代碼框架和相應的注釋,學生在填寫完成空缺的代碼后,再全部敲入計算機運行。例如:
#include
#include
Struct BinTreeNode{ //二叉樹結點定義
; //定義二叉樹數據域
; //定義二叉樹左指針
; //定義二叉樹右指針
};
學生通過填寫以上的空格,并把代碼敲入計算機,編譯運行,不僅可以加深印象,還可以提高編程能力。
其次是二叉樹的遍歷,高職學生需要掌握的遍歷并不僅僅是會寫出遍歷的序列,更重要的是編寫遞歸遍歷的算法,例如前序遍歷是這樣描述的:如果一棵二叉樹不空,先遍歷根結點,再遞歸遍歷左子樹,最后遞歸遍歷右子樹。而對應的實現程序可以在實驗手冊上這樣給出:
Void PreOrder(BinTreeNode* subTree){
If(?搖?搖?搖?搖){ //如果該樹不空
; //遍歷根結點
; //遞歸遍歷左子樹
; //遞歸遍歷右子樹
};
};
而諸如中序,后序遍歷的情況可以以此類推。
在教學過程中,在強調算法的編寫的同時,更強調程序的正確運行,所以在編寫實驗手冊時,必須編寫最終能使得所有算法函數運行的main()函數,承接上述二叉樹的遍歷實例,繼續在實驗手冊中安排以下的代碼:
int main(){?搖?搖 ?搖//主函數
cout<<\"二叉樹測試程序\";
BinTreeNode*root;?搖?搖 //樹根
root=
Create(\"A(B,C(D,E))#\") //創建二叉樹
; //前序遍歷
; //中序遍歷
; //后序遍歷
return 0;
};
除了編寫main()函數之外,教師還需要對一些學生必須掌握的復雜算法做相應的文字說明,譬如,頭文件和.cpp文件的創建,哪些代碼放在哪些文件中,并要求寫出更詳細的實驗結果。教師需要在課前自行編寫好代碼并通過運行,然后,再根據算法本身的眼點做些填空的設計,要求學生自行完成。例如釋放二叉樹的存儲空間的算法需要用到遞歸后序遍歷,可以這樣設計:
Void Destroy(BinTreeNode* subTree){
If(?搖?搖?搖){?搖?搖?搖 //二叉樹不空
; //釋放左子樹
; //釋放右子樹
; //釋放根結點
};
};
(二)探討2——針對只要求學生了解的算法
對于一些不要求學生徹底掌握、只要求其了解的算法,在設計實驗手冊時,可以把填空的數目設置得少一點,僅僅留下一些最關鍵的代碼,讓學生去填寫,但同樣需要其運行,這樣既降低了難度,也加深了學生對該算法的印象,達到預期效果。例如對一棵二叉樹進行非遞歸前序遍歷,在這個算法中需要利用堆棧進行回溯,實驗手冊上的代碼可以這樣設計:
VoidPreOrderUnRec(BinTreeNode*subTree){
BinTreeNode*stk?搖?搖 //回溯堆棧
=new BinTreeNode[20];
Int top=-1;?搖 ?搖//棧頂指針
Stk[++Top]=NULL; //空指針入棧
BinTreeNode* p=subTree; //遍歷指針
While(p!=NULL){
Cout<
If(p->rightChild!=NULL)
;
if(p->leftChild!=NULL)
;
else?搖?搖
LS.Pop(p);
};
對于這樣較復雜的算法來說,實際起到的效果僅僅是提高學生調試程序的能力,所以可以選擇性地講解。
(三)探討3——給出一些輔助性的算法
在高職的數據結構理論課程中,并不是所有的算法都要求學生掌握或了解的,尤其一些難度較大、理論性較強的算法,而這些算法程序在上機教學中有時是必不可少的。例如,二叉樹的創建算法,通過廣義表描述字符串來創建二叉樹,這個算法的難度對高職學生而言是比較大的,因為涉及堆棧和回溯,學生能編寫出來的可能性較小,因此在理論課程中不需要學生掌握,但是在上機過程中,如果需要編寫后繼的算法,二叉樹是必須創建的,遇到這種情況,教師可以事先把程序編寫調試好,直接寫在實驗手冊上,然后在上機教學時對于二叉樹的創建這個問題一帶而過,直接把創建的代碼給學生,以便學生接下來編譯,運行,調試。
四、“填空式”實驗手冊上機教學模式之具體實施策略
上機教學實踐中還需結合相應的實施策略:(1)由于最終的目標是每個學生都能完成實驗冊上的任務,這就要求實驗手冊上的代碼必須是事先經過教師的嚴密調試的,確保可行之后再交給學生填寫。另外,對于實驗手冊的編排,可以在本門課開設之前由學校組織統一編寫實驗手冊,或者教師在每次課之前把實驗手冊以講義的形式印發給學生。(2)在教學的過程中,要求每個學生把編寫的源文件保存,直到學期結束時作為學生的代碼集,存入學生電子檔案袋,以便對學生進行過程性評價。(3)步步引導的教學方法不可能是自始至終的,最終的目的還是需要學生獨立編寫,同時學生也不可能在僅有的幾次的引導下,自主編寫能力就可以提高,所以教師在教學過程中,可以引入“強制”教學方法。(4)教學的過程是循序漸進的,在了解學生已經具備一定的獨立編寫能力后,可以適當地給學生布置一些難度不大,但需要學生從頭到尾獨立設計編寫完成的大作業,強化其設計能力,并進行考核。
五、結語
總之,數據結構的上機教學是有難度的,不僅要教會學生編程,還要教會學生養成良好的編程習慣,更要培養學生的創新性思維。本文提出的“填空式”實驗手冊上機教學模式仍存在不足,需要在實踐中不斷改進,需要教師不斷地思考如何進行課前準備、課堂組織和課程考核。
參考文獻:
[1]嚴蔚敏,吳偉民.數據結構(C語言版)[M].北京:清華大學出版社,1997.
[2]陳雁.數據結構(C語言版)[M].北京:高等教育出版社,2002.
[3]鄧文華,戴大蒙.數據結構實驗與實訓教程[M].北京:清華大學出版社,2004.