緒論:寫作既是個人情感的抒發(fā),也是對學(xué)術(shù)真理的探索,歡迎閱讀由發(fā)表云整理的11篇數(shù)據(jù)結(jié)構(gòu)課程設(shè)計總結(jié)范文,希望它們能為您的寫作提供參考和啟發(fā)。
數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)的核心課程之一,是計算機軟件技術(shù)的基礎(chǔ),以數(shù)據(jù)為中心講述問題如何在計算機程序中得以實現(xiàn)。該課程的教學(xué)不僅要注重學(xué)生對理論知識的理解,更要培養(yǎng)學(xué)生能針對具體問題,設(shè)計合理的數(shù)據(jù)結(jié)構(gòu),對數(shù)據(jù)進行有效的存儲、操作,并能完成相應(yīng)的高效算法。課程設(shè)計的教學(xué)是整個教學(xué)環(huán)節(jié)中非常重要的一環(huán),它彌補了課堂教學(xué)中實踐少的缺陷,其教學(xué)目標(biāo)不僅要培養(yǎng)學(xué)生縝密的邏輯思維和數(shù)據(jù)抽象能力,更要培養(yǎng)學(xué)生在軟件設(shè)計領(lǐng)域科學(xué)的思維方式,將算法理論和編程實踐完美結(jié)合,能夠在工程實際中靈活應(yīng)用。因此不斷改進課程設(shè)計的教學(xué)方法,提高教學(xué)質(zhì)量是培養(yǎng)高素質(zhì)軟件人才的迫切要求。
1存在的普遍問題
1.1編程語言基礎(chǔ)差
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計通常是在大二進行,算法是基于C/C++語言。雖然學(xué)生之前已先修過這些課程,但C++本身規(guī)則復(fù)雜,面向?qū)ο蟮乃枷氩蝗菀渍莆眨鴮W(xué)生又沒有經(jīng)過系統(tǒng)訓(xùn)練,普遍存在編程語言基礎(chǔ)薄弱、對調(diào)試程序的方法不夠熟練、程序結(jié)構(gòu)設(shè)置不合理、代碼編寫可讀性差等問題。不少同學(xué)反映算法能聽懂,看教師演示一些實例也覺得簡單,但輪到自己編程就無從下手。這種狀況直接制約了學(xué)生完成課程設(shè)計的質(zhì)量[1]。
1.2缺乏系統(tǒng)的軟件開發(fā)思想
計算機專業(yè)的課程體系中,軟件工程通常安排在數(shù)據(jù)結(jié)構(gòu)課程設(shè)計之后,這樣學(xué)生在進行課程設(shè)計時,尚不具備軟件開發(fā)的思想。遇到問題時,只考慮怎么實現(xiàn),沒有進行整體軟件開發(fā)的過程規(guī)劃,忽視了軟件的性能、質(zhì)量、甚至于需求都不甚明確就急于動手編寫程序。這樣的做法使得課程設(shè)計的完成效率很低,經(jīng)常需要返工。
1.3教師的指導(dǎo)“過多”或“過少”
課程設(shè)計中,教師的指導(dǎo)相當(dāng)重要,但是目前存在兩個極端,有的教師對每個課程設(shè)計都講解得面面俱到,如何實現(xiàn),用什么樣的存儲結(jié)構(gòu),所得結(jié)果等都作了交代,學(xué)生只是被動的接收者,這種“填鴨式”的教學(xué)方式制約了學(xué)生的創(chuàng)新能力。而另一個極端,有的教師認為課程設(shè)計是由學(xué)生上機完成的,教師督促學(xué)生,最后給出考評,對學(xué)生完成課程設(shè)計的過程關(guān)注太少,很多學(xué)生因此敷衍了事。教師如何把握指導(dǎo)的度,如何指導(dǎo)是學(xué)生能力能否得到提高的一個重要因素[2]。
1.4考評制度不合理
長期以來,課程設(shè)計報告被看成是評定學(xué)生成績的一個重要依據(jù),而對學(xué)生軟件開發(fā)的過程關(guān)注不多,學(xué)生只要上交了報告就能獲得成績[3]。這樣的做法導(dǎo)致學(xué)生過度追求報告的整潔度、實驗結(jié)果的正確性等。甚至部分同學(xué)抄襲、直接從互聯(lián)網(wǎng)上下載報告交差。一個學(xué)期下來,除了交了幾份報告,學(xué)生的收獲甚少,課程設(shè)計教學(xué)效果甚微。因此,必須改革考評制度,才能真正培養(yǎng)學(xué)生的動手能力、創(chuàng)新能力。
2提高課程設(shè)計教學(xué)效果的措施
2.1規(guī)范軟件開發(fā)的過程,培養(yǎng)良好的編程習(xí)慣
在學(xué)生開始課程設(shè)計前,教師首先通過一個具體的實例,從需求分析、概要設(shè)計、詳細設(shè)計、編程測試等各個方面出發(fā),讓學(xué)生了解完整的開發(fā)軟件過程。在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中,所有算法均用可運行程序講解,避免出現(xiàn)懂算法不懂編程的現(xiàn)象。有意識地讓學(xué)生強化編程的技巧、調(diào)試方法、面向?qū)ο笏枷氲葍?nèi)容。
我院數(shù)據(jù)結(jié)構(gòu)課程組教師采用面向?qū)ο蟮乃枷耄瑢?shù)據(jù)結(jié)構(gòu)中基本算法全部用C++模板類實現(xiàn),學(xué)生通過多看、多讀這些規(guī)范的程序,取得了不小進步。
2.2梯度命題,循序漸進開展課程設(shè)計
課程設(shè)計以往是教師根據(jù)實驗指導(dǎo)書布置課題后由學(xué)生完成,部分學(xué)生感到難度很大,無從下手。現(xiàn)階段我們將課程設(shè)計改為驗證型、驗證設(shè)計型、設(shè)計應(yīng)用型多種層次,針對各種基本數(shù)據(jù)結(jié)構(gòu),教師首先用模板類實現(xiàn),學(xué)生在課程設(shè)計時先用實例驗證程序,在此基礎(chǔ)上,設(shè)計出預(yù)留的一些函數(shù)接口,實現(xiàn)該類的部分功能。最后再針對某一具體問題,由學(xué)生開發(fā)出完整的程序。這是一個由易入難的循序漸進的過程,學(xué)生通過驗證型實驗更加牢固掌握基本數(shù)據(jù)結(jié)構(gòu),再由驗證設(shè)計型和設(shè)計應(yīng)用型實驗學(xué)會如何應(yīng)用數(shù)據(jù)結(jié)構(gòu),如何在計算機中實現(xiàn)存儲,實現(xiàn)各種需求的功能。
下面以二叉樹部分內(nèi)容為例,首先實現(xiàn)二叉樹的模板類如下:
/*二叉樹類*/
template
class BinaryTree
{
public:
BinaryTree():m_root(NULL){} /*構(gòu)造函數(shù)*/
~BinaryTree()//析構(gòu)函數(shù)
/*按以先序次序輸入結(jié)點值的方式建立二叉樹的接口函數(shù)*/
void Create1(ElemType ch[],const ElemType &endChar);
/*以二叉樹的先序和中序次序建立二叉樹的接口函數(shù)*/
void Create2(ElemType ch1[],ElemType ch2[],int );
/*先序遞歸遍歷二叉樹的接口函數(shù)*/
void PreorderTraverse (void (*visit)(const ElemType &));
/*中序遞歸遍歷二叉樹的接口函數(shù)*/
void InorderTraverse (void (*visit)(const ElemType &));
/*后序遞歸遍歷二叉樹的接口函數(shù)*/
void PostorderTraverse (void (*visit)(const ElemType &));
……
private:
BTNode *m_root;
/*按先序次序輸入結(jié)點值的方式建立二叉樹*/
void _Create1(BTNode* &,ElemType ch[],const ElemType &,int &);
/*已知二叉樹的先序遍歷次序及中序遍歷次序,建立二叉樹*/
void _Create2(BTNode * &,ElemType ch1[], ElemType ch2[],int ,int ,int &);
/*先序遞歸遍歷二叉樹*/
void _PreorderTraverse(BTNode* ,void (*visit) (const ElemType &e));
……
};
對于這樣的模板類,設(shè)定的驗證型實驗為:給定一棵二叉樹,驗證其先序中序和后序遍歷結(jié)果。在掌握了二叉樹遍歷的基礎(chǔ)上,設(shè)計出模板類中預(yù)留的兩個接口函數(shù)create1和create2。最后,安排設(shè)計型實驗為創(chuàng)建表達式樹;分別用三種遍歷方式遍歷該樹,比較它與實際的波蘭式、中綴式和逆波蘭式之間的區(qū)別;完成給定表達式樹的表達式求值運算。這樣有梯度地安排課程設(shè)計,一方面強化了基本概念,另一方面引導(dǎo)學(xué)生完成更復(fù)雜的設(shè)計。對基礎(chǔ)薄弱的同學(xué)來說,驗證型實驗難度不大,基本都能完成,大大增強了自信;對優(yōu)秀學(xué)生來說,挑戰(zhàn)設(shè)計型實驗更能提高自身的能力。
2.3抽絲剝繭,層層深入啟發(fā)
學(xué)生遇到復(fù)雜問題時,往往一籌莫展,不知如何下手。教師應(yīng)教會學(xué)生如何從問題本身出發(fā),層層分析,應(yīng)采用哪種數(shù)據(jù)結(jié)構(gòu),用到什么樣的操作,在這樣的操作需求下應(yīng)用何種存儲方法比較合適,最后細化到具體的函數(shù)實現(xiàn)。
如教學(xué)計劃編制問題[4],要求根據(jù)課程和課程之間的先修關(guān)系,得到合適的教學(xué)計劃安排。首先分析這個問題是對有向圖進行拓撲排序,課程和課程之間的先修關(guān)系可用有向圖描述出來。數(shù)據(jù)結(jié)構(gòu)為有向圖,存儲方式為鄰接表,應(yīng)用的操作是拓撲排序。拓撲排序的基本思想是先輸出有向圖中入度為零的頂點,再從圖中刪除該頂點和所有以它為尾的弧,重復(fù)執(zhí)行,直至圖中所有頂點均輸出為止。要完成拓撲排序,首先要求出圖中所有頂點的入度。拓撲排序算法中還用到了一個輔助的數(shù)據(jù)結(jié)構(gòu)棧,因此還需要初始化棧、出棧,入棧,判定棧空等操作實現(xiàn)。這樣層層分析下來,程序中需要的函數(shù)一一明了:創(chuàng)建有向圖、鄰接表的建立、求頂點入度、初始化棧、出棧、入棧、判定棧空、拓撲排序等。函數(shù)層次關(guān)系圖示如圖1所示。
圖1函數(shù)層次關(guān)系圖
通過這樣的教學(xué)方式,學(xué)生學(xué)會了帶著問題去思考,逐步學(xué)會將大的程序化解成若干小函數(shù),最終經(jīng)過整合完成整個設(shè)計開發(fā)。
2.4加強團隊合作,調(diào)動每位同學(xué)積極性
在課程設(shè)計中,針對每一種數(shù)據(jù)結(jié)構(gòu)安排了一個工程性綜合實驗,這個綜合實驗由幾名同學(xué)組成小組合作完成。團隊成員分工明確,一名同學(xué)擔(dān)任組長,負責(zé)組織和控制組內(nèi)的工作進程,強調(diào)任務(wù)落實到組內(nèi)每一個同學(xué)。
教師布置任務(wù)后,每個團隊將軟件開發(fā)流程應(yīng)用到課程設(shè)計中,實質(zhì)性進行問題規(guī)劃、模塊劃分、項目整合等工作。只有團隊中每個成員都積極面對,整個團隊才能獲得優(yōu)秀成績,無形之中鞭笞每位同學(xué)認真對待。在一個團隊中,大家集思廣益,可以跟伙伴一起交流,互相學(xué)習(xí),形成共同進步的良好局面。
最后在驗收答辯時,團隊中每個成員都應(yīng)匯報自己所做工作,教師和其他團隊可以提問,交流開發(fā)過程中的心得。
2.5改革考評制度,從多角度綜合考慮成績
合理的考評制度可以對課程設(shè)計過程進行有效的監(jiān)控,通過考評體系可以反饋各階段的進展情況,便于總結(jié)經(jīng)驗,找出不足,保證課程設(shè)計的質(zhì)量和效果。課程設(shè)計考評有別于普通的課程評分,我分院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的成績由幾個方面綜合決定:課程設(shè)計的內(nèi)容、課程設(shè)計的實現(xiàn)以及實驗報告。各項考評指標(biāo)均有一定的權(quán)重,能夠比較客觀公正地確定學(xué)生成績。其中課程設(shè)計的內(nèi)容主要考慮學(xué)生所選課題的難易度、工作量多少。實現(xiàn)過程主要考慮完成情況、軟件代碼規(guī)范化、文檔規(guī)范化、答辯質(zhì)量等,最后由學(xué)生提交設(shè)計報告進行總結(jié)和討論。設(shè)計報告除了包括常規(guī)的系統(tǒng)需求分析,概要設(shè)計,詳細設(shè)計,調(diào)試分析和實驗結(jié)果外,還鼓勵他們提出優(yōu)化方案,對于每個課程設(shè)計再“多想一點”,即其他可能存在的求解方法,如已經(jīng)使用了鏈?zhǔn)酱鎯Y(jié)構(gòu)實現(xiàn),那使用順序存儲結(jié)構(gòu)如何實現(xiàn)?各種設(shè)計的優(yōu)缺點是什么?如何提高時間空間性能?通過總結(jié),學(xué)生對問題有了更加深入全面的理解,鍛煉了擴散思維方式,培養(yǎng)了創(chuàng)新能力。同時教師對評價優(yōu)秀的學(xué)生或團隊給與獎勵,促使學(xué)生之間形成你追我趕的良好學(xué)習(xí)氛圍,整體提高教學(xué)質(zhì)量。
3結(jié)語
數(shù)據(jù)結(jié)構(gòu)作為計算機專業(yè)的重要基礎(chǔ)課程之一,對學(xué)生軟件開發(fā)習(xí)慣的培養(yǎng)至關(guān)重要。提高課程設(shè)計教學(xué)質(zhì)量不僅可以鞏固基本知識,還可以讓學(xué)生適應(yīng)快速發(fā)展的軟件開發(fā)技術(shù),激發(fā)學(xué)生學(xué)習(xí)和研究的興趣。本文從五個方面討論了提高課程設(shè)計教學(xué)質(zhì)量的措施,通過一個學(xué)期的教學(xué)實踐,從效果上來看,這屆學(xué)生分析問題、解決問題的能力,綜合創(chuàng)新能力,學(xué)習(xí)積極性都比前幾屆學(xué)生有了明顯提高,絕大部分的同學(xué)都能順利完成課程設(shè)計并獲得較好成績,這為他們后續(xù)的課程打下了堅實的基礎(chǔ)。
參考文獻:
[1] 龐曉瓊. 案例驅(qū)動的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計教學(xué)改革實踐[J]. 計算機教育,2009(1):53-64.
[2] 陳越,何欽銘,馮雁.“數(shù)據(jù)結(jié)構(gòu)”綜合性課程設(shè)計教學(xué)探索與實踐[J]. 計算機教育,2008(8):54-55.
[3] 李群,趙玉霞,莊波.《數(shù)據(jù)結(jié)構(gòu)》實驗課程設(shè)計與探討[J]. 中國現(xiàn)代教育裝備,2007(3):27-28.
[4] 嚴蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)(C語言版)[M]. 北京:清華大學(xué)出版社,2006:180-182.
Discussion and Practice on Improving Teaching Quality of Data Structure Course Design
XU Chong, WANG Libo, JIANG Juan
(College of Computer Science, Hangzhou Dianzi University, Hangzhou 310018, China)
摘要:結(jié)合高等教育心理學(xué)中的學(xué)習(xí)遷移理論,對數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的教學(xué)進行了思考與教學(xué)實踐。文章針對數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的教學(xué)目標(biāo)制定、設(shè)計題目設(shè)計、考核方式等各個環(huán)節(jié)的特點與問題,闡述了學(xué)習(xí)遷移理論對數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的指導(dǎo)作用;在此基礎(chǔ)上給出了所制定的課程設(shè)計題目及一些有代表性的學(xué)生作品欣賞;對課程設(shè)計與課程實驗的區(qū)別進行了論述。對今后數(shù)據(jù)結(jié)構(gòu)課程設(shè)計教學(xué)具有很好的參考和借鑒價值。
關(guān)鍵詞 :學(xué)習(xí)遷移;課程設(shè)計;題目設(shè)計;作品欣賞
基金項目:北京林業(yè)大學(xué)2011年“虛擬現(xiàn)實技術(shù)”精品課程建設(shè)項目;2014年北京林業(yè)大學(xué)微課建設(shè)項目“計算機動畫原理與技術(shù)”。
第一作者簡介:楊猛,男,講師,研究方向為計算機應(yīng)用技術(shù),yangmeng@bjfu.edu.cn。
0 引言
數(shù)據(jù)結(jié)構(gòu)[1]是北京林業(yè)大學(xué)信息學(xué)院的計算機科學(xué)與技術(shù)、數(shù)字媒體藝術(shù)、信息管理與信息系統(tǒng)等專業(yè)的一門重要專業(yè)基礎(chǔ)課,也是必修課。它的總學(xué)時為64學(xué)時,其中理論授課48學(xué)時,實驗16學(xué)時,課程設(shè)計(實習(xí))一周,通常安排在第3學(xué)期或者第4學(xué)期開課。數(shù)據(jù)結(jié)構(gòu)也是軟件開發(fā)與設(shè)計、計算機算法研究與實現(xiàn)等課程的基礎(chǔ),其主要內(nèi)容包括線性表、棧和隊列、串、數(shù)組和廣義表、樹、圖、查找算法和排序算法等。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計通常是在數(shù)據(jù)結(jié)構(gòu)的授課環(huán)節(jié)以及實驗環(huán)節(jié)之后,單獨安排學(xué)生用大約一周的時間來完成一個較大的作業(yè),以提高學(xué)生的思維能力,促進學(xué)生的綜合應(yīng)用能力和專業(yè)素質(zhì)的提高。
學(xué)習(xí)遷移一般是指學(xué)習(xí)者已有的知識經(jīng)驗、技能等對另一種學(xué)習(xí)的影響。學(xué)習(xí)遷移是知識學(xué)習(xí)過程中普遍存在的。由數(shù)據(jù)結(jié)構(gòu)課程實驗到課程設(shè)計,是對數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識到綜合能力的一種自然過渡,這個過渡即為學(xué)習(xí)遷移。學(xué)生在課程學(xué)習(xí)過程中,如果能夠很好地應(yīng)用學(xué)習(xí)遷移,將有利于完善知識結(jié)構(gòu),收到舉一反三、觸類旁通的良好學(xué)習(xí)效果。可見,從數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識到數(shù)據(jù)結(jié)構(gòu)課程設(shè)計能力培養(yǎng),是一種學(xué)習(xí)遷移的過程。因而,在課程設(shè)計的教學(xué)實施過程中,學(xué)習(xí)遷移理論對提高教師的授課質(zhì)量和學(xué)生的學(xué)習(xí)效果起著非常重要的作用。
筆者對學(xué)習(xí)遷移基本理論進行了分析,并結(jié)合其在數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的實際教學(xué)實施過程中的體現(xiàn),闡述了如何有效應(yīng)用學(xué)習(xí)遷移理論來提高授課質(zhì)量和學(xué)生的學(xué)習(xí)效率。
1 學(xué)習(xí)遷移基本理論
學(xué)習(xí)遷移是指一種學(xué)習(xí)中學(xué)得的經(jīng)驗對另一種學(xué)習(xí)的影響。遷移的基本過程是一個概括出新舊學(xué)習(xí)本質(zhì)特征的過程。它是學(xué)習(xí)者運用已有的認知經(jīng)驗和技能,在對新的學(xué)習(xí)內(nèi)容進行分析概括的基礎(chǔ)上實現(xiàn)的。學(xué)習(xí)遷移有順向和逆向兩種,先前學(xué)習(xí)對后來學(xué)習(xí)的影響稱為順向遷移,反之則為逆向遷移。不論順向遷移還是逆向遷移,都有正負之分。正遷移指一種學(xué)習(xí)對另一種學(xué)習(xí)起促進作用,反之起阻礙作用則為負遷移。按照遷移的方向來劃分,可以分為水平遷移和垂直遷移。水平遷移指已習(xí)得的概念、規(guī)則或解決問題的方法等在同一抽象概括層次的新情境中的運用;垂直遷移指低級概念和規(guī)則向高級概念和規(guī)則的遷移。學(xué)習(xí)遷移理論主要包括以下幾種[2]。
(1)形式訓(xùn)練理論。該學(xué)說以官能心理學(xué)為理論依據(jù),認為通過一定的訓(xùn)練,可以發(fā)展心的官能,從而將其轉(zhuǎn)移到其他學(xué)習(xí)上去。
(2)相同要素理論。該理論認為原先的學(xué)習(xí)能夠遷移到新的學(xué)習(xí)中去的前提條件是兩種學(xué)習(xí)情境有相同的要素。并且相同要素越多,遷移的程度越高。
(3)泛化理論。泛化理論是指將在一種情境中得到的經(jīng)驗進行“泛化”并運用到另一種情境中去。因此在教學(xué)過程中,為使學(xué)生能夠掌握學(xué)習(xí)遷移,應(yīng)該讓學(xué)生學(xué)會思考泛化。
(4)轉(zhuǎn)化理論。支持該理論的心理學(xué)家認為學(xué)習(xí)遷移實際上是一個關(guān)系轉(zhuǎn)化的問題。產(chǎn)生遷移的原因,是由于兩者之間存在著相同的關(guān)系。我們平時強調(diào)通過理解而不是機械記憶來學(xué)習(xí)是因為理解可以轉(zhuǎn)化到各種情境中去,減少知識的錯誤運用。
(5)學(xué)習(xí)定勢理論。該理論指出遷移取決于通過練習(xí)而獲得的定勢或?qū)W習(xí)能力。通過練習(xí)某一種學(xué)習(xí)問題,可以幫助解決另一種不同的問題。
(6)認知遷移理論。該理論認為遷移的可能性取決于在記憶搜尋過程中遇到相關(guān)信息或技能的可能性。所以,如何增加學(xué)生在面臨實際問題時提取所學(xué)知識的可能性尤為重要。提取的可能性與交互聯(lián)結(jié)的數(shù)量直接有關(guān),所以任何增加交互聯(lián)結(jié)網(wǎng)絡(luò)的“豐富性”的教育方法,對增加遷移的可能性均是有利的。
2 基于學(xué)習(xí)遷移理論指導(dǎo)的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
依據(jù)前面對學(xué)習(xí)遷移基本理論的分析,以下將結(jié)合數(shù)據(jù)結(jié)構(gòu)課程設(shè)計在教學(xué)目標(biāo)、教學(xué)內(nèi)容與基本要求、題目設(shè)計、考核方式以及學(xué)生作品欣賞等各個環(huán)節(jié)的特點與問題,闡述學(xué)習(xí)遷移理論對數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的指導(dǎo)作用。
2.1 課程設(shè)計教學(xué)目標(biāo)
2.1.1 教學(xué)目標(biāo)
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)是為了將實際問題中所涉及的對象在計算機中表示出來并對它們進行處理。根據(jù)形式訓(xùn)練理論的觀點,學(xué)習(xí)技能的掌握是經(jīng)過反復(fù)訓(xùn)練達到的,學(xué)生對知識的理解程度和技能的熟練程度越高,正遷移的可能性越大。因此實踐教學(xué)環(huán)節(jié)非常重要。通過課程設(shè)計,一方面,使學(xué)生學(xué)會綜合分析研究計算機加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便為應(yīng)用涉及的數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲結(jié)構(gòu)及相應(yīng)的算法,并初步了解對算法的時間分析和空間分析技術(shù);另一方面,通過課程設(shè)計中的算法設(shè)計和上機實踐的訓(xùn)練,培養(yǎng)學(xué)生全面的數(shù)據(jù)抽象能力、綜合的程序設(shè)計能力等。通過此次課程設(shè)計主要達到如下目的。
(1)了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,掌握數(shù)組、鏈表、隊列、堆棧、樹、圖、查找、排序等基本數(shù)據(jù)結(jié)構(gòu),具備初步的獨立分析和設(shè)計能力。
(2)初步掌握軟件開發(fā)過程[3]的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基本方法和技能。
(3)提高獨立分析和解決問題的能力。
(4)訓(xùn)練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。
2.1.2 教學(xué)實驗中的遷移
教學(xué)實驗[4]側(cè)重于幫助學(xué)生詳細理解相應(yīng)章節(jié)的知識點,具有針對性強、目的明確等特點。同時幫助學(xué)生樹立起動手編程的信心,逐步提高學(xué)生對該章節(jié)所涉及算法的理解與動手能力。這是由基礎(chǔ)理論知識到編程實踐的一種遷移,是正遷移。我們以實驗1(基于線性表的學(xué)生信息管理)為例,該實驗要求學(xué)生重點掌握線性表的定義與線性表的基本操作,如建立、查找、插入和刪除等。其實驗內(nèi)容詳細地介紹了需要實現(xiàn)的每一個功能。同時,為了使動手能力差、基礎(chǔ)薄弱的學(xué)生也能快速地掌握編程技術(shù),教學(xué)實驗通常會給出一些代碼不完整的參考程序供他們參考,只需添加需要實驗的線性表功能的代碼即可。這樣,使學(xué)生能夠?qū)η懊鎸W(xué)習(xí)過的理論知識的理解更加清晰、深刻,有利于學(xué)生扎實地掌握理論知識。可見,這是后面編程實踐所獲得的經(jīng)驗對前面所學(xué)理論知識的一種遷移,是逆遷移。按照泛化理論,我們需要把一種情境中得到的經(jīng)驗進行“泛化”并運用到另一種情境中去,應(yīng)該讓學(xué)生學(xué)會思考泛化。為此,為了滿足編程能力強的學(xué)生的需求,實驗要求中除了必做題目外,還安排了選作內(nèi)容供他們選擇實現(xiàn),充分調(diào)動不同能力的學(xué)生的編程積極性。
與教學(xué)實驗不同,數(shù)據(jù)結(jié)構(gòu)課程設(shè)計強調(diào)的是學(xué)生綜合運用知識點與基礎(chǔ)算法,設(shè)計出較為復(fù)雜的用來解決實際問題的算法。題目要求往往只是提出對課程設(shè)計題目的描述,而非一條一條的具體功能,這就要求學(xué)生具有一定的分析問題的能力和學(xué)習(xí)遷移的能力,綜合運用所學(xué)知識解決題目中所描述的問題。所以,課程設(shè)計強調(diào)培養(yǎng)學(xué)生綜合運用知識來分析問題、解決問題的能力,這也是泛化理論的體現(xiàn)。
總之,課程設(shè)計的目標(biāo)[5]是使學(xué)生能將數(shù)據(jù)結(jié)構(gòu)課程中所學(xué)的基本知識融會貫通,綜合運用所學(xué)的知識解決相關(guān)的實際問題,能夠把所學(xué)知識(包括算法和結(jié)構(gòu))在計算機上用編程語言加以實現(xiàn),并且能夠根據(jù)實際需求創(chuàng)建自己的數(shù)據(jù)結(jié)構(gòu)和實現(xiàn)自己的算法。而學(xué)習(xí)遷移是實現(xiàn)這一目標(biāo)的有效途徑。只有在掌握好基礎(chǔ)理論知識的基礎(chǔ)上學(xué)會遷移,才能更好地解決問題、達成目標(biāo)。
2.2 課程設(shè)計的內(nèi)容及基本要求
合理安排課程設(shè)計的內(nèi)容才能充分發(fā)揮其遷移的功效。從學(xué)習(xí)遷移的角度來說,合理安排課程設(shè)計的內(nèi)容的標(biāo)準(zhǔn)就是使課程設(shè)計內(nèi)容與課堂教學(xué)內(nèi)容具有一定的關(guān)聯(lián)性和一致性,這有助于學(xué)生在做課程設(shè)計的過程中鞏固課堂所學(xué)知識,加深對知識的理解,重構(gòu)教學(xué)內(nèi)容的結(jié)構(gòu),為知識遷移提供很好的支撐。
課程設(shè)計的內(nèi)容既要遵循基本的授課內(nèi)容,又要從一定的高度上對基本內(nèi)容進行抽象與發(fā)展,使之能夠真實、準(zhǔn)確地反映出由基礎(chǔ)知識到綜合運用能力的遷移過程。因而本文中課程設(shè)計的內(nèi)容主要包括:①設(shè)計準(zhǔn)備:理解實習(xí)任務(wù),明確相關(guān)算法,搜集可用資源,熟悉實習(xí)環(huán)境。②方案設(shè)計:完成設(shè)計目標(biāo)、設(shè)計路線的確定,并進行模塊設(shè)計和任務(wù)分工。③代碼編寫:各模塊代碼編寫、模塊測試。④代碼測試:模塊組裝、整體測試。⑤設(shè)計報告:完成設(shè)計文檔,制作設(shè)計報告。
為了保證綜合、靈活運用基礎(chǔ)知識的遷移效果,課程設(shè)計有如下基本要求:首先,學(xué)生應(yīng)該獨立思考、獨立完成。在課程設(shè)計過程中各任務(wù)的設(shè)計和調(diào)試要求小組獨立完成,遇到問題可以討論,但不可以拷貝。其次,要做好上機準(zhǔn)備。每次上機前,要事先編制好準(zhǔn)備調(diào)試的程序,認真想好調(diào)試步驟和有關(guān)環(huán)境的設(shè)置方法,準(zhǔn)備好有關(guān)的文件。再次,按照課程設(shè)計的具體要求建立功能模塊,每個模塊要求按照以下幾個內(nèi)容認真完成,包括需求分析、概要設(shè)計、詳細設(shè)計、調(diào)試分析、課程設(shè)計總結(jié)。最后,課程設(shè)計結(jié)束后需要對課程設(shè)計結(jié)果進行檢查和演示,并提交程序源代碼和文檔文件、課程設(shè)計報告等內(nèi)容。
課程設(shè)計過程中的編程環(huán)節(jié)是從程序設(shè)計語言課程到數(shù)據(jù)結(jié)構(gòu)課程的另外一種重要的知識遷移,需要用面向程序或者面向?qū)ο蟮乃枷雭硗瓿蓴?shù)據(jù)結(jié)構(gòu)中線性表等基本的結(jié)構(gòu)定義以及操作。本文中課程設(shè)計需要重點注意的事項有:①注意備份源文件;②不要輕易刪除代碼,如需要修改,最好用注釋方法來代替刪除;③熟悉常用的調(diào)試技巧。
2.3 課程設(shè)計題目設(shè)計
為了促進學(xué)生正遷移學(xué)習(xí),教師要科學(xué)合理地設(shè)計課設(shè)的題目,要建立在學(xué)生主動、適度、適量、適時且形式多樣化的基礎(chǔ)上, 引導(dǎo)學(xué)生綜合利用所學(xué)知識和經(jīng)驗,深入思考分析問題,學(xué)以致用。按照形式訓(xùn)練理論,我們需要通過一定的訓(xùn)練進而發(fā)展學(xué)生心的官能,從而將其前面所學(xué)知識轉(zhuǎn)移到其他學(xué)習(xí)上去。為此,通過教學(xué)實驗內(nèi)容的訓(xùn)練,我們已經(jīng)訓(xùn)練了學(xué)生在基礎(chǔ)理論與基礎(chǔ)編程中的能力,這些經(jīng)驗為先前知識的轉(zhuǎn)移打下了堅實的基礎(chǔ)。按照泛化理論,我們將在一種情境中得到的經(jīng)驗進行“泛化”并運用到另一種情境中去,需要讓學(xué)生學(xué)會思考泛化。為此,與教學(xué)實驗的細化要求不同,我們所設(shè)計的課程設(shè)計題目主要是給出題目要求的概括性描述,之后是一些要求與提示,還會有一些對題目中個別語句的解釋,但不會給出參考的代碼,全憑學(xué)生自己的知識組成以及算法設(shè)計來完成題目要求。我們從泛化理論出發(fā),2011級數(shù)字媒體藝術(shù)專業(yè)的課程設(shè)計共8個題目,其中題目1~7具體給出所做題目的描述,同時為了發(fā)揮學(xué)生的學(xué)習(xí)積極性,允許學(xué)生自擬題目,給學(xué)生一定的自由發(fā)揮的空間,但是需要教師對自擬題目的難度以及實驗小組的組成進行一定的把關(guān)。
2.4 課程設(shè)計成績評定體系
課程設(shè)計成績評定體系是對學(xué)習(xí)遷移理論在課程設(shè)計中應(yīng)用的成果的一個重要體現(xiàn),因而需要我們更客觀、更公平地評價學(xué)生的實習(xí)成果。為了避免片面的評價,本文中課程設(shè)計將綜合考慮小組成員各自完成的任務(wù)與工作態(tài)度情況、機房中源代碼系統(tǒng)與PPT的演示與答辯情況、課程設(shè)計報告書的質(zhì)量等,請三位老師分別對上述項目分別打分,最終按照一定的權(quán)值進行綜合求和。為了體現(xiàn)編程實踐、報告在課程設(shè)計最終目標(biāo)中的知識遷移效果,規(guī)定源代碼演示未通過、未提交報告等情況記為不及格。
3 學(xué)習(xí)遷移效果展示
學(xué)生最終的作品是學(xué)習(xí)遷移理論應(yīng)用于課程設(shè)計成果的具體體現(xiàn)。課程設(shè)計過程中,每個小組對各自的題目進行了深入研究,從基礎(chǔ)知識向深度、廣度上進行探索與綜合,經(jīng)過團隊協(xié)作,完成了各自作品。我們選取了3個具有代表性的作品向大家展示。圖1展示了某小組學(xué)生完成的手機通訊錄系統(tǒng)界面,該系統(tǒng)具有大多數(shù)其他手機通訊錄系統(tǒng)所不具備的動態(tài)常用聯(lián)系人標(biāo)定功能。圖2展示了某小組學(xué)生完成的貪吃蛇游戲。該游戲通過MFC設(shè)計界面,通過鏈表組織貪吃蛇的結(jié)構(gòu),完成了貪吃蛇游戲的功能,但沒有處理蛇碰壁的情況。圖3展示了某小組學(xué)生完成的電梯模擬系統(tǒng)。該題目是學(xué)生自選題目,該系統(tǒng)可以自動模擬電梯的不同運行情況,同時考慮了用戶請求的優(yōu)先級問題。自選題目使學(xué)生充分發(fā)揮自己的主觀能動性,更好地將理論知識遷移到綜合設(shè)計能力上來。
4 課程設(shè)計分析
本次課程設(shè)計以學(xué)習(xí)遷移理論為指導(dǎo),為了調(diào)動學(xué)生的積極性,并適合不同學(xué)生的風(fēng)格和能力,這次課程設(shè)計共出了7個指定題目供學(xué)生選擇,如果學(xué)生有自己的想法,也可以自擬題目,充分發(fā)揮學(xué)生的主觀能動性,同時要求學(xué)生以軟件工程的要求來實現(xiàn)這次課程設(shè)計,從需求分析到概要設(shè)計,再到詳細設(shè)計,最終是調(diào)試分析。
從學(xué)生最終的作品來看,選擇《手機通訊錄功能模擬》的學(xué)生比較多,其次是《文章編輯系統(tǒng)》,其他題目選擇的人數(shù)較少,《教學(xué)計劃編制問題》無人選擇。這主要是因為《手機通訊錄功能模擬》題目與實驗1有很多相似之處,只要對實驗1做合理的改動以及擴充,即可完成手機通訊錄的功能。從學(xué)生課題完成情況看,絕大多數(shù)學(xué)生完成了課程設(shè)計的基本功能要求,一部分學(xué)生還綜合考慮了用戶界面、程序健壯性等因素,課題完成質(zhì)量較高。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計是在所學(xué)基礎(chǔ)知識之上,對數(shù)據(jù)結(jié)構(gòu)的深層次應(yīng)用,既引導(dǎo)學(xué)生深入熟悉編程技巧,又加深對課程知識的理解,這體現(xiàn)了學(xué)習(xí)遷移的過程。實踐證明,這在一定程度上激發(fā)了學(xué)生的積極性,有效提高了學(xué)生的編程能力,使得部分以前不怎么會編程的學(xué)生體會到了編程的樂趣。不過,還有一些學(xué)生并沒有找到自己編程的方法,對數(shù)據(jù)結(jié)構(gòu)的基本概念不是很清晰。這一方面與學(xué)生自身的編程基礎(chǔ)較為薄弱有關(guān),另一方面也是需要教師在指導(dǎo)過程中進一步加強基礎(chǔ)知識與編程環(huán)境之間的聯(lián)系,引導(dǎo)學(xué)生積極主動掌握學(xué)習(xí)遷移,并且能夠針對實驗中出現(xiàn)的問題及時進行一些專門講解。實際情況表明,這次課程設(shè)計不但使得學(xué)生可以充分了解算法設(shè)計,而且能使學(xué)生了解軟件工程的設(shè)計過程,為后續(xù)課程的進行提供一個好的開始。同時鍛煉了學(xué)生的學(xué)習(xí)遷移能力,對后續(xù)學(xué)習(xí)是非常有利的。
5 結(jié)語
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計是綜合運用所學(xué)的數(shù)據(jù)結(jié)構(gòu)理論知識與實驗實踐能力來增強與提高獨立分析問題、解決問題的有效手段,如何幫助學(xué)生快速、準(zhǔn)確地理解并掌握課程的理論知識,是課程設(shè)計的目的之一。而學(xué)習(xí)遷移理論正是這樣一種研究先驗知識與后續(xù)知識之間轉(zhuǎn)換關(guān)系的理論,這給數(shù)據(jù)結(jié)構(gòu)課程尤其是課程設(shè)計環(huán)節(jié)帶來了有力的指導(dǎo)。正因為如此,我們將學(xué)習(xí)遷移理論應(yīng)用于數(shù)據(jù)結(jié)構(gòu)課程設(shè)計。實驗結(jié)果表明,這次課程設(shè)計比較成功,取得了較好的效果,基本達到了增強數(shù)據(jù)結(jié)構(gòu)理論與提高編程能力的目的。
參考文獻:
[1] 嚴蔚敏, 李冬梅, 吳偉民. 數(shù)據(jù)結(jié)構(gòu)(C語言版)[M]. 北京: 人民郵電出版社, 2011.
[2] 施良方. 學(xué)習(xí)論[M]. 2版. 北京: 人民教育出版社, 2001.
[3] Ivar Jacobson Grady Booch James Rumbaugh. 統(tǒng)一軟件開發(fā)過程[M]. 周伯生, 馮學(xué)民, 樊東平, 譯. 北京: 機械工業(yè)出版社, 2002.
1 課程的地位與作用
《數(shù)據(jù)結(jié)構(gòu)》是計算機科學(xué)與技術(shù)專業(yè)的核心專業(yè)基礎(chǔ)課程,是計算機程序設(shè)計的重要理論和實踐基礎(chǔ),是計算機理論與技術(shù)的重要基石。《數(shù)據(jù)結(jié)構(gòu)》上承高級語言程序設(shè)計,下啟算法分析與設(shè)計,是計算機科學(xué)與技術(shù)人才素質(zhì)框架中的脊梁骨,對學(xué)生能力培養(yǎng)至關(guān)重要,向來是計算機本科教學(xué)的重中之重。調(diào)查表明已畢業(yè)的學(xué)生通過他們的工作實踐認為《數(shù)據(jù)結(jié)構(gòu)》是最有用的課程之一,這也從另一方面說明了該課程的重要性。
計算機科學(xué)與技術(shù)專業(yè)的培養(yǎng)目標(biāo)之一是掌握計算機科學(xué)與技術(shù)的基本理論、計算機軟/硬件基本知識及應(yīng)用技術(shù),《數(shù)據(jù)結(jié)構(gòu)》在培養(yǎng)目標(biāo)的實現(xiàn)中具有舉足輕重的作用,是理解計算機科學(xué)與程序開發(fā)技術(shù)的關(guān)鍵課程。作為一門重要的專業(yè)必修課程,《數(shù)據(jù)結(jié)構(gòu)》課程既是對以往課程的深入和擴展,也是為將來更加深入地學(xué)習(xí)其他專業(yè)課程打下基礎(chǔ)。課程中所學(xué)習(xí)的排序問題的算法,以及基本的樹、圖等數(shù)據(jù)結(jié)構(gòu),是計算機科學(xué)的基本功。B+樹等高級數(shù)據(jù)結(jié)構(gòu),也是數(shù)據(jù)庫、操作系統(tǒng)、編譯原理、計算機網(wǎng)絡(luò)等后續(xù)課程的基礎(chǔ)。《數(shù)據(jù)結(jié)構(gòu)》是計算機專業(yè)考研的統(tǒng)考課程,也是很多大賽(“藍橋杯”、ACM等)必涉及的知識。
《數(shù)據(jù)結(jié)構(gòu)》與其它課程關(guān)系如圖1所示。
圖1 《數(shù)據(jù)結(jié)構(gòu)》與其它課程關(guān)系
《數(shù)據(jù)結(jié)構(gòu)》在培養(yǎng)目標(biāo)中的作用如圖2所示。
圖2 《數(shù)據(jù)結(jié)構(gòu)》在培養(yǎng)目標(biāo)中的作用
2 課程的教學(xué)目標(biāo)與主要內(nèi)容
2.1 課程的教學(xué)目標(biāo)
學(xué)習(xí)本課程后,應(yīng)達到下列基本要求:
(1)理解數(shù)據(jù)結(jié)構(gòu)的基本概念;
(2)熟練掌握線性表、棧、隊列、樹、圖等常用數(shù)據(jù)結(jié)構(gòu)的基本運算的實現(xiàn)及應(yīng)用;
(3)熟練掌握排序和查找的常用算法及應(yīng)用;
(4)能夠?qū)λ惴ㄟM行時間復(fù)雜度度、空間復(fù)雜度的分析;
(5)培養(yǎng)學(xué)生分析數(shù)據(jù)、組織數(shù)據(jù)的能力,能夠根據(jù)實際問題來選擇合適的數(shù)據(jù)結(jié)構(gòu),設(shè)計有效的算法。
2.2 教材與主要參考資料
教材
耿國華《數(shù)據(jù)結(jié)構(gòu)(用C語言描述)》,高等教育出版社,2011年
教材選擇的依據(jù):
(1)該教材跟蹤技術(shù)發(fā)展需要,體系科學(xué),是“十一五”國家級規(guī)劃教材。
(2)該教材理論的闡述由淺入深、通俗易懂。
(3)該教材理論結(jié)合實際,配有大量的例題、習(xí)題與實習(xí)題。
主要參考資料
[1]嚴蔚敏,吳偉民《數(shù)據(jù)結(jié)構(gòu)(C語言版)》,清華大學(xué)出版社,2006年
[2]張銘,王騰蛟,趙海燕《數(shù)據(jù)結(jié)構(gòu)與算法》,高等教育出版社,2008年
[3]朱戰(zhàn)立《數(shù)據(jù)結(jié)構(gòu)――使用C語言(第4版)》,電子工業(yè)出版社,2009年
[4]王曉東《數(shù)據(jù)結(jié)構(gòu)(C語言版).》電子工業(yè)出版社,2007年
[5]西北大學(xué)數(shù)據(jù)結(jié)構(gòu)精品課程網(wǎng)站
http//:/datastr
[6]北大數(shù)據(jù)結(jié)構(gòu)與算法課程網(wǎng)站
http:///pkujpk/course/sjjg/
[7]洛陽理工學(xué)院數(shù)據(jù)結(jié)構(gòu)精品課程網(wǎng)站
http//:/sjjg
[8]洛陽理工學(xué)院數(shù)據(jù)結(jié)構(gòu)精品資源共享課程網(wǎng)站
http//:/ds
2.3 知識體系
《數(shù)據(jù)結(jié)構(gòu)》知識體系可分為分為三大塊,如圖3所示。
圖3 《數(shù)據(jù)結(jié)構(gòu)》知識體系
數(shù)據(jù)結(jié)構(gòu)課程的基本知識模塊是以數(shù)據(jù)的邏輯結(jié)構(gòu)為主線,順序介紹線性結(jié)構(gòu)(線性表、棧、隊列、串、數(shù)組、廣義表)、樹形結(jié)構(gòu)、圖結(jié)構(gòu)。在介紹每種數(shù)據(jù)結(jié)構(gòu)時,再討論其存儲結(jié)構(gòu)以及相關(guān)的算法。在介紹完基本的數(shù)據(jù)結(jié)構(gòu)及其存儲結(jié)構(gòu)和相關(guān)的算法后,介紹了兩種常用技術(shù):查找和排序。
3 課程教學(xué)內(nèi)容安排
3.1 課程重點、難點
重點:線性表、棧、隊列、二叉樹、圖典型數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)和操作的實現(xiàn)方法,各種典型的排序和查找算法思想。
難點:各種數(shù)據(jù)結(jié)構(gòu)的操作實現(xiàn)和應(yīng)用
第1章是對數(shù)據(jù)結(jié)構(gòu)課程的認識,基本概念比較多,概念要講清楚、準(zhǔn)確,第一章要通過豐富的例子講解如何分析算法時間復(fù)雜度,這是貫穿整門課程的內(nèi)容,也是本課程的一個難點,第2章是整個課程的重要基礎(chǔ),要講得十分詳細,為后面的章節(jié)打下良好的基礎(chǔ),第3章的棧與遞歸的實現(xiàn)是本書的一個難點,要通過例子講透,并且在第6章還要進一步地講遞歸到非遞歸的轉(zhuǎn)換。第四章內(nèi)容較簡單,而且學(xué)生在高級語言程序設(shè)計中學(xué)習(xí)過字符串,因此留給學(xué)生自學(xué),也可以培養(yǎng)學(xué)生的自學(xué)能力。第五章數(shù)組和廣義表一般講解即可。第6章的二叉樹要詳細講解,第7章的幾個關(guān)于圖的算法較難,要結(jié)合例子講解,第8章中的難點是平衡二叉樹的調(diào)整和B樹,要通過例子把算法的思想講清楚,使學(xué)生能實際操作。第9章要把各種排序的思想、特點講清楚,特別是較難的希爾排序、快速排序、堆排序、基數(shù)排序一定要結(jié)合實例講解。
3.2 課時分配
表1 總課時:72;理論授課:58,實驗:14
4 課程實踐環(huán)節(jié)
數(shù)據(jù)結(jié)構(gòu)是與實踐緊密結(jié)合的課程,學(xué)生學(xué)習(xí)的理論必須經(jīng)過大量的實踐才能更好的掌握,因此必須強化實踐教學(xué)。數(shù)據(jù)結(jié)構(gòu)實踐分兩部分:一部分是隨課程進行的實驗,另一部分是課程結(jié)束后為期一周的課程設(shè)計。通過合理、有效地設(shè)計上機題目,改進實驗考核方式,調(diào)動學(xué)生的積極性,啟發(fā)引導(dǎo)學(xué)生掌握基礎(chǔ)理論并能創(chuàng)新應(yīng)用,增強學(xué)生綜合運用有關(guān)知識的能力。
實驗內(nèi)容包括六個實驗項目,分別為:線性表的基本操作(2學(xué)時),棧的基本操作(2學(xué)時),隊列的基本操作(2學(xué)時),二叉樹的建立及遍歷(2學(xué)時),圖的遍歷的實現(xiàn)(2學(xué)時),宿舍管理查詢系統(tǒng)(4學(xué)時)。其中宿舍管理查詢系統(tǒng)實驗為三性實驗。
課程設(shè)計是課程結(jié)束后進行的很重要的實踐環(huán)節(jié),本課程課程設(shè)計給出14個題目,這些題目都是綜合性的,學(xué)生可任選一題,完成后要寫出課程設(shè)計報告。通過課程設(shè)計,使學(xué)生進一步理解和掌握所學(xué)各種基本知識,培養(yǎng)學(xué)生綜合運用所學(xué)的理論知識和方法獨立分析和解決問題的能力;訓(xùn)練學(xué)生用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進行軟件開發(fā),使學(xué)生具備軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。
學(xué)生完成實驗后,不僅要求學(xué)生提交高質(zhì)量的規(guī)范的實驗報告,還要引導(dǎo)學(xué)生互相交流,開闊視野。好的實驗作業(yè)要放到班級公共郵箱里和所有學(xué)生共享。
5 課程的建設(shè)情況
5.1 課程資源情況
該課程教學(xué)文件完備。通過多年的教學(xué),積累了必要的一些輔助教學(xué)資料(包括教學(xué)參考書、參考課件、聲像、影像等),并且使用效果良好。補充的學(xué)習(xí)資料有:
(1)教學(xué)網(wǎng)站:http:///sjjg/
http:///ds/
(2)搜集了大量探討數(shù)據(jù)結(jié)構(gòu)理論與算法、介紹學(xué)科前沿動態(tài)的中、英文學(xué)術(shù)論文和碩、博論文,對其分類整理后在課程教學(xué)網(wǎng)站上提供下載鏈接,以供學(xué)生深入研究、學(xué)習(xí);
(3)自編《數(shù)據(jù)結(jié)構(gòu)實驗指導(dǎo)書》;
(4)多媒體電子教案的紙制版和網(wǎng)絡(luò)版;
(5)數(shù)據(jù)結(jié)構(gòu)與課程實驗指導(dǎo)書的紙制版和網(wǎng)絡(luò)版;
(6)自編的算法演示器;
(7)Flash課件和Flash算法演示;
(8)圖書館內(nèi),國外優(yōu)秀的經(jīng)典教材。
5.2 實驗實習(xí)條件
所有實驗在計算機系機房進行,機房現(xiàn)有的實驗平臺功能齊全,課程中所涉及的實驗項目均可在平臺上完成。目前課程實驗大綱中所列的實驗開出率達到100%,實驗教學(xué)效果良好。
5.3 課程成果
該課程2010年被評為河南省級精品課程,2012河南省級精品資源課程。
6 教學(xué)設(shè)計
《數(shù)據(jù)結(jié)構(gòu)》是一門理論與實踐相結(jié)合的課程。由于理論的抽象性,學(xué)生難以建立起數(shù)據(jù)結(jié)構(gòu)的相應(yīng)算法概念,容易產(chǎn)生畏懼和茫然的情緒。因此教學(xué)中在積極引導(dǎo)學(xué)生、啟發(fā)學(xué)生,激發(fā)學(xué)生學(xué)習(xí)的積極性。教學(xué)以課堂講授為主,同時借助網(wǎng)絡(luò)教學(xué)平臺,拓展課堂講授的相關(guān)知識,便于同學(xué)自主學(xué)習(xí)、鞏固課堂所學(xué)內(nèi)容。另外,組織獨立習(xí)題課,針對學(xué)生作業(yè)中出現(xiàn)的典型問題進行深入探討。
在教學(xué)中要貫徹“以理論學(xué)習(xí)為主線,以課程實驗、課程設(shè)計為補充”的教學(xué)思想。
6.1 精心組織教學(xué)內(nèi)容
分析學(xué)生的需求和現(xiàn)實,同時緊緊抓住教學(xué)目的,參考相關(guān)院校的教材和教學(xué)計劃,取長補短,參考考研大綱、軟考大綱,對課程的內(nèi)容進行嚴格的篩選,刪除一些較深且應(yīng)用不是很廣泛的內(nèi)容,對于重點的內(nèi)容要精講、細講,而對于有些較簡單且與先修課程交叉的內(nèi)容(如字符串與數(shù)組),就粗講,甚至可以留給學(xué)生去自學(xué)。這樣重點突出,簡潔明了。在課程內(nèi)容的安排上由淺入深,循序漸進。對每種數(shù)據(jù)結(jié)構(gòu)都按三個層次來組織教學(xué)內(nèi)容,并且把這三個層次的思想貫穿于數(shù)據(jù)結(jié)構(gòu)教學(xué)的各個環(huán)節(jié)。第一個層次,基本概念、方法,這是最基本的內(nèi)容,學(xué)生必須掌握,在學(xué)生很好地掌握了這個層次的內(nèi)容后,可進入第二個層次,基本概念、知識的簡單應(yīng)用,這一層次是對基本概念、知識加深理解,這個層次學(xué)生必須達到。第三個層次就是基本概念、方法的深入應(yīng)用,把所學(xué)的知識、方法串起來靈活運用。要達到這個層次,需經(jīng)過大量的訓(xùn)練才行。
6.2 實現(xiàn)數(shù)據(jù)結(jié)構(gòu)課程與其先修和后續(xù)課程的無縫銜接
程序設(shè)計語言(如C語言)是本課程的一門非常重要的先修課程,數(shù)據(jù)庫原理、編譯原理、操作系統(tǒng)是該課程的后續(xù)課程,這些課程不能各自為政,而要無縫銜接,教這些課程的老師要互相交流,這樣在講程序設(shè)計語言時可以有的放矢的把和數(shù)據(jù)結(jié)構(gòu)聯(lián)系緊密的內(nèi)容預(yù)先告知學(xué)生,這樣學(xué)生就會對相關(guān)知識印象深刻,到數(shù)據(jù)結(jié)構(gòu)課中就很容易用的得心應(yīng)手。在數(shù)據(jù)結(jié)構(gòu)課中講到各種后續(xù)課程中用到的數(shù)據(jù)結(jié)構(gòu)時也告訴學(xué)生,并且在后續(xù)課程中用到相關(guān)數(shù)據(jù)結(jié)構(gòu)時提醒學(xué)生這是這種數(shù)據(jù)結(jié)構(gòu)在本課程中的應(yīng)用。這樣使學(xué)生的知識一脈相承,使學(xué)生在學(xué)習(xí)各門課程時把知識融會貫通。
6.3 精講多練,加強實踐環(huán)節(jié),培養(yǎng)學(xué)生分析問題解決問題的能力
數(shù)據(jù)結(jié)構(gòu)既有大量的理論又是實踐性很強的課程,學(xué)生要很好地掌握這門課,必須要有一定的理論知識,又要經(jīng)過大量的上機實踐。因此,針對應(yīng)用型本科的特點,在教學(xué)過程中,即注重理論,又重視實踐,加大上機實踐的力度。實踐由與理論課同時進行的上機實驗和理論課講授完畢后的課程設(shè)計兩部分組成。對所學(xué)的每一部分內(nèi)容都要要求學(xué)生完成相應(yīng)的實驗習(xí)題。整個實踐過程要結(jié)合教學(xué)進度與學(xué)生的實際情況,制定實踐的內(nèi)容。每部分的實驗習(xí)題必須精心挑選,和上述三個層次對應(yīng),分為基礎(chǔ)與驗證型實驗、設(shè)計與綜合型實驗,開發(fā)與創(chuàng)新型實驗。既要把基本知識掌握好,又要會靈活運用。基礎(chǔ)與驗證型實驗是基本的、較簡單的題目,主要結(jié)合課堂理論教學(xué)內(nèi)容展開,學(xué)生可以對在課堂上學(xué)到的基本算法進行驗證;設(shè)計與綜合型實驗是具有挑戰(zhàn)性的較難的新穎有趣的題目,讓學(xué)生充分利用所學(xué)的理論知識進行相對較復(fù)雜的應(yīng)用設(shè)計,培養(yǎng)學(xué)生綜合能力;開發(fā)與創(chuàng)新型實驗培養(yǎng)學(xué)生的創(chuàng)新意識,提高綜合能力和創(chuàng)新實踐能力。
6.4 多樣化的教學(xué)方法
6.4.1 啟發(fā)式教學(xué)
教師主要起引導(dǎo)的作用,激發(fā)學(xué)生的學(xué)習(xí)興趣,發(fā)揮學(xué)生的學(xué)習(xí)積極性,與學(xué)生進行互動,鼓勵學(xué)生對教學(xué)內(nèi)容提出問題,師生共同討論,提高教學(xué)和學(xué)習(xí)水平。鼓勵學(xué)生多動腦子進行思考,在學(xué)習(xí)過程中不拘于以往的解法,對同一個問題可以提出不同的解法,深化對問題的理解。另外還要強調(diào)學(xué)生自己學(xué)會對知識的總結(jié)、梳理、推演和挖掘。總結(jié)是教學(xué)中一個非常重要的環(huán)節(jié),不可忽視。通過對所學(xué)內(nèi)容的總結(jié)、梳理、推演和挖掘,理清內(nèi)容的內(nèi)在聯(lián)系,使知識條理化、系統(tǒng)化,加強對知識的理解和掌握,培養(yǎng)學(xué)生的歸納總結(jié)能力和思維創(chuàng)造能力,對所學(xué)內(nèi)容提煉出精華的東西。(下轉(zhuǎn)第260頁)
(上接第167頁)6.4.2 對比式教學(xué)
對同一問題,引導(dǎo)學(xué)生從不同的角度去思考,找出多種方法來解決。比如,在解決約瑟夫環(huán)問題時,可以采用循環(huán)鏈表作存儲結(jié)構(gòu),或采用線性表的順序存儲結(jié)構(gòu),也可以采用數(shù)組作存儲結(jié)構(gòu)。這種對同一問題尋找不同算法實現(xiàn)的教學(xué)方式,有效地開闊了學(xué)生的思路,同時通過對不同算法的比較,加深了學(xué)生對算法的理解和掌握。
6.4.3案例教學(xué)
通過實例引入知識點。比如講最小生成樹可以通過城市間建立通信聯(lián)絡(luò)網(wǎng)為例引入最小生成樹及其求解算法,再比如講最短路徑可以通過去旅游選擇最短路徑為例引入最短路徑及其求解方法。
6.5 把課程與考研、軟考、相關(guān)競賽有機的結(jié)合起來
數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)考研和軟考的必考科目,在教學(xué)過程中有意識地把考研和軟考引入教學(xué)中,使學(xué)生學(xué)完本課程后能夠從容應(yīng)對考研和軟考中的數(shù)據(jù)結(jié)構(gòu)題目。組織和鼓勵學(xué)生參加程序員,高級程序員證書考試,輔導(dǎo)學(xué)生參加各種編程競賽比如ACM大賽。
7 考核方法
要加強平時的學(xué)習(xí)過程管理,不定時地進行一些隨堂的小測試,課堂提問等。考試以學(xué)生完成日常作業(yè)和實驗環(huán)節(jié)為必要條件,期末考試采用筆試方式。成績評定由三部分組成:期末考試占總成績的60%,平時成績占總成績的20%,實驗占總成績的20%,綜合考核學(xué)生該科成績。
8 結(jié)語
《數(shù)據(jù)結(jié)構(gòu)》對計算機科學(xué)與技術(shù)專業(yè)的學(xué)生來說是非常重要的課程,組織好教學(xué),使學(xué)生通過該課程的教學(xué),很好地掌握數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識,為今后的學(xué)習(xí)奠定良好的基礎(chǔ)是非常重要的。
MU Cui-xia
(China Women’s University, Beijing 100101, China)
Abstract:On the basis of analyzing the present status of the practice teaching of data structures in China Women’s University, the teaching reform and adjustment measures for the practical teaching in recent years are introduced. And the key points of future reform are pointed out..
Key words:Data Structures; practice teaching; hierarchical teaching; Micro-Course Video
1 引言
數(shù)據(jù)結(jié)構(gòu)課程是計算機科學(xué)與技術(shù)專業(yè)的專業(yè)基礎(chǔ)課和核心課,也是計算機程序設(shè)計的重要理論和實踐基礎(chǔ),其學(xué)習(xí)效果直接影響到學(xué)生的數(shù)據(jù)抽象能力和程序設(shè)計能力[1]。數(shù)據(jù)結(jié)構(gòu)實踐課與理論課相輔相成,是學(xué)生驗證、掌握和應(yīng)用數(shù)據(jù)結(jié)構(gòu)理論的重要途徑[2]。,但是課程特點、學(xué)生的整體素質(zhì)水平和基本程序設(shè)計能力等多因素影響了實踐教學(xué)進度和效果,進而影響了整個課程的教學(xué)效果。
2 數(shù)據(jù)結(jié)構(gòu)實踐教學(xué)現(xiàn)狀
1)首先,要客觀地認識到,不同層次高校的學(xué)生整體素質(zhì),尤其是學(xué)習(xí)能力確實存在一定差距。只有坦然地承認差距,才能認真、耐心地了解學(xué)生學(xué)習(xí)過程中的困難和需求,才能坦然地采取一些雖不夠“高大上”,卻符合教學(xué)對象實際情況的教學(xué)措施,從而實實在在地提高教學(xué)質(zhì)量。
2)數(shù)據(jù)結(jié)構(gòu)教學(xué)是在第3學(xué)期,學(xué)生在第2學(xué)期剛學(xué)完C程序設(shè)計基礎(chǔ)。但學(xué)生在C程序設(shè)計基礎(chǔ)課程中主要學(xué)習(xí)和接觸的是簡單數(shù)據(jù)類型和單個函數(shù)程序,側(cè)重于基本語法學(xué)習(xí),而對數(shù)據(jù)結(jié)構(gòu)實踐中大量用到的頭文件、結(jié)構(gòu)體、指針、遞歸、多個函數(shù)的定義調(diào)用及在主函數(shù)里測試等實踐得相對少,理解較淺。因而對于數(shù)據(jù)結(jié)構(gòu)課程,不少學(xué)生覺得上課能聽懂,上機時無從下手或者程序錯誤很多。
3)傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)實踐教學(xué)形式,教師布置實驗任務(wù),適當(dāng)指導(dǎo),學(xué)生獨立完成,然后由教師驗收。這種方法的優(yōu)點是能夠充分發(fā)揮學(xué)生在算法設(shè)計方面的主觀能動性,不足是數(shù)據(jù)結(jié)構(gòu)設(shè)計和程序設(shè)計的難度較大,學(xué)生可能會感到無從下手,教師進行指導(dǎo)難度較大,實踐進度和效果不好控制[2-3]。
4)教材的選擇上,最初選擇了大部分高校采用的經(jīng)典教材嚴蔚敏C語言版,也是考慮到考研參考書目需求。在教學(xué)過程中,也發(fā)現(xiàn)教材不適合我們學(xué)生的實際情況,比如類C的算法描述,使得程序設(shè)計思想和實踐能力還不太成熟的學(xué)生在理解上有困難,在實踐時覺得難以開始[4]。
5)另外,新實施的教學(xué)計劃中課時減少也是一大挑戰(zhàn),需要對理論教學(xué)內(nèi)容和實踐內(nèi)容進行調(diào)整,首先抓好數(shù)據(jù)結(jié)構(gòu)的基本和重點內(nèi)容,而不能面面俱到。
3 數(shù)據(jù)結(jié)構(gòu)實踐教學(xué)改革和調(diào)整措施
在具體分析數(shù)據(jù)結(jié)構(gòu)實踐教學(xué)現(xiàn)狀的基礎(chǔ)上,可增設(shè)C程序課程設(shè)計,加強基礎(chǔ)知識實踐要求,調(diào)整課程大作業(yè)安排,發(fā)掘貼近實際案例和知識背后的故事,靈活運用微課等措施,進一步增強學(xué)生實踐積極性,提高實踐教學(xué)質(zhì)量。
3.1增設(shè)C程序課程設(shè)計環(huán)節(jié),彌補課程銜接問題
為了進一步提高學(xué)生動手編程實踐能力,一定程度上解決因?qū)W生基礎(chǔ)薄弱導(dǎo)致的課程銜接問題,可增設(shè)兩周共16學(xué)時的C程序課程設(shè)計。
在數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)中,學(xué)生覺得在理論課上算法思想能聽明白,一到上機就感覺無從下手;覺得代碼出錯誤時,調(diào)試修改難。這說明三方面有待加強:一是從分析問題到給出解決問題算法步驟的能力,二是從理清算法步驟對應(yīng)到編寫源代碼的能力,三是程序調(diào)試實踐能力。因此,在此課程設(shè)計環(huán)節(jié)中要加強問題分析訓(xùn)練,根據(jù)給出的問題,分析出解決的主要思路,進而給出細化的偽代碼或者流程圖。要加強編碼和調(diào)試訓(xùn)練,學(xué)生根據(jù)細化流程圖編寫出源代碼,調(diào)試測試程序。因此,教學(xué)中采取具體改革措施如下:
1)時間和內(nèi)容安排:在第3學(xué)期的前兩周,開展C程序課程設(shè)計,數(shù)據(jù)結(jié)構(gòu)從第3周開始。結(jié)合多年來的教學(xué)經(jīng)驗,針對學(xué)生上學(xué)期C程序設(shè)計實踐的薄弱點和數(shù)據(jù)結(jié)構(gòu)實踐的具體需要,專門編寫了課程設(shè)計指導(dǎo)書。為了進一步強化學(xué)生編碼規(guī)范,指導(dǎo)書中給出了明確的代碼書寫要求和編碼原則,在實踐過程中進行督促并納入考核點。為了讓學(xué)生復(fù)習(xí)和掌握基礎(chǔ)的知識要點,并能靈活運用在實踐案例中,設(shè)計了基礎(chǔ)和提高層次的例題和實訓(xùn)題目。在例題中強調(diào)算法分析,采用偽代碼或者流程圖進行算法分析訓(xùn)練,并給出參考源碼。在掌握例題的基礎(chǔ)上,要求學(xué)生獨立完成實訓(xùn)題目。涉及的知識要點包括輸入輸出、常用數(shù)據(jù)類型和函數(shù)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)、數(shù)組、函數(shù)、結(jié)構(gòu)體、指針以及文件等。然后進行分組合作完成一個綜合課程設(shè)計,讓學(xué)生從軟件開發(fā)的角度開始分析問題、解決問題,教師對開發(fā)過程進行適當(dāng)指導(dǎo)。另外,指導(dǎo)書中給出了兩個完整案例給學(xué)生參考,拓展案例由小到大、由?\入深,使設(shè)計的功能越來越完善。指導(dǎo)書努力做到幫助學(xué)生從低到高的逐步提高編程和動手能力。
2)實踐考核方式:以考核方式引導(dǎo)整個實踐過程。考核總成績由基礎(chǔ)練習(xí)(例題和實訓(xùn)題)和綜合課程設(shè)計兩部分組成。根據(jù)銜接數(shù)據(jù)結(jié)構(gòu)課程教學(xué)需要以及學(xué)生的具體學(xué)習(xí)基礎(chǔ)情況,為了最大程度調(diào)動學(xué)生實踐積極性和能動性,基礎(chǔ)練習(xí)比例從40%逐步調(diào)整到70%,課程設(shè)計比例從60%調(diào)整到30%;從只有綜合課程設(shè)計答辯,調(diào)整為當(dāng)前的基礎(chǔ)練習(xí)也進行抽查答辯,答辯內(nèi)容包括設(shè)計思想、代碼分析、結(jié)果分析、經(jīng)驗體會等,進一步突出基礎(chǔ)的重要性。四次共16節(jié)課中都明確給出任務(wù)清單,并及時了解每次課的任務(wù)完成情況,針對具體問題及時集中或者個別指導(dǎo)。考慮到實踐內(nèi)容較多,基礎(chǔ)練習(xí)答辯一般安排在第2和3周,另外由于跟數(shù)據(jù)結(jié)構(gòu)內(nèi)容的連貫性,答辯可適當(dāng)占用前2周數(shù)據(jù)結(jié)構(gòu)上機時間和課外時間。但是,綜合課程設(shè)計的答辯會適當(dāng)延長到第5周,為了促進分組合作的有效性,每個人對合作都要負責(zé)任,采取當(dāng)天隨機抽取一人負責(zé)答辯的方式。另外,下一步計劃嘗試基礎(chǔ)練習(xí)采取2人一組,共同討論分析完成,以應(yīng)對任務(wù)多時間短、基礎(chǔ)薄弱學(xué)生壓力大等問題。還將設(shè)計細化的課程教學(xué)效果調(diào)查問卷,深入了解學(xué)生需求,調(diào)整教學(xué)內(nèi)容和方式等。
3.2在數(shù)據(jù)結(jié)構(gòu)教學(xué)中不斷加強基礎(chǔ)知識的上機實踐要求
考慮到學(xué)生的實際情況,在課堂教學(xué)中主要采取源碼形式來講解各種結(jié)構(gòu)和算法(線性表、棧、隊列、二叉樹、查找、排序等)的實現(xiàn),基礎(chǔ)實踐就是要求編寫函數(shù)代碼實現(xiàn)并在主函數(shù)中測試各種數(shù)據(jù)結(jié)構(gòu)的基本算法,完成后提交源碼即可。為了夯實基礎(chǔ)知識,提高基礎(chǔ)編程能力,不斷調(diào)整對基礎(chǔ)知識實踐的要求,加強對基礎(chǔ)知識進行復(fù)習(xí)的書面作業(yè)要求,重要基礎(chǔ)知識點都留書面作業(yè),將書面作業(yè)成績計入平時成績,并提高分值比例,這樣可以引導(dǎo)學(xué)生重視并加強。然后,將基礎(chǔ)知識的實踐作業(yè)提交情況和抽查答辯情況都計入平時成績,并調(diào)整分值比例。通過期末考試試卷平均成績能較明顯看到重視基礎(chǔ)的效果。另外,學(xué)生學(xué)習(xí)基礎(chǔ)和能力確實存在差異,明確分層要求哪些是必須掌握的基礎(chǔ),哪些是可以擴展選做的,也是很有必要的[3-4]。
3.3調(diào)整課程大作業(yè)的安排和要求,讓不同基礎(chǔ)和能力的同學(xué)都能有所收獲[3]
在數(shù)據(jù)結(jié)構(gòu)教學(xué)過程中,會有同學(xué)疑問,學(xué)了數(shù)據(jù)結(jié)構(gòu)到底有什么用。雖然概論一章曾經(jīng)講授過一些實例,但終究不如自己實踐體驗來得深刻。通過課程大作業(yè),利用掌握的基礎(chǔ)知識,實現(xiàn)一個貼近生活的實例,是加深理解和提高能力的有效途徑。利用堆棧實現(xiàn)迷宮游戲,很多同學(xué)答辯完后表示很有成就感,但也確實經(jīng)歷了克服困難的過程,而這一克服困難逐步解決問題的過程,也正是學(xué)生能力提高最快的階段。但也不可避免地出現(xiàn)了問題,比如基礎(chǔ)比較弱的同學(xué),完成基礎(chǔ)練習(xí)都很吃力,大作業(yè)就會覺得太難,最后效果也就不理想。因此,在大作業(yè)的難度設(shè)置上,首先要考慮大部分同學(xué)的能力情況,還可以考慮有適當(dāng)難度差異的題目供學(xué)生選擇。同時,如何避免學(xué)生趨向選擇小難度以及考核公平性,這是需要繼續(xù)探討的問題[5]。
這幾年教學(xué)中,有個思路調(diào)整,就是首先夯實基礎(chǔ)、抓好主線,在此基礎(chǔ)上進行拓展。比如,有學(xué)生在大作業(yè)答辯過程中,能很清晰表達算法思想、分析代碼等,但平時基礎(chǔ)練習(xí)卻做得不好,期末考試成績也不理想。因此,課程大作業(yè)在總成績中占分比例調(diào)整降低。另外,為了滿足基礎(chǔ)好的同學(xué)的學(xué)習(xí)需求,可以適當(dāng)提供完整的有趣或者貼近生活的擴展案例代碼,進行讀代碼這種形式的學(xué)習(xí),也可提供同學(xué)間分享交流機會。
3.4小舉措增強學(xué)生自信心,提高學(xué)習(xí)積極性
1)在教學(xué)中多從正面引導(dǎo)和肯定,增強學(xué)生自信心。如果學(xué)生有抵觸或者畏難情緒,肯定會影響學(xué)生的學(xué)習(xí)效果。教師在教學(xué)中確實需要正視學(xué)生的學(xué)習(xí)基礎(chǔ)和能力的現(xiàn)實情況,必須承認不同層次學(xué)校的學(xué)生之間學(xué)習(xí)基礎(chǔ)和能力差距的存在,才能理直氣壯地安排合適的教學(xué)內(nèi)容和方式方法。作為中華女子學(xué)院唯一的工科系,較大比例學(xué)生不是第一志愿入學(xué)計算機專業(yè)。經(jīng)過一年的學(xué)習(xí)時間,每位學(xué)生對計算機專業(yè)了解和接受程度不同,大學(xué)二年級更是關(guān)鍵的一年。因此,老師在實踐教學(xué)過程中更需要細致的情緒關(guān)懷,及時了解學(xué)生在實踐過程中碰到問題,給予積極回應(yīng)或幫助。尤其在學(xué)生學(xué)習(xí)困難或者壓力大時,更要理解和尊重,耐心疏解,正面引導(dǎo),具體指導(dǎo),多正面肯定每次哪怕小小進步。同時,在教學(xué)進度安排上要考慮整體學(xué)生情況,抓牢主線夯實基礎(chǔ)為先,并注意教學(xué)內(nèi)容的螺旋式進展,這樣可以一定程度上減小學(xué)生心理壓力,進而增強自信心[4]。
2)聯(lián)系實際應(yīng)用,,關(guān)注技術(shù)背后的故事,激發(fā)學(xué)生學(xué)習(xí)興趣。比如,實現(xiàn)了隊列的基本操作之后,帶著學(xué)生一起分析和實現(xiàn)醫(yī)院就診排隊?wèi)?yīng)用,加深對隊列邏輯結(jié)構(gòu)特點的理解以及數(shù)據(jù)結(jié)構(gòu)在解決較復(fù)雜問題中的應(yīng)用。實現(xiàn)堆棧的基本操作之后,帶著學(xué)生先玩迷宮游戲,再一起分析利用堆棧如何實現(xiàn)走迷宮。在講赫夫曼編碼前,先引入赫夫曼當(dāng)初發(fā)明赫夫曼編碼的背景故事,引起學(xué)生的好奇心和求知欲。類似這些小舉措?yún)s可以激發(fā)學(xué)生的學(xué)習(xí)興趣。
3)一起?I造分享、合作、互助和積極的學(xué)習(xí)氛圍。鼓勵學(xué)生在實踐過程中多討論,大作業(yè)合作完成,遇到困難互相幫助。發(fā)現(xiàn)有優(yōu)化算法的例子,老師及時表揚并讓學(xué)生跟大家一起分享討論,從而營造積極的集體學(xué)習(xí)氛圍。
3.5發(fā)揮微課在數(shù)據(jù)結(jié)構(gòu)實踐教學(xué)中作用
互聯(lián)網(wǎng)+時代的教育改革,將以學(xué)生和學(xué)習(xí)為中心,創(chuàng)造性地利用信息技術(shù),提高教與學(xué)的效率,改善教與學(xué)的體驗,更好地滿足個性化的學(xué)習(xí)需求。“翻轉(zhuǎn)課堂”模式中,學(xué)生在課外通過看視頻講座、閱讀功能增強的電子書等形式,自主規(guī)劃學(xué)習(xí)內(nèi)容、學(xué)習(xí)節(jié)奏、風(fēng)格和呈現(xiàn)知識的方式來完成知識的學(xué)習(xí)。而在課堂上教師答疑解惑,有更多的時間與每個人交流,學(xué)生之間也可以討論,可以開展知識運用的實驗實踐等,最大程度地滿足學(xué)生的個性化學(xué)習(xí)需要。微課是實現(xiàn)“翻轉(zhuǎn)課堂”教學(xué)組織形式的一種常用的課件設(shè)計方案,它基于學(xué)科的核心知識點設(shè)計而成,以短小教學(xué)視頻為核心的、具有明確教學(xué)環(huán)節(jié)的結(jié)構(gòu)化和微型化在線教學(xué)課件。基于微課的翻轉(zhuǎn)課堂教學(xué)模式能更好地做到分層教學(xué)、因材施教,而且更有利于學(xué)生的個性發(fā)展。
分析女院計算機專業(yè)學(xué)生的具體情況,結(jié)合數(shù)據(jù)結(jié)構(gòu)課程本身的特點,完全實現(xiàn)翻轉(zhuǎn)課堂難度極大,但是將微課作為傳統(tǒng)課堂的一種延伸和補充,將會更好地滿足學(xué)生的學(xué)習(xí)需求,改善教學(xué)效果。在算法設(shè)計實踐過程中,最容易發(fā)現(xiàn)學(xué)生的不同學(xué)習(xí)能力和需求,也更適宜開展微課應(yīng)用,也利于教師不斷總結(jié)和完善重點和難點的教學(xué)方法方式[6-7]。比如稍慢于實踐進度的,有疑問可通過微?n進行回顧,自行安排學(xué)習(xí)和實踐進度。快于實踐進度的,可通過補充視頻自學(xué)來加大實踐力度,拓展學(xué)習(xí)和實踐內(nèi)容。
《數(shù)據(jù)結(jié)構(gòu)》是計算機科學(xué)與技術(shù)專業(yè)的必修課之一,是一門綜合性的專業(yè)基礎(chǔ)課和專業(yè)核心課程,而且正逐步發(fā)展成為眾多理工專業(yè)的熱門選修課。通過本課程的學(xué)習(xí),能使學(xué)生熟練掌握如何合理地組織數(shù)據(jù)、有效地存儲和處理數(shù)據(jù),正確地設(shè)計算法以及對算法的分析和評價等知識。它是學(xué)習(xí)操作系統(tǒng)、編譯原理、數(shù)據(jù)庫原理等計算機專業(yè)核心課程的基礎(chǔ),掌握好這門課程的內(nèi)容,是學(xué)習(xí)計算機其他相關(guān)課程的必備條件。因此,該課程在專業(yè)建設(shè)的地位十分重要。
《數(shù)據(jù)結(jié)構(gòu)》課程體系不斷發(fā)展,傳統(tǒng)的教學(xué)內(nèi)容和教學(xué)方法已落后于時代的發(fā)展和市場經(jīng)濟的需要,作為以應(yīng)用型本科人才培養(yǎng)為目標(biāo)的高等學(xué)校,如何針對計算機科學(xué)與技術(shù)專業(yè)學(xué)生就業(yè)難的特點,利用有限的教學(xué)課時,讓學(xué)生接觸到較新的理論和技術(shù),同時提高學(xué)生對數(shù)據(jù)結(jié)構(gòu)理論的掌握能力,并且能利用數(shù)據(jù)結(jié)構(gòu)理論進行實踐,培養(yǎng)創(chuàng)新能力和自主學(xué)習(xí)能力,使學(xué)生畢業(yè)后能盡快適應(yīng)就業(yè)市場的需要,是一個急待解決的問題。
而當(dāng)前《數(shù)據(jù)結(jié)構(gòu)》課程的教學(xué)存在以下問題:①教學(xué)內(nèi)容跟不上計算機技術(shù)的快速發(fā)展,教材沒有從理論、抽象和設(shè)計三種形態(tài)的高度來組織教學(xué)內(nèi)容,理論性強,實踐性弱。②教學(xué)方法單一,不能使學(xué)生掌握本學(xué)科系統(tǒng)分析、解決問題的基本科學(xué)方法。③教學(xué)手段的落后,只通過PPT講稿向?qū)W生講解教學(xué)內(nèi)容。④教學(xué)實踐設(shè)置側(cè)重于單一知識點的訓(xùn)練,與實際應(yīng)用脫節(jié)。
通過教學(xué)改革,以上問題才能得到解決。一方面,使教師教學(xué)和教研水平得到提高;另一方面,使學(xué)生掌握最新的學(xué)科知識及對知識的靈活運用能力及實踐動手能力,為將來的進一步深造打下良好的基礎(chǔ),所以《數(shù)據(jù)結(jié)構(gòu)》課程的教學(xué)改革勢在必行。
《數(shù)據(jù)結(jié)構(gòu)》是計算機科學(xué)與技術(shù)專業(yè)的主干課程,遵循應(yīng)用型本科院校的辦學(xué)宗旨,不斷更新課程內(nèi)容,改進教學(xué)方法,加強學(xué)生實踐能力和創(chuàng)新能力的培養(yǎng),從而提高學(xué)生素質(zhì)的教學(xué)改革思想,構(gòu)建課程體系。改革主要分以下幾方面:
一、吸取國外教材的優(yōu)點,對教學(xué)大綱內(nèi)容進行調(diào)整
刪減必要性不大、陳舊過時的內(nèi)容,如廣義表、多維數(shù)組、串的基本內(nèi)容等,逐步增加了反映學(xué)科發(fā)展趨勢的新內(nèi)容,如生物信息計算、各類搜索引擎中常用的數(shù)據(jù)結(jié)構(gòu)和算法等,還增加許多典型的數(shù)據(jù)結(jié)構(gòu)的算法與應(yīng)用,如跳表、優(yōu)先隊列、B-樹等內(nèi)容。重新修訂現(xiàn)有的教材和教學(xué)大綱,保持教學(xué)內(nèi)容具有先進性、科學(xué)性。同時考慮到與其他課程的銜接問題,進行雙語教學(xué),并且申請校級優(yōu)秀課,以此促進教學(xué)改革的進行。
二、教學(xué)方法和手段改革上,采用面向問題求解的教學(xué)方法
從科研工作或現(xiàn)實生活中的大量實際問題入手,引導(dǎo)學(xué)生主動探求答案的積極性。并依托學(xué)校的網(wǎng)絡(luò)建立《數(shù)據(jù)結(jié)構(gòu)》教學(xué)平臺,提供豐富的《數(shù)據(jù)結(jié)構(gòu)》教學(xué)資源,包括高質(zhì)量的多媒體課件,算法動態(tài)演示系統(tǒng),授課內(nèi)容,教案,大綱,參考文獻,疑問解答等等。全方位地為學(xué)生提供學(xué)習(xí)方便,與學(xué)生進行網(wǎng)絡(luò)互動,學(xué)生隨時有問題都可以通過網(wǎng)絡(luò)進行求解,從而極大地吸引了學(xué)生的學(xué)習(xí)興趣,激發(fā)了學(xué)生學(xué)習(xí)的積極性和主動性。
三、建立高素質(zhì)教師隊伍
由于《數(shù)據(jù)結(jié)構(gòu)》技術(shù)發(fā)展飛速,建立起一支穩(wěn)定的、高素質(zhì)的《數(shù)據(jù)結(jié)構(gòu)》教師及實驗教師隊伍,這也是提高《數(shù)據(jù)結(jié)構(gòu)》實驗及理論教學(xué)質(zhì)量的關(guān)鍵,從多個渠道解決了師資缺乏的問題,從而使教師的理論和實踐操作水平大大提高。
為了提高教師的指導(dǎo)水平以利于進一步的培養(yǎng)學(xué)生的實踐動手能力,同時能夠使理論課教師通過對實驗的掌握更好的講授和體會理論課的教學(xué),每隔一段課程組開培訓(xùn)和研討會,討論課程內(nèi)容的設(shè)置及實驗和課程設(shè)計的內(nèi)容安排問題。課程組所有成員積極提出有效合理的改善方案,使課程的發(fā)展穩(wěn)固進行。無論是主講教師還是實驗教師均在討論中有所提高。同時在講授有關(guān)實驗內(nèi)容時更準(zhǔn)確、更有自信,避免了在出現(xiàn)問題時無法解決的尷尬局面,進一步激發(fā)學(xué)生的學(xué)習(xí)興趣,培養(yǎng)了學(xué)生應(yīng)用能力,達到了教學(xué)要求,而且對其它課程的教學(xué)具有深遠的意義。
四、在實踐環(huán)節(jié)教學(xué)方面,以創(chuàng)新能力培養(yǎng)為目標(biāo),進行實踐環(huán)節(jié)的教學(xué)改革
詳細分為以下三點:
1.以學(xué)生為出發(fā)點進行調(diào)研選擇合適的實驗項目
從科研和實際問題選題,編寫實驗指導(dǎo)書和課程設(shè)計指導(dǎo)書,實驗增設(shè)設(shè)計型和綜合型的實驗內(nèi)容,通過實踐培養(yǎng)學(xué)生面向問題求解的能力,如:結(jié)合ACM認證進行教學(xué),使學(xué)生馬上從理論過度到實際應(yīng)用;講課過程中的理論,課后布置實際問題作業(yè)和學(xué)期末布置大作業(yè),讓學(xué)生利用理論自己解決,編寫程序,完成作業(yè)。在選擇實驗內(nèi)容時重點考慮開設(shè)哪些實驗,所開設(shè)的實驗中,哪些是驗證性的,哪些是綜合性、設(shè)計性的;并且對于計算機專業(yè)所開設(shè)的實驗項目要有不同的針對性;針對每個實驗確定考核依據(jù)和方法以及整個實驗課程的考核評分方法;提高學(xué)生對《數(shù)據(jù)結(jié)構(gòu)》理論的動手實驗?zāi)芰ΑJ箤W(xué)生通過實驗課程的開設(shè)來提高實踐能力,實驗的設(shè)置做到了少開一些驗證性的實驗,多開一些設(shè)計性的、綜合性的實驗。真正提高了學(xué)生的動手能力及技術(shù)應(yīng)用能力。當(dāng)然,在教學(xué)過程中理論課教師與實驗課教師應(yīng)經(jīng)常相互溝通、相互協(xié)調(diào)教學(xué)內(nèi)容。
《數(shù)據(jù)結(jié)構(gòu)》課通常是56學(xué)時以上左右,《數(shù)據(jù)結(jié)構(gòu)》課程的重要性不言而喻。在理論課內(nèi)容的設(shè)置上,不同專業(yè)由于學(xué)時不同而有所區(qū)別。計算機專業(yè)的學(xué)生不但要掌握線性表,樹,圖實驗,而且還要開設(shè)有關(guān)表,樹,圖的綜合設(shè)計性實驗;而軟件專業(yè)除了掌握上述實驗外,對多維數(shù)組等內(nèi)容也要進行實驗。通過不同性質(zhì)的實驗設(shè)置,催發(fā)學(xué)生的學(xué)習(xí)主動性和興趣,有效地利用《數(shù)據(jù)結(jié)構(gòu)》資源,幫助學(xué)生深人理解和掌握《數(shù)據(jù)結(jié)構(gòu)》的原理和技術(shù),提高了學(xué)生實踐和運用數(shù)據(jù)結(jié)構(gòu)知識的能力,鍛煉了學(xué)生獨立分析解決問題的能力,加強了學(xué)生學(xué)習(xí)的協(xié)作精神,從而達到了數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)目標(biāo)。
2.有良好的實驗室條件
除實驗室專門配備的實驗室指導(dǎo)教師外,課程組教師都在實踐環(huán)節(jié)中進行指導(dǎo),利用實驗室的環(huán)境,加上合理的實驗題目引導(dǎo)學(xué)生積極主動地學(xué)習(xí),鍛煉學(xué)生的動手能力、創(chuàng)新能力及面向問題求解的能力。實驗室有專門的實驗環(huán)境,從實驗?zāi)康牡綄嶒炘恚瑢嶒灢襟E都可以從實驗環(huán)境中得到,有了這些理論基礎(chǔ),學(xué)生就可以在此基礎(chǔ)上順利完成各個實驗項目。實驗中心每天在無課的情況下,全天對學(xué)生開放,為學(xué)生自主創(chuàng)新提供方便。對不同層次的學(xué)生進行不同層次的輔導(dǎo)答疑。實驗成績由程序設(shè)計,文檔說明組成,課程設(shè)計成績由程序設(shè)計、設(shè)計作品、報告撰寫和答辯表現(xiàn)四部分組成。
3.采用“理論――實驗――理論總結(jié)” 的方法進行實驗內(nèi)容的講解
傳統(tǒng)計算機課程教學(xué)中,理論課與實驗課教師為同一人,《數(shù)據(jù)結(jié)構(gòu)》課程也不例外,經(jīng)過多次討論和改革,應(yīng)設(shè)專門的實驗老師,在實驗課上,主講老師和實驗老師同時指導(dǎo),方便學(xué)生提問,有問題及時解決。無論是授課老師還是實驗老師在每次實驗課后都要對實驗內(nèi)容和對應(yīng)的理論內(nèi)容作出總結(jié),經(jīng)過理論到實驗的總結(jié),授課教師和實驗教師對課程的內(nèi)容有了更加深刻的認識,對以后的教學(xué)和實驗指導(dǎo)有重要意義。
在長期的《數(shù)據(jù)結(jié)構(gòu)》課程講解中,可以積累豐富的教學(xué)經(jīng)驗,實行理論課與實驗課相剝離的教學(xué)方式,并采用“理論-實驗-理論總結(jié)”的方法進行教學(xué)會起到事半功倍的作用。即理論課教師在做實驗之前先講解一次要做的實驗項目,可能學(xué)生會明白50%~60%的內(nèi)容;然后再安排專門的實驗課教師在做實驗時邊指導(dǎo)邊講解,這樣學(xué)生在有了對實驗內(nèi)容的大致了解之后經(jīng)實驗課老師的指導(dǎo)再經(jīng)親自動手去完成,大概就可以理解90%;實驗結(jié)束后理論課教師再對實驗中的重點進行總結(jié),對問題加以分析,就可以使學(xué)生更好的掌握《數(shù)據(jù)結(jié)構(gòu)》理論和實驗知識,從而加強了《數(shù)據(jù)結(jié)構(gòu)》實踐能力的培養(yǎng)。
4.依據(jù)實驗過程和書面的《數(shù)據(jù)結(jié)構(gòu)》實驗基礎(chǔ)知識進行考核
通過實驗過程進行考核,教師重點查看學(xué)生對實驗中所出現(xiàn)問題的理解或解釋,鼓勵學(xué)生在做每個實驗時開動腦筋獨立解決問題,而不拘泥于查看學(xué)生實驗報告的工整性,對解決問題好的可另酌情加分;對于綜合性實驗或創(chuàng)新性實驗,根據(jù)學(xué)生個人意愿進行分組選題或自選題,重點查看學(xué)生如何圍繞實驗?zāi)繕?biāo)來解決問題的思路而不過分拘泥于實驗的結(jié)果,對完成實驗優(yōu)秀的學(xué)生另酌情加分。在期末考核時,既實現(xiàn)了書面的《數(shù)據(jù)結(jié)構(gòu)》實驗基礎(chǔ)知識卷面考試,也組織進行專項的實驗設(shè)計或模擬應(yīng)用動手考試,圍繞教學(xué)大綱由師生或聘請有關(guān)專業(yè)人士一起對實驗成果進行分析評定等。
通過改革,對調(diào)動學(xué)生的積極性、培養(yǎng)學(xué)生的綜合素質(zhì)、創(chuàng)新能力、創(chuàng)新意識以及擴大就業(yè)機會具有重要的意義,為他們將來進入社會打下良好的基礎(chǔ)。《數(shù)據(jù)結(jié)構(gòu)》課程實踐操作能力培養(yǎng)模式的構(gòu)建,對于普通工科院校尤其是工程類專業(yè)提高學(xué)生的綜合素質(zhì)和能力,具有一定的參考價值和可借鑒的經(jīng)驗。同時也提高了教師的理論水平、業(yè)務(wù)素質(zhì)和科研能力。這種教學(xué)方式和方法是一種頗有成效的教學(xué)改革。
參考文獻:
[1]馬艷芳,姜樺.《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)方法的探討[J].科技信息.2009
【摘要】數(shù)據(jù)結(jié)構(gòu)是高職院校計算機專業(yè)中一門專業(yè)基礎(chǔ)課程和核心課程,本文關(guān)注了當(dāng)前《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)的現(xiàn)狀,總結(jié)該課程教學(xué)中存在的一些不足,并提出了一些見解。
關(guān)鍵詞 數(shù)據(jù)結(jié)構(gòu);算法;程序設(shè)計
1 《數(shù)據(jù)結(jié)構(gòu)》課程的作用及意義
1968年美國唐納德·克努特(Donald Ervin Knuth)教授開創(chuàng)了數(shù)據(jù)結(jié)構(gòu)的最初體系,他所著的《計算機程序設(shè)計藝術(shù)》第一卷《基本算法》是第一本較系統(tǒng)地闡述數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)及其操作的著作,是《數(shù)據(jù)結(jié)構(gòu)》的經(jīng)典之作。隨后,數(shù)據(jù)結(jié)構(gòu)作為一門獨立的課程開始進入大學(xué)課堂。
數(shù)據(jù)結(jié)構(gòu)課程主要是研究非數(shù)值計算的程序設(shè)計問題中所出現(xiàn)的計算機操作對象以及它們之間的關(guān)系和操作的學(xué)科。主要內(nèi)容包括數(shù)據(jù)的邏輯結(jié)構(gòu),數(shù)據(jù)的物理存儲結(jié)構(gòu)和對數(shù)據(jù)的操作(或算法)。通常,算法的設(shè)計取決于數(shù)據(jù)的邏輯結(jié)構(gòu),算法的實現(xiàn)取決于數(shù)據(jù)的物理存儲結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是通過對數(shù)據(jù)的抽象與研究,幫助我們把生活中具體的事物抽象出數(shù)學(xué)模型,從而幫助我們寫出“好”的算法。
數(shù)據(jù)結(jié)構(gòu)課程與數(shù)學(xué)、計算機硬件和軟件有十分密切的關(guān)系,它是介于數(shù)學(xué)、計算機硬件和計算機軟件之間的一門計算機專業(yè)的核心課程。伴隨計算機應(yīng)用領(lǐng)域的擴大和軟、硬件的發(fā)展,非數(shù)值計算性問題使得人們越來越重視數(shù)據(jù)結(jié)構(gòu),所有的計算機系統(tǒng)軟件和應(yīng)用軟件的設(shè)計、開發(fā)都要用到各種類型的數(shù)據(jù)結(jié)構(gòu),已成為高級程序設(shè)計語言、操作系統(tǒng)、編譯原理、數(shù)據(jù)庫、人工智能、圖視學(xué)等課程的基礎(chǔ)。同時,數(shù)據(jù)結(jié)構(gòu)技術(shù)也廣泛應(yīng)用于信息科學(xué)、系統(tǒng)工程、應(yīng)用數(shù)學(xué)以及各種工程技術(shù)領(lǐng)域。《數(shù)據(jù)結(jié)構(gòu)》的學(xué)習(xí)越來越被人們所重視,成為構(gòu)建計算機類專業(yè)群的重要課程。目前,這門課程不僅在本科段開設(shè),同時也是高職高專院校計算機相關(guān)專業(yè)開設(shè)的主要課程之一,許多非計算機專業(yè)的理工專業(yè)也都將它作為必修課程或熱門選修課。
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的目的是使學(xué)生在軟件開發(fā)的過程中能夠正確、合理地選擇數(shù)據(jù)的存儲結(jié)構(gòu),有效地設(shè)計算法,從而提高軟件整體質(zhì)量,既可以為后續(xù)課程的學(xué)習(xí)以及軟件設(shè)計水平的提高打下良好的基礎(chǔ),也可以培養(yǎng)學(xué)生的分析與解決問題能力,提高學(xué)生的思維能力和程序設(shè)計能力,進而促進學(xué)生的綜合應(yīng)用能力和專業(yè)素質(zhì)的提高。
2 《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)現(xiàn)狀
《數(shù)據(jù)結(jié)構(gòu)》課程具有概念抽象、理論性強、邏輯性強、難度大等特點,它涉及到不同的數(shù)據(jù)邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),以及相應(yīng)結(jié)構(gòu)上的算法,因而總被認為是一門深奧、抽象的課程,一門理論性很強、和實踐相脫節(jié)的課程。學(xué)完后不能形成一個完整的知識體系,學(xué)生為了考試而學(xué)習(xí),而在程序設(shè)計的能力上不能得到提高,分析原因主要有以下幾點:
2.1 教學(xué)目的不夠明確
《數(shù)據(jù)結(jié)構(gòu)》課程本來是以在程序設(shè)計過程中總結(jié)而得到的數(shù)據(jù)組織和操作的體驗和認識,用于程序設(shè)計的指導(dǎo)工作,而當(dāng)下的教學(xué)很大程度上只要求掌握數(shù)據(jù)結(jié)構(gòu)的幾種基本類型和基本操作,期望通過基本數(shù)據(jù)類型的掌握能夠用于指導(dǎo)實際程序設(shè)計。這就使得教學(xué)過程偏重理論而忽略了本課程的根本目的和意義,導(dǎo)致學(xué)生對學(xué)習(xí)這門課程的作用不夠明確。從而使學(xué)生感覺課程內(nèi)容抽象、算法復(fù)雜、實用性不強。
因此,學(xué)生的學(xué)習(xí)目的主要變成是為了應(yīng)付考試,只注重課本上的理論內(nèi)容,而不去考慮在具體程序設(shè)計中如何去使用《數(shù)據(jù)結(jié)構(gòu)》基本理論來設(shè)計和解決具體的問題。在課程設(shè)計中,學(xué)生只是為完成編程去苦苦思索,而根本就想不到如何去進行數(shù)據(jù)的有效組織和實現(xiàn)數(shù)據(jù)的基本操作。很難想象不帶問題去學(xué)習(xí)一門課程,會有很高的學(xué)習(xí)積極性。
2.2 教學(xué)內(nèi)容不盡合理
學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)》課程的最終目的是為了使學(xué)生獲得求解問題的能力,就是從實際問題中抽象出數(shù)學(xué)模型,選擇合適計算機表示的數(shù)據(jù)結(jié)構(gòu),再把解決問題的算法程序化,這是一個復(fù)雜抽象思維的過程,是一項創(chuàng)造性的智力勞動。但從目前的教學(xué)內(nèi)容來看,強調(diào)的是數(shù)據(jù)結(jié)構(gòu)的各個模型內(nèi)容,每個模型只是說明模型的結(jié)構(gòu)和模型的計算機實現(xiàn),在理論描述上力求做到盡善盡美,從內(nèi)容安排上,各個模型之間表現(xiàn)為相對獨立的關(guān)系,使得學(xué)生在學(xué)習(xí)過程中不能將課程的內(nèi)容聯(lián)貫在一起而形成一個整體,更就談不上思維訓(xùn)練、分析和解決問題能力的提高了。
而課程安排的實驗環(huán)節(jié),通常是對所講述的內(nèi)容的偽代碼翻譯成高級語言進行調(diào)試,或者是仿造例子依葫蘆畫瓢地來解決一個簡單的問題。沒有通過具體應(yīng)用教會學(xué)生解決問題的思路、算法思想和數(shù)據(jù)結(jié)構(gòu)的使用,在實驗中也只能停留在完成課本內(nèi)容,而對實際問題則是一籌莫展。
2.3 教學(xué)方式不夠新穎
計算機技術(shù)日新月異,程序設(shè)計的思想也在不斷發(fā)展。程序設(shè)計方法已從面向過程的設(shè)計方法發(fā)展到面向?qū)ο蟮某绦蛟O(shè)計方法。然而目前大部分的數(shù)據(jù)結(jié)構(gòu)教學(xué)方式還是停留在面向過程的設(shè)計思路上,所使用的教材也大致類似,教師按照課本的思維方法傳授知識,學(xué)生被當(dāng)成聽眾。這種教學(xué)思維嚴重落后技術(shù)發(fā)展的的現(xiàn)象制約了教學(xué)效果的提高。
教學(xué)手段比較單一,依然主要是老師講,學(xué)生聽的狀況。學(xué)生接受的知識局限于教材和老師授課的內(nèi)容,學(xué)生的認知水平被壓制,出現(xiàn)能力強的學(xué)生不滿足,能力弱的學(xué)生比較吃力的現(xiàn)象。這種單向的教學(xué)方式,不利于《數(shù)據(jù)結(jié)構(gòu)》課程的學(xué)習(xí),對鍛煉學(xué)生創(chuàng)造和分析問題的能力也無益處。
2.4 學(xué)生素質(zhì)有所制約
必要的數(shù)學(xué)知識是學(xué)好《數(shù)據(jù)結(jié)構(gòu)》課程的前提。目前,由于高職學(xué)生的基礎(chǔ)較差,特別是數(shù)學(xué)基礎(chǔ)更加薄弱,這對《數(shù)據(jù)結(jié)構(gòu)》課程的學(xué)習(xí)極為不利。另外,《數(shù)據(jù)結(jié)構(gòu)》課程的教學(xué)基本上都是在學(xué)過一門或幾門程序設(shè)計語言(如C語言)的基礎(chǔ)上進行的。不少學(xué)生對這些程序設(shè)計語言課程就沒有學(xué)好,因此學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)》課程就覺得困難。再加上學(xué)習(xí)的積極性不高,學(xué)習(xí)的目的性不明確,學(xué)習(xí)習(xí)慣不良等,因此學(xué)習(xí)效果可想而知。
3 方法出路
基于改變上述現(xiàn)狀的思考,可以從以下幾方面著手:
3.1 整合教學(xué)內(nèi)容
首先從教材的選用上,力求教材版本新、質(zhì)量高,以防止教材內(nèi)容滯后。教材內(nèi)容的編排,要以程序設(shè)計的基本原理引領(lǐng)數(shù)據(jù)結(jié)構(gòu)的內(nèi)容;教材內(nèi)容的描述,要以程序設(shè)計技術(shù)發(fā)展相對應(yīng)的手段,如現(xiàn)階段可選擇面向?qū)ο蟮姆椒枋觯黄浯我皶r把反映學(xué)科前沿動態(tài)的新成果反映在授課內(nèi)容里,如數(shù)據(jù)結(jié)構(gòu)的描述上盡量使用面向?qū)ο蟮姆椒ǎ枋稣Z言盡量選擇目前較為流行的C++、JAVA等語言;再次是教師在授課過程中,對教學(xué)內(nèi)容進行整合,將形似分散的各種數(shù)據(jù)結(jié)構(gòu)類型通過實例能夠組成一個整體。
同樣的,實驗的內(nèi)容也應(yīng)是配合授課內(nèi)容,對同一項目能夠逐步深入,從低效率的程序設(shè)計,隨著數(shù)據(jù)結(jié)構(gòu)內(nèi)容的不斷深入,不斷完善程序。體會采用不同的數(shù)據(jù)組織方式,帶來不同的程序運行的效率。
3.2 改進教學(xué)方法
將學(xué)生為主體,教師為主導(dǎo)的教學(xué)模式始終貫徹于教學(xué)的全過程。采取實例式與研討式教學(xué)相結(jié)合的方式,以項目作為切入點,分組組織學(xué)生對項目展開討論,在討論的過程中發(fā)現(xiàn)并提出問題,老師參與學(xué)生的討論并針對問題講解解決問題所需要的數(shù)據(jù)結(jié)構(gòu)的知識。這樣學(xué)生由被動變主動地學(xué)習(xí)課程內(nèi)容,既增加了師生之間的互動,也調(diào)動了學(xué)生學(xué)習(xí)的主觀能動性;同時,學(xué)生的發(fā)現(xiàn)問題,分析問題、解決問題的思維能力也得到提高。
3.3 加強實踐環(huán)節(jié)
提高學(xué)生程序設(shè)計的能力是《數(shù)據(jù)結(jié)構(gòu)》課程的目的之一,實踐環(huán)節(jié)自然必不可少。而且也只有通過實踐才能體會到數(shù)據(jù)結(jié)構(gòu)對程序設(shè)計的影響。首先對每一部分的理論內(nèi)容安排實驗內(nèi)容,既要使學(xué)生能夠加深對所學(xué)內(nèi)容的理解和應(yīng)用,也要通過實驗讓學(xué)生逐步提高程序設(shè)計的邏輯思維能力,擺脫的單純的為了解決某個問題而編程的粗放方式。其次是要合理安排課程設(shè)計的內(nèi)容。課程設(shè)計是對所學(xué)內(nèi)容的一個綜合練習(xí),也是檢驗學(xué)生具體應(yīng)用所學(xué)內(nèi)容的能力。在題目選擇上應(yīng)考慮學(xué)生的知識水平層次,從難度上做到難易結(jié)合,由淺入深完成設(shè)計內(nèi)容。關(guān)注解決問題中程序設(shè)計的過程,規(guī)范化程序設(shè)計思維。三是剖析講解典型程序設(shè)計中數(shù)據(jù)結(jié)構(gòu)的具體使用過程,以增加學(xué)生對數(shù)據(jù)結(jié)構(gòu)的實際應(yīng)用的直觀感性認識。
4 結(jié)束語
縱觀作者數(shù)年來的《數(shù)據(jù)結(jié)構(gòu)》課程的教學(xué)實踐,僅是根據(jù)自己的教學(xué)經(jīng)驗和體會,提出了存在的問題,并在實際的教學(xué)工作中積極摸索改進方法。經(jīng)過多年的努力,學(xué)生的程序設(shè)計能力都得到不同程度的提高,也增強了學(xué)生對計算機課程的學(xué)習(xí)積極性。
參考文獻
[1]張紅霞.數(shù)據(jù)結(jié)構(gòu)教程與實踐[M].北京理工大學(xué)出版社,2006.
中圖分類號:G642 文獻標(biāo)識碼:A文章編號:1007-9599 (2011) 19-0000-01
"Data Structure" Teaching Reform and Research
Zhang Mingwei
(School of Computer Science&Engineering,Anhui University of Science&Technology,Huainan232001,China)
Abstract:For the course characteristic of"data structure",and combining the prombles which exists in learning this course,the auther introduced the teaching methods and experimental procedure of this course.
Keywords:Data structure;Teaching methods;Practice
一、前言
《數(shù)據(jù)結(jié)構(gòu)》是計算機專業(yè)及相關(guān)專業(yè)中一門重要的專業(yè)基礎(chǔ)課程,它涉及的內(nèi)容和方法在計算機科學(xué)中有許多廣泛的應(yīng)用,學(xué)好這門課為學(xué)生今后從事理論研究、應(yīng)用開發(fā)、技術(shù)管理工作提供了堅實的理論基礎(chǔ)。數(shù)據(jù)結(jié)構(gòu)這門課主要研究非數(shù)值型數(shù)據(jù)三方面的問題,一是數(shù)據(jù)內(nèi)在邏輯關(guān)系,二是數(shù)據(jù)在計算機內(nèi)的存儲,三是對數(shù)據(jù)的運算(操作)以及對運算的分析。這三方面問題是緊密聯(lián)系的,對每一種數(shù)據(jù)結(jié)構(gòu)都從這三方面來進行梳理,這是數(shù)據(jù)結(jié)構(gòu)教與學(xué)的主線,所以說數(shù)據(jù)結(jié)構(gòu)是形散而神不散。但該課程具有相當(dāng)?shù)某橄笮裕瑢τ嬎銠C編程的能力要求也較高。筆者通過長期教學(xué)實踐不斷總結(jié)經(jīng)驗,為了解決學(xué)生學(xué)習(xí)中現(xiàn)存問題,從教學(xué)方法、教學(xué)手段上進行改革,從而提高了教學(xué)質(zhì)量。
二、數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)困難分析
首先是這門課較抽象,內(nèi)容豐富,學(xué)習(xí)量大。怎樣從現(xiàn)實問題中抽象出三種數(shù)據(jù)結(jié)構(gòu)即線性結(jié)構(gòu)、樹型結(jié)構(gòu)和圖型結(jié)構(gòu),怎樣理解非數(shù)值型數(shù)據(jù)的這三種邏輯結(jié)構(gòu),怎樣使抽象的數(shù)據(jù)邏輯模型轉(zhuǎn)化為物理存儲,對應(yīng)于各種存儲上操作怎樣實現(xiàn),這些問題對于初學(xué)者來說較抽象,涉及的知識點較多,一時之間難于把握這門課的重點,學(xué)生學(xué)起來感覺晦澀難懂,久而久之就會喪失學(xué)習(xí)的信心。
其次是這門課程所用的教材大多是基于C的,那么數(shù)據(jù)結(jié)構(gòu)的前置課C語言的學(xué)習(xí)就至關(guān)重要,C語言是學(xué)生開的第一門程序設(shè)計課,由于課時的局限和考慮到學(xué)生的接受能力,教師在講解指針的時候沒有深入地講解,線性鏈表多局限于簡單介紹或者不講,這就增加了數(shù)據(jù)結(jié)構(gòu)的教學(xué)難度,有的同學(xué)理解了某種數(shù)據(jù)的邏輯結(jié)構(gòu),也能把邏輯結(jié)構(gòu)映射于物理存儲,但是在講解算法的時候就不明白了,特別是涉及二級指針和結(jié)構(gòu)體的時候。
最后就是教學(xué)方法不得當(dāng),在教學(xué)的過程中以教師為中心,沒有很好的與學(xué)生互動,有些老師對“數(shù)據(jù)結(jié)構(gòu)”知識掌握、理解的好,教授也到位,但在教學(xué)的過程中沒有照顧到學(xué)生的具體水平和接受能力,只是按教學(xué)內(nèi)容把知識點灌輸給學(xué)生,學(xué)生的接收效果并不盡如人意,這種教與學(xué)分離,學(xué)生學(xué)習(xí)的興趣也不高,感覺越學(xué)越難,陷入教與學(xué)的惡性循環(huán)。
三、教學(xué)改革的措施與方案
針對《數(shù)據(jù)結(jié)構(gòu)》課程的自身特點和以上在教學(xué)中存在問題,從教學(xué)改革、學(xué)生學(xué)習(xí)和教學(xué)實踐方面展開探討。
對于數(shù)據(jù)結(jié)構(gòu)抽象性強,難于理解的特點,教師可以在講解的時候多注重于每一種數(shù)據(jù)結(jié)構(gòu)的應(yīng)用,以實例引出每一種數(shù)據(jù)結(jié)構(gòu),這樣不但使同學(xué)對這種數(shù)據(jù)結(jié)構(gòu)的認識形象化,而且提高同學(xué)的學(xué)習(xí)興趣,另外還要與學(xué)生互動,及時掌握同學(xué)們的接受情況,在講解每一種數(shù)據(jù)結(jié)構(gòu)時,可以本著提出問題、分析問題、解決問題的思路,例如在講解圖這種數(shù)據(jù)結(jié)構(gòu)時,以著名的七橋問題引入圖的概念,然后提出怎樣對圖進行存儲,結(jié)合前面所學(xué)二叉樹的可讓同學(xué)回答問題,然后分析由圖的特性,得出圖的兩種存儲結(jié)構(gòu),問題得以解決。另外由于課時的局限性,也為了提高同學(xué)的自學(xué)能力,在每次課最后總結(jié)完本次課學(xué)習(xí)內(nèi)容后,留幾道下一堂課主要解決的問題,供同學(xué)們課下預(yù)習(xí)的時候思考,下一次上課的時候可以直接讓同學(xué)回答他對這些問題的理解,老師可以糾正理解不到位或錯誤的地方。這樣對同學(xué)們對學(xué)過的知識點印象會更深刻一些。
數(shù)據(jù)結(jié)構(gòu)教程中大多是基于C的,這樣C語言的學(xué)習(xí)就至關(guān)重要,可以適當(dāng)?shù)募哟驝語言的授課學(xué)時,另外就是盡量提高同學(xué)學(xué)習(xí)的主觀能動性,教師可以把在數(shù)據(jù)結(jié)構(gòu)中用的較多指針、結(jié)構(gòu)體等的知識點的講解和相關(guān)程序放到教師主頁上供同學(xué)參考學(xué)習(xí),學(xué)生有什么問題可以在網(wǎng)上留言,教師在網(wǎng)上及時解答問題,當(dāng)然這里還是要強調(diào)學(xué)生學(xué)習(xí)的興趣,教師要調(diào)動學(xué)生的非智力因素,教師要多介紹這門課程的作用和學(xué)習(xí)目標(biāo),培養(yǎng)學(xué)生的自信心,從就業(yè)和未來發(fā)展的角度幫學(xué)生分析利害關(guān)系,督促同學(xué)盡最大努力來學(xué)習(xí)。
一、引言
設(shè)計、實現(xiàn)一個復(fù)雜或者高級項目的軟件項目,可能需要涉及程序設(shè)計語言、數(shù)據(jù)結(jié)構(gòu)、算法設(shè)計與分析、計算機網(wǎng)絡(luò)、數(shù)據(jù)庫等許多課程。而計算機科學(xué)技術(shù)專業(yè)的每一門課程都是從基礎(chǔ)理論入手,復(fù)雜、高級項目不適合作為課程的學(xué)習(xí)案例或者習(xí)題。
不少課程選用比較簡單和容易理解的小項目作為例題講解知識點或者作為習(xí)題鞏固學(xué)生所學(xué)知識點。比如約瑟夫程序,在程序設(shè)計語言中是鏈表操作習(xí)題,而數(shù)據(jù)結(jié)構(gòu)課程中又作為線性表的習(xí)題或者上機題目;圖書館管理程序,可能作為數(shù)據(jù)結(jié)構(gòu)課程的線性表的課程設(shè)計題目,也可能作為數(shù)據(jù)庫課程范式優(yōu)化的例題;集合的交集和并集可能作為離散數(shù)學(xué)課程的習(xí)題,也常被選做數(shù)據(jù)結(jié)構(gòu)課程線性表操作的算法優(yōu)化例題;網(wǎng)絡(luò)蜘蛛常被作為計算機網(wǎng)絡(luò)課程的課程設(shè)計題目,也常因為其中的典型樹形結(jié)構(gòu)關(guān)系被數(shù)據(jù)結(jié)構(gòu)課程選作綜合性課程設(shè)計題目;多優(yōu)先級作業(yè)調(diào)度既是操作系統(tǒng)課程的主要研究內(nèi)容,也是數(shù)據(jù)結(jié)構(gòu)課程隊列內(nèi)容的習(xí)題。
以往的教學(xué)實踐反映,很多學(xué)生學(xué)完課程之后并沒有達到預(yù)期的目的。究其原因,一是對學(xué)生動手能力的培養(yǎng)沒有到位,以至于部分同學(xué)對課程的學(xué)習(xí)還停留在“紙上談兵”的階段;二是對學(xué)生自主學(xué)習(xí)能力的培養(yǎng)沒有到位,以至于涉及講授范圍之外的問題學(xué)生就不知從何入手。可以采用分層次教學(xué),就是要因材施教,根據(jù)大多數(shù)學(xué)生的情況,正確處理教學(xué)中難與易、快與慢、多與少、應(yīng)知與應(yīng)會的關(guān)系。充分發(fā)揮學(xué)生學(xué)習(xí)的主體作用,轉(zhuǎn)化差生、培養(yǎng)優(yōu)生,全方位增進教學(xué)效果。
目前的教學(xué)活動,主要考慮的先后關(guān)系,而沒有建立良好的課程的銜接關(guān)系。需要研究、整理他們直接的銜接關(guān)系。
需要整理本課程案例,考慮與先修課程或者后修課程的關(guān)系及所選題目的價值和意義,同時對案例采用層次性分解方法,滿足層次性教學(xué)需求。
鑒于計算機專業(yè)本科教學(xué)課程數(shù)量多,本文針對計算機兩大具有緊密關(guān)系的核心基礎(chǔ)課程《數(shù)據(jù)結(jié)構(gòu)》和《程序設(shè)計C語言》進行探索,并期望擴展到其他課程。
二、課程的銜接關(guān)系
C語言程序設(shè)計與數(shù)據(jù)結(jié)構(gòu)是工科院校計算機專業(yè)中開設(shè)的兩門重要的專業(yè)基礎(chǔ)課。在以往教學(xué)中,這兩門課程是相對獨立、分開授課的,因此導(dǎo)致內(nèi)容脫節(jié),教學(xué)效果差。一般C語言程序設(shè)計課程只注重C語言的語法體系,因此學(xué)習(xí)后卻不能用C語言進行程序設(shè)計;后者則注重講授抽象的數(shù)據(jù)關(guān)系和算法在計算機中的表示及實現(xiàn),學(xué)生能進行抽象算法的描述,上機實踐應(yīng)用時卻無從下手。然而,這兩門課程都以培養(yǎng)學(xué)生解決實際問題的程序設(shè)計能力為共同目標(biāo)。因此,如何將這兩門課程有機地結(jié)合起來,構(gòu)建C語言與數(shù)據(jù)結(jié)構(gòu)的新體系,改革教學(xué)方法,提高教學(xué)質(zhì)量,成了當(dāng)前教學(xué)改革中亟待解決的問題。
在傳統(tǒng)的教學(xué)模式下,C語言程序設(shè)計與數(shù)據(jù)結(jié)構(gòu)這兩門課程分開教學(xué)。C語言程序設(shè)計的學(xué)習(xí)主要在語言語法的層次上,數(shù)據(jù)結(jié)構(gòu)難度較大,注重思維訓(xùn)練,造成學(xué)生不能結(jié)合有效結(jié)合這兩門課程運用到實際中去。通過不斷探索,認識到這兩門課程有很多內(nèi)在聯(lián)系,如軟件是用一種程序設(shè)計語言編寫解決該問題的算法,通過編譯、鏈接成為可執(zhí)行程序而成,而算法是通過處理輸入數(shù)據(jù)轉(zhuǎn)換為輸出的解決方案,因此數(shù)據(jù)結(jié)構(gòu)和程序設(shè)計語言密不可分;再比如數(shù)據(jù)結(jié)構(gòu)討論的抽象數(shù)據(jù)關(guān)系和算法要用C語言去實現(xiàn)等。
針對差異化的學(xué)生現(xiàn)狀,整理課程關(guān)系,精巧的設(shè)計教學(xué)案例和習(xí)題實現(xiàn)任務(wù)驅(qū)動式教學(xué)法,對于調(diào)動學(xué)生學(xué)習(xí)興趣,先修課程的簡單案例讓學(xué)生能夠逐漸獨立實現(xiàn),有助于學(xué)生產(chǎn)生滿足感,增加學(xué)習(xí)自信心;對于案例的擴展性引導(dǎo),啟發(fā)學(xué)生深入思考和逐步掌握自學(xué)方法,通過自學(xué)后修課程,提出的較難的問題又有助于激發(fā)學(xué)生參與后修課程學(xué)習(xí)的積極性。
三、擬解決的主要問題
數(shù)據(jù)結(jié)構(gòu)與C語言課程的結(jié)合方式的探討,針對探討結(jié)果設(shè)計實際結(jié)合方法,并在學(xué)生中實踐,選擇最佳結(jié)合方式。
數(shù)據(jù)結(jié)構(gòu)與C語言,每門課程需要有經(jīng)驗的任課教師結(jié)合本課程特點,探討并確定各個案例與各知識點和其他課程關(guān)系,針對學(xué)生差異性現(xiàn)狀和任務(wù)驅(qū)動式及層次性教學(xué)需求,對選擇的案例采用遞增式設(shè)計;確定跨課程案例及相關(guān)課程名,涉及的知識點。探討選擇的習(xí)題(包括課堂練習(xí)題、課后思考題、課后作業(yè)、上機實驗題和課程設(shè)計題目)于知識點及其他課程的關(guān)系,標(biāo)注習(xí)題難度級別,以達到層次性教學(xué)目的。
針對這兩門課程的案例和習(xí)題,深入探討相互關(guān)系,特別是相互的銜接性,C語言課程首先需要講解基本語法知識,幫助初學(xué)者建立簡單的程序設(shè)計過程思想,但由于教學(xué)時間限制,只依靠課內(nèi)學(xué)習(xí)和課后作業(yè)及上機實驗是不能充分達到熟練運行C語言解決問題,編寫項目程序的目的。
C語言是大一學(xué)生首先接觸的程序設(shè)計語言,加上許多學(xué)生還存在中學(xué)時期的一切依賴老師的學(xué)習(xí)方法和觀念,未能進一步學(xué)習(xí)并提高程序設(shè)計能力,因此在后續(xù)課程中,比如數(shù)據(jù)結(jié)構(gòu)課程中需要在講解數(shù)據(jù)結(jié)構(gòu)抽象數(shù)據(jù)類型及解決問題的時候,學(xué)生應(yīng)該嘗試借用C語言編程實現(xiàn)抽象算法。因此,應(yīng)該結(jié)合學(xué)生的這個實際情況,進一步細化和分解選擇的案例和習(xí)題,讓學(xué)生在C語言學(xué)習(xí)過程中學(xué)會應(yīng)用C語言解決和數(shù)據(jù)結(jié)構(gòu)簡單問題相關(guān)任務(wù),為數(shù)據(jù)結(jié)構(gòu)課程打下堅實基礎(chǔ);而數(shù)據(jù)結(jié)構(gòu)課程中有意識的安排一些案例和習(xí)題,讓學(xué)生能夠有運用C語言解決簡單問題的能力,并通過數(shù)據(jù)結(jié)構(gòu)課程的學(xué)習(xí)和培養(yǎng),掌握復(fù)雜問題的解決方法和更加熟練的應(yīng)用C語言工具。
四、總結(jié)
根據(jù)計算機課程關(guān)系,設(shè)計優(yōu)化與其他相關(guān)課程有關(guān)系的案例與習(xí)題,一來可以引導(dǎo)學(xué)生理解后修課程部分內(nèi)容,引起學(xué)習(xí)興趣,二來在一些先修課程已經(jīng)介紹本課程該知識點的基礎(chǔ)上,提出新的解決方案或者優(yōu)化方法,更容易激發(fā)學(xué)生探索問題的好奇心和解決復(fù)雜問題的滿足感,加強學(xué)生理解課程相互關(guān)系和培養(yǎng)計算機創(chuàng)新思維。
以數(shù)據(jù)結(jié)構(gòu)課程和程序設(shè)計語言課程為例整理課程關(guān)系,研究和設(shè)計教學(xué)案例及習(xí)題,滿足學(xué)生差異化需求和對學(xué)習(xí)內(nèi)容的興趣,進行層次性教學(xué),將其經(jīng)驗和方法最終推廣到計算機本科教學(xué)的各課程。
參考文獻:
[1]黃迪明.C語言程序設(shè)計(第2版)[M].成都:電子科技大學(xué)出版社.
[2]吳躍,李樹全,尚明生.數(shù)據(jù)結(jié)構(gòu)與算法(第2版)[M].北京:機械工業(yè)出版社,2010.
[3]薩師煊.數(shù)據(jù)庫(第3版)[M].北京高等教育出版社,2000.
中圖分類號:G642文獻標(biāo)識碼:A文章編號:1009-3044(2007)12-21712-01
Research on the Practice Teaching of Data Structure
CHEN Lan, GU Xiang
(School of Computer Science and Technology, Nantong University, Nantong 226019, China)
Abstract: The data structure is one of the most important core courses in computer science and technology. It is also a difficult course for a student to study. Aimed at the characteristics of data structure, such as strong logic, higher degree abstract etc., problems in practice teaching are set out. And the corresponding solved scheme is also discussed.
Key words: Data structure; Practice teaching; Teaching Method
1 引言
數(shù)據(jù)結(jié)構(gòu)作為計算機學(xué)科中一門核心專業(yè)課程,綜合了數(shù)學(xué)、計算機程序設(shè)計、軟件開發(fā)等課程的眾多知識,該課程為理解、應(yīng)用和開發(fā)計算機應(yīng)用程序提供了技術(shù)和方法支持,是計算機軟件開發(fā)的基礎(chǔ)。實踐教學(xué)對于數(shù)據(jù)結(jié)構(gòu)這門課程,有著十分突出的意義和價值。只有在實踐的過程中,才能使學(xué)生的編程能力得到切實鍛煉,讓他們在不斷的練習(xí)與嘗試中,把理論運用于實踐,設(shè)計編寫出結(jié)構(gòu)清晰明了、可讀性強、高質(zhì)量、高效率的計算機程序。最終使學(xué)生在用計算機解決實際問題時能有效地組織、存儲和處理數(shù)據(jù),為后續(xù)課程打下良好的理論基礎(chǔ)和實踐基礎(chǔ)。然而,在實際教學(xué)中,學(xué)生對該門課程的掌握并不理想,實踐環(huán)節(jié)不到位是其中一個重要的原因。
2 實踐教學(xué)中的問題
分析起來,在課程實踐教學(xué)中的問題可以歸納為教材、教師教學(xué)方法和學(xué)生這三個方面。
2.1 教材方面的問題
數(shù)據(jù)結(jié)構(gòu)實踐教學(xué)的教材較少,現(xiàn)有的一些實驗教材所設(shè)計選取的實驗題目難度較大,不適合學(xué)生使用。因為對于大多數(shù)剛剛學(xué)過一門程序設(shè)計語言的學(xué)生來說,將教材中用偽碼書寫的算法轉(zhuǎn)換成完整無錯的可以運行的程序代碼,都是一件相當(dāng)困難的事情,更不用說自己設(shè)計數(shù)據(jù)結(jié)構(gòu)和算法去解決實際問題了。因此上機實驗的失敗便比比皆是,幾次實驗課下來,學(xué)生就會對這門課程的學(xué)習(xí)失去了興趣和信心,從而嚴重影響了教學(xué)效果。
2.2 教師的教學(xué)方法
一些教師在教學(xué)過程中,由于各種主客觀原因,往往會高估學(xué)生的高級語言程序設(shè)計的基礎(chǔ)。在大多數(shù)高等學(xué)校的教學(xué)計劃中,學(xué)生一般是在學(xué)完C語言(C++語言)后的學(xué)期里接著學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的,他們的語言基礎(chǔ)并不牢靠。倘若僅按照教材而不顧及學(xué)生的現(xiàn)實水平,只會使學(xué)生越學(xué)越枯燥。
另外由于高校擴招,學(xué)生規(guī)模很大,一個教師同時上四個班(120人左右)的課是很常見的事情,這也使得實驗課中教師指導(dǎo)作用弱化,學(xué)生遇到問題不能及時得到解決。實踐教學(xué)的效果便也受到直接影響。
2.3 學(xué)生方面的問題
學(xué)生在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時,先修課程――程序設(shè)計語言的基礎(chǔ)相對薄弱。對C(C++)語言中的難點,如結(jié)構(gòu)體(類)、指針、函數(shù)(方法)等等內(nèi)容,理解不透徹,掌握不充分。而這些內(nèi)容恰恰是數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)。
其次,學(xué)生的編程能力與經(jīng)驗不足。多數(shù)學(xué)生僅僅學(xué)習(xí)過一門程序設(shè)計語言,并且也沒有很多的實際編寫程序的機會。他們沒有能夠很好的理解、掌握程序設(shè)計的方法和理論。
再有,學(xué)習(xí)上的困難導(dǎo)致學(xué)習(xí)熱情的缺乏。數(shù)據(jù)結(jié)構(gòu)這門課程理論性強,內(nèi)容枯燥,不大好學(xué)。學(xué)生學(xué)了不知道有什么用、怎么用。這樣,學(xué)習(xí)時間越久,越覺得辛苦,逐漸磨滅了學(xué)習(xí)興趣。
3 數(shù)據(jù)結(jié)構(gòu)實踐教學(xué)題目的設(shè)計要點
針對上面所提出的問題,在現(xiàn)有條件下,只有通過精心設(shè)計、選取實踐教學(xué)題目,編寫能夠針對所教學(xué)生特點、適合他們自學(xué)、使用的實驗指導(dǎo)講義,才能在一定程度上彌補教材、教師教學(xué)和學(xué)生學(xué)習(xí)三個方面的缺陷,提高數(shù)據(jù)結(jié)構(gòu)的教學(xué)效果。
我們通過實際教學(xué)的不斷嘗試,逐步總結(jié)了在設(shè)計實踐教學(xué)題目時應(yīng)該注意的幾個要點,簡要說明如下:
3.1 選擇典型算法,做到以點帶面
在選擇實踐教學(xué)題目時,應(yīng)該盡量選擇一些典型算法。這些典型算法應(yīng)該具有一定的代表性,能夠系統(tǒng)的體現(xiàn)某個數(shù)據(jù)結(jié)構(gòu)的基本特征;難度應(yīng)該適中,能被絕大多數(shù)學(xué)生理解和掌握;還要有一定的綜合性,具備一定的理論深度,通過算法的實現(xiàn),不僅能幫助學(xué)生更好的學(xué)習(xí)和掌握數(shù)據(jù)結(jié)構(gòu),還能提高學(xué)生編寫程序的水平。表1中,給出了對應(yīng)于某種數(shù)據(jù)結(jié)構(gòu)的一些可以選用的典型算法。
表1 數(shù)據(jù)結(jié)構(gòu)課程中的典型算法
3.2 注重示例程序,起好示范作用
把實驗中每種數(shù)據(jù)結(jié)構(gòu)的第一個算法的源程序提供給學(xué)生,使得他們能對該種數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)有更好的理解,同時還有一個可以參考模仿的范本。實踐表明,這樣做能夠極大地提高程序的成功率,增強學(xué)生的學(xué)習(xí)信心,提高了實驗效率。
3.3 與現(xiàn)實相結(jié)合,提高學(xué)生學(xué)習(xí)興趣
在設(shè)計實驗題目時,應(yīng)力求與相關(guān)課程、實際生活相聯(lián)系。把理論和實際聯(lián)系起來,使得實驗題目生動、接近學(xué)習(xí)和生活實際,學(xué)生容易接受和理解,容易調(diào)動學(xué)習(xí)積極性。
比如消防武警選址實例:給定5個縣之間的交通網(wǎng),現(xiàn)要在5個縣中選擇一個縣建一個消防武警中隊,使得離消防隊最遠的縣到消防隊之間的路程最短。問這個消防隊?wèi)?yīng)建在哪個縣?實際上,這個問題就是從5個縣中選出一個縣,使得它到其他4個縣的最短距離的最大值最小,而問題的關(guān)鍵就是頂點與頂點之間的最短路徑問題。解決該問題的經(jīng)典算法是弗洛伊德算法。
3.4 與學(xué)生實際水平相結(jié)合,設(shè)計不同層次的實驗題目
在設(shè)計實驗的過程之中,需要考慮學(xué)生的專業(yè)水平以及編程功底。由于不同的人對新知識的接受能力和認知能力存在差異,所以不可能用一兩個實驗就要學(xué)生們在對知識的了解程度上達到相同的層次。一個有效的辦法是,在一個實驗題目中,提出不同層次的任務(wù)要求,難度由低到高。這樣可以充分的調(diào)動所有同學(xué)的積極性,使得不同層次的學(xué)生可以在各自的層次上進行思考,并獲得收獲,提高學(xué)生的學(xué)習(xí)興趣并增強自己對學(xué)習(xí)這門課程的信心。
例如在堆棧這一實驗中,按照難易程度從低到高,可以設(shè)計出堆棧的實現(xiàn)(構(gòu)建堆棧、入棧操作、出棧操作)、使用堆棧模擬停車場、使用堆棧模擬鐵路調(diào)度站、算術(shù)表達式求值等四個難度不同的題目,供學(xué)生選用。
3.5 設(shè)計綜合實驗(課程設(shè)計),提高學(xué)生對所學(xué)知識的靈活掌握程度
綜合實驗的設(shè)計是將書本中多個知識點整合在一個實驗中,是對學(xué)生能力水平上的一種較高層次上的要求。學(xué)生在課程設(shè)計中,綜合的運用自己所學(xué)過的基礎(chǔ)知識,使用軟件工程的方法指導(dǎo)和要求整個實驗過程。在整個過程中,學(xué)生可以以兩到三個人為一個開發(fā)小組共同進行實驗。使得學(xué)生在相互學(xué)習(xí)相互促進中進一步掌握數(shù)據(jù)結(jié)構(gòu)的應(yīng)用,提高學(xué)生分析問題,組織數(shù)據(jù),組織編程解決實際問題的能力。并在次過程中可以提高團隊意思,培養(yǎng)協(xié)作精神。當(dāng)然,在題目的選取上,也可以設(shè)計難度層次不同的實驗,以適合不同需要的小組或個人。例如迷宮問題,教學(xué)計劃,校園導(dǎo)游咨詢等。
4 數(shù)據(jù)結(jié)構(gòu)實踐教學(xué)的實施
實踐教學(xué)題目設(shè)計完成以后,教學(xué)的組織實施是下一個重要的環(huán)節(jié)。在實施的各個階段,都必須向?qū)W生提出明確的要求,并進行必要的檢查。否則,依然會達不到預(yù)期的效果。
4.1 實驗預(yù)習(xí)
學(xué)生在上機實驗時臨時現(xiàn)編代碼是常見的事情。為此,在預(yù)習(xí)階段,就應(yīng)該要求學(xué)生根據(jù)自己的情況,選擇一個適合的題目,并對完成此題目的算法進行較為透徹的研究:設(shè)計出算法所必需的數(shù)據(jù)結(jié)構(gòu),給出具體的函數(shù)聲明(如果是C++,則應(yīng)給出類的定義)及函數(shù)實現(xiàn)流程。對于掌握得較差的學(xué)生,還應(yīng)要求他們事先編寫好源程序。所有這些內(nèi)容構(gòu)成預(yù)習(xí)報告。
在實驗開始時,教師應(yīng)該對學(xué)生的預(yù)習(xí)情況進行檢查,對于沒有很好完成實驗預(yù)習(xí)的學(xué)生,要直接取消其實驗資格,實驗成績記零。課程開始時,學(xué)生可能會不適應(yīng),但當(dāng)養(yǎng)成習(xí)慣以后,他們就會深刻體會到預(yù)習(xí)工作的重要。
為了更好的調(diào)動學(xué)生的積極性,作為鼓勵,前次實驗完成得較好的學(xué)生,可以不作預(yù)習(xí)檢查。
4.2 實驗實施
教師在實驗進行中,所扮演的角色不應(yīng)當(dāng)是程序調(diào)試者,而應(yīng)當(dāng)是引導(dǎo)者。當(dāng)學(xué)生在代碼執(zhí)行中發(fā)生錯誤而向教師求助時,教師只需指出可能導(dǎo)致此問題的原因即可,更多的工作應(yīng)該留給學(xué)生自己去完成。這樣一方面可以節(jié)約教師的時間,從而能為更多的學(xué)生解決問題;另一方面也可以解除學(xué)生的依賴思想,鍛煉他們的代碼調(diào)試能力。
教師在實驗進行中的另一項重要工作,是觀察并提示學(xué)生的代碼書寫是否規(guī)范。從某種意義上說,代碼的規(guī)范比編程技巧更為重要。在課程前期,這將是教師在指導(dǎo)實驗時工作量最大的工作。
4.3 實驗報告
實驗完成后,學(xué)生必須撰寫實驗報告,實驗報告應(yīng)附預(yù)習(xí)報告。實驗報告一般包含的內(nèi)容是[放參考文獻]:實驗題目、實驗?zāi)康摹嶒炄蝿?wù)和要求、實驗步驟(源程序)、實驗總結(jié)。
特別要強調(diào)的是實驗總結(jié),必須討論在實驗中遇到的問題以及是如何解決的,即使是語法錯誤也應(yīng)該報告。這樣可以促使學(xué)生對錯誤不斷反思,從而逐步提高編程能力。可以明確告訴學(xué)生,這部分將是成績評定時最重要的考察因素。
4.4 成績評定
成績評定以鼓勵為主,只要學(xué)生確實付出了努力(這從實驗報告的實驗總結(jié)中可以看出),那就可以適當(dāng)給以高分。另一個要考慮的因素是學(xué)生所選題目的難度,但這不應(yīng)該是主要的。
5 結(jié)束語
文中所討論的是我們在數(shù)據(jù)結(jié)構(gòu)課程實踐教學(xué)中的一些成功經(jīng)驗的總結(jié)。實踐表明,這些經(jīng)驗對于提高實踐教學(xué)的效果是有益的,這也進一步促進了課程的理論教學(xué)。當(dāng)然,這些經(jīng)驗還是初步的和粗淺的,還需要在實際教學(xué)中作進一步的研究。
參考文獻:
[1] 嚴蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)(C語言版)[M]. 北京:清華大學(xué)出版社,1997.
[2] 陳宇文. 注重源程序在《數(shù)據(jù)結(jié)構(gòu)》課程中的重要性[J]. 高教論壇,2004.(1):73-75.
中圖分類號:G642 文獻標(biāo)識碼:B
CDIO原本是工程教育領(lǐng)域內(nèi)的一個概念,它是構(gòu)思(Conceive)、設(shè)計(Design)、實現(xiàn)(Implement)、運作(Operate)的集合體,是2001年由瑞典查爾姆斯技術(shù)學(xué)院、瑞典林克平大學(xué)、美國麻省理工學(xué)院、瑞典皇家技術(shù)學(xué)院合作開發(fā)的一個新型工程教育平臺。它以工程項目(包括產(chǎn)品、生產(chǎn)流程和系統(tǒng))從研發(fā)到運行的生命周期為整體,讓學(xué)生主動地參與到理論到實踐的轉(zhuǎn)化過程中來,是一種倡導(dǎo)“做中學(xué)”和“基于項目的教育和學(xué)習(xí)”的新型教學(xué)模式。CDIO既注重抽象理論知識的“教”和“學(xué)”,又強調(diào)了教學(xué)過程中“做”的重要意義;既增強了學(xué)生的動手能力,又培養(yǎng)了學(xué)生的創(chuàng)新意識、項目設(shè)計的能力和團隊協(xié)作的精神。CDIO教學(xué)模式應(yīng)用于我國的一些高校,已經(jīng)取得了初步成果。比如清華大學(xué)工業(yè)工程系的顧學(xué)雍教授就曾創(chuàng)造性地將CDIO方法運用于“數(shù)據(jù)結(jié)構(gòu)”和“數(shù)據(jù)庫原理”兩門課中,取得了突出的成效。筆者也在本院計算機專業(yè)“數(shù)據(jù)結(jié)構(gòu)”課程的建設(shè)過程中遵循CDIO原則,進行了一系列教學(xué)實踐與探索。
1CDIO能力培養(yǎng)大綱
CDIO模式以構(gòu)思、設(shè)計、實現(xiàn)、運作為主線,將基礎(chǔ)知識、個人能力、團隊協(xié)作與社會環(huán)境融合在一起,注重理論與實踐的結(jié)合。圖1為CDIO大綱的主要內(nèi)容。
大學(xué)計算機專業(yè)也是實踐性很強的學(xué)科專業(yè),借鑒CDIO大綱對工程師的培養(yǎng)目標(biāo),我們對于專業(yè)性人才的培養(yǎng)也應(yīng)該首先立足于加強學(xué)生對專業(yè)基礎(chǔ)性知識的學(xué)習(xí)和基本技能的掌握,倡導(dǎo)產(chǎn)學(xué)研相結(jié)合,在實踐中培養(yǎng)學(xué)生的專業(yè)技能與合作溝通的能力,最終讓畢業(yè)生滿足企業(yè)對人才的需求并服務(wù)于社會。
2“數(shù)據(jù)結(jié)構(gòu)”課程的重要性
“數(shù)據(jù)結(jié)構(gòu)”是整個計算機學(xué)科體系的一門核心課程,也是計算機相關(guān)專業(yè)的專業(yè)必修課。學(xué)好這門課程,不僅可以為軟件開發(fā)奠定良好的編程基礎(chǔ),也可以培養(yǎng)學(xué)
生良好的編程思想和編程風(fēng)格。這門課程主要介紹各種離散結(jié)構(gòu),如表、樹、圖、集合等在計算機內(nèi)的存儲和處理,以及各種常用算法及其應(yīng)用。課程除了要求學(xué)生有較好的離散數(shù)學(xué)基礎(chǔ)外,還應(yīng)至少掌握一門程序設(shè)計語言(Pascal、C、C++、Java等)。因為課程既包含抽象的理論,又強調(diào)算法的實踐,所以一直以來都被學(xué)生認為是最難學(xué)的課程之一。
3基于項目的學(xué)習(xí)
CDIO教育模式要求學(xué)生基于工程項目的全生命周期進行學(xué)習(xí)與實踐,項目最好來源于企業(yè)的真實題目或結(jié)合教師的科研課題組織和設(shè)計,以項目作為基礎(chǔ)知識傳授與基本技能掌握的載體。考慮到“數(shù)據(jù)結(jié)構(gòu)”課程一般開設(shè)在計算機專業(yè)大學(xué)本科二年級,此時學(xué)生剛剛學(xué)習(xí)了一至兩門程序設(shè)計語言,對編程語言的運用還處在初級階段,還沒有經(jīng)過軟件工程的系統(tǒng)培訓(xùn),所以教師在設(shè)計項目時,還必須講究方式方法,結(jié)合學(xué)生的實際情況來組織教學(xué)。
3.1課堂講授
課堂講授是貫徹CDIO教學(xué)大綱,學(xué)習(xí)基礎(chǔ)知識的主要方法,要求教師對“數(shù)據(jù)結(jié)構(gòu)”課程中所有的知識點、重點及難點有很好的設(shè)計。在講授教學(xué)內(nèi)容時,教師可以適當(dāng)?shù)匾脤嶋H項目,引導(dǎo)學(xué)生體會產(chǎn)品從構(gòu)思、設(shè)計、實施到運作的完整過程。
比如在講解樹結(jié)構(gòu)時,引入ERP企業(yè)資源計劃系統(tǒng)中的BOM(Bill of Material)物料清單的實例。BOM是一種描述配套件結(jié)構(gòu)的零件表,包括所有子件、零件、原材料的清單以及制造一個配件需要的所有物料數(shù)量。BOM是制造業(yè)信息系統(tǒng)的一個核心部分,在ERP系統(tǒng)的MRP分析、制定生產(chǎn)計劃、采購及銷售控制及生產(chǎn)過程控制等環(huán)節(jié)都具有重要的作用,設(shè)計合理的BOM結(jié)構(gòu)可以取得事半功倍的效果。針對對BOM特點和作用的簡單講授和對樹型結(jié)構(gòu)的分析,教師可以引導(dǎo)學(xué)生從實例入手,鍛煉學(xué)生從分析實例產(chǎn)品的構(gòu)成和用戶的實際需求出發(fā),構(gòu)思并設(shè)計合理的數(shù)據(jù)結(jié)構(gòu),促進學(xué)生對樹型結(jié)構(gòu)的掌握。
3.2課堂討論
課堂討論是課堂講授教學(xué)內(nèi)容的有效補充形式。現(xiàn)代教學(xué)理念主張啟發(fā)式教學(xué),在適當(dāng)?shù)臅r候拋出一個問題,給學(xué)生5~10分鐘的自由發(fā)言或分組討論時間,效果會更好。比如上一個問題,教師可以在講解BOM的時候直接給出樹型結(jié)構(gòu)的解決方案,但是如果教師在講授了基礎(chǔ)知識和問題背景后,讓學(xué)生自行討論設(shè)計方案,自由發(fā)言或由小組代表提出設(shè)想,再由全班討論,經(jīng)教師總結(jié)后給出結(jié)論,則可以充分地激發(fā)學(xué)生的積極性,也讓學(xué)生體會了“提出問題―分析問題―解決問題”的過程。在這個過程中,教師要注意對學(xué)生的思路加以引導(dǎo),對學(xué)生所提的方案加以鼓勵,幫助學(xué)生樹立創(chuàng)新意識,讓他們不墨守成規(guī),學(xué)會從多角度思考問題。
3.3課后作業(yè)
課后作業(yè)是對課堂教學(xué)內(nèi)容的延伸和對課堂教學(xué)效果的驗證。在教學(xué)時間緊任務(wù)重的前提下,科學(xué)地設(shè)計課后作業(yè)可以彌補缺憾,也可以促進學(xué)生主動學(xué)習(xí)。比如可以針對具體項目,讓學(xué)生通過上網(wǎng)查閱資料補充項目背景知識,也可以讓學(xué)生查找相關(guān)問題的其他解決方案,或?qū)φn堂提出的算法進行代碼實現(xiàn)。教師可以從這些內(nèi)容中挑選出精彩的部分,安排合適的時間,在課堂上由學(xué)生進行匯報講演,交流心得。這種形式既對課堂教授有很好的補充,又有效杜絕了學(xué)生的作業(yè)抄襲現(xiàn)象。
4通過課程實踐體會“做中學(xué)”
CDIO理念是總結(jié)了歐美20多年來工程教育改革的產(chǎn)物,目的是能夠培養(yǎng)出全面發(fā)展的工程師,他們不僅要具有扎實的專業(yè)知識和熟練的專業(yè)技能,理解構(gòu)思―設(shè)計―實施―運行一個完整系統(tǒng)的復(fù)雜性,還要能夠在一個現(xiàn)代的、合作的環(huán)境中讓這個產(chǎn)品升值。CDIO強調(diào)學(xué)生的工程能力不是單純的理論知識或直觀技能,而是兩者的綜合運用,也就是所謂的“做中學(xué)”。
“數(shù)據(jù)結(jié)構(gòu)”課程的實踐環(huán)節(jié)由兩部分組成:課內(nèi)上機和課程設(shè)計。課內(nèi)上機一般有2~4個學(xué)時,以驗證性實驗為主,側(cè)重學(xué)生對每章知識點的上機驗證和內(nèi)容的延伸;課程設(shè)計時間相對較長,一般有20~40個學(xué)時不等,學(xué)生可以在這個過程中完整地體驗一個項目的設(shè)計和實施。
4.1項目的選擇
課程實踐的項目最好來自企業(yè)一線,或者是一些具有實際意義的題目,考慮到學(xué)生知識的局限性,教師可以對這些題目稍作改動。比如“北京市城市軌道交通咨詢模擬系統(tǒng)”要求參考北京地鐵運營線路圖,見圖2,以無向圖的形式描述城市軌道交通狀況,給出從甲地到乙地的最優(yōu)換乘方案。此項目來源于實際問題,學(xué)生很容易理解題目的要求和最終的結(jié)果。由于實際地鐵運行線路中站點比較多,所以布置題目時可以適當(dāng)簡化,比如減少站點數(shù)目(但要保留換乘站),忽略兩站之間的運行時間和每站的停靠時間,以途經(jīng)的站數(shù)來作為最優(yōu)路徑的計算依據(jù)等。
在課程設(shè)計階段,學(xué)生首先選擇自己感興趣的項目,然后從問題需求入手,設(shè)計合理的數(shù)據(jù)結(jié)構(gòu),明確輸入和輸出信息,進行模塊設(shè)計,最后進行詳細代碼的編寫和模塊測試。整個過程始終遵循CDIO“做中學(xué)”的原則,讓學(xué)生在實際動手的過程中不斷增強解決實際問題的能力。部分能力較強的同學(xué)還在原題的基礎(chǔ)上進行功能擴展,形成了一個帶有友好人機界面的可視化軟件,既提高了學(xué)生的學(xué)習(xí)興趣,又激發(fā)了學(xué)生的創(chuàng)造力。
4.2分工與合作
《禮記•學(xué)記》上講:“獨學(xué)而無友,則孤陋而寡聞”。由于CDIO強調(diào)的項目具有完整性和綜合性,一個學(xué)生很難在短時間內(nèi)完成,因此可以考慮采用分組的形式,由多名學(xué)生組成小組,由組長負責(zé)安排整個項目的進度。這種團隊的形式最能鍛煉學(xué)生的協(xié)作精神、溝通能力和領(lǐng)導(dǎo)能力。李開復(fù)教授在給中國學(xué)生的信中這樣寫道:“像Windows 2000這樣的產(chǎn)品研發(fā),有超過3000名開發(fā)工程
師和測試人員參與,寫出了5000萬行代碼。沒有高度統(tǒng)一的團隊精神,沒有全部參與者的默契與分工合作,這項工程是根本不可能完成的。”CDIO模式就是要讓學(xué)生在不斷的碰撞和溝通中學(xué)會相互支持,共同討論,共同進步。
4.3項目考核
課程設(shè)計結(jié)束時,教師要對項目的完成情況進行考核,CDIO教學(xué)模式的標(biāo)準(zhǔn)之一就是要對學(xué)生個體進行評估驗收。考核的形式可以是多樣的,比如采用“答辯”的方式,由學(xué)生演示程序的運行結(jié)果,然后針對自己在小組
中的分工情況,詳細介紹具體算法和遇到的問題,最后提交項目總結(jié)報告。較之傳統(tǒng)的考試,這種考核方式更加強調(diào)學(xué)生的表達能力和科技文章的撰寫能力,既分享了學(xué)習(xí)經(jīng)驗,又拓寬了知識面。教師在考核過程中要起到主導(dǎo)作用,要站在企業(yè)、用戶或用人單位的角度來設(shè)立問題,將學(xué)生置于一個大的環(huán)境中,使學(xué)生具備業(yè)界所需要的素質(zhì)和能力。
總之,通過將CDIO教學(xué)模式運用于“數(shù)據(jù)結(jié)構(gòu)”課程,倡導(dǎo)“做中學(xué)”和“基于項目的教育和學(xué)習(xí)”,使學(xué)生在掌握基本專業(yè)知識和技能的同時,既提高了學(xué)習(xí)興趣,又增強了從業(yè)所要求的各項素質(zhì),對學(xué)生畢業(yè)走上社會的可持續(xù)發(fā)展起到積極的作用。
參考文獻:
中圖分類號:TP311.12-4
數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)中介于數(shù)學(xué)、計算機硬件和計算機軟件三者之間的一門綜合性的專業(yè)基礎(chǔ)課。數(shù)據(jù)結(jié)構(gòu)的內(nèi)容不僅是程序設(shè)計進行總結(jié)和提高,而且是編譯原理、操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)等后續(xù)專業(yè)課提供基礎(chǔ),具有承上啟下的重要作用。本文針對數(shù)據(jù)結(jié)構(gòu)的課程特點和教學(xué)過程中存在的問題,探討教學(xué)實踐中如何針對產(chǎn)生的問題進行教學(xué)改革與實踐,以提高教學(xué)質(zhì)量和學(xué)生學(xué)習(xí)效果。
1 數(shù)據(jù)結(jié)構(gòu)教學(xué)中存在的問題與現(xiàn)狀
1.1 缺乏對數(shù)據(jù)結(jié)構(gòu)認識。正確深刻地理解數(shù)據(jù)結(jié)構(gòu)的涵義、作用以及數(shù)據(jù)結(jié)構(gòu)課程內(nèi)容體系是學(xué)習(xí)好數(shù)據(jù)結(jié)構(gòu)的前提和基礎(chǔ)。但是,一般情況學(xué)生只是大概了解了數(shù)據(jù)結(jié)構(gòu)的概念,在缺乏正確認識和深刻的理解的情況下,就開始直接學(xué)習(xí)課程內(nèi)容了,認為具體的內(nèi)容才是最重要的。對于為什么需要數(shù)據(jù)結(jié)構(gòu),課程中包括哪些內(nèi)容,從哪些角度和方面對數(shù)據(jù)結(jié)構(gòu)進行講解,原因是什么等等,都沒有認真研究和體會,導(dǎo)致數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)效果和教學(xué)效果都不甚理想。如果這些問題都理解了,就從整體上認識了數(shù)據(jù)結(jié)構(gòu),那么學(xué)生學(xué)習(xí),教師教授都會有的放矢。
1.2 C語言知識儲備與數(shù)據(jù)結(jié)構(gòu)的要求相脫節(jié)。數(shù)據(jù)結(jié)構(gòu)涉及指針、結(jié)構(gòu)體、類型定義、函數(shù)調(diào)用等相關(guān)知識,所以要求學(xué)生對這些內(nèi)容的掌握程度比較高高。但是在C語言教學(xué)中,一方面,這些內(nèi)容都是在課程的后半部分且學(xué)習(xí)起來難度較大,學(xué)生學(xué)習(xí)有畏難情緒,往往對這些內(nèi)容掌握不牢;另一方面,教師在授課過程中,對不同專業(yè)區(qū)別度不大,很少特別為后續(xù)課程的需要專門對相關(guān)知識做重點講授,這樣就影響后續(xù)課程的學(xué)習(xí)。最終導(dǎo)致學(xué)生掌握的C語言知識不能滿足學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程的要求。
1.3 缺乏獨立分析解決問題的能力。在課堂講課過程中,一般以教師講授課程內(nèi)容為主導(dǎo),在講解課程內(nèi)容時,學(xué)生貌似都學(xué)會了,和老師的互動也非常積極,對老師提出的啟發(fā)式問題都能正確回答,認為課堂上老師所講的實例也都很簡單。但是,若在沒有老師的引領(lǐng)的情況下,讓學(xué)生單獨分析、解決一個例題,多數(shù)學(xué)生就很難掌握方向,不知從哪做起,缺乏獨立分析問題、解決問題的能力。
1.4 動手編程能力不強。相對于理論知識的學(xué)習(xí),學(xué)生在上機實踐中遇到的問題更大。學(xué)生的程序設(shè)計基礎(chǔ)薄弱,缺乏足夠的系統(tǒng)訓(xùn)練,對調(diào)試程序的方法不夠熟練,程序結(jié)構(gòu)設(shè)置不合理,代碼編寫可讀性差。即使一些學(xué)生看懂了教材上的算法,將其轉(zhuǎn)換成能運行的C語言程序,也存在一定的難度。這些都對學(xué)生的學(xué)習(xí)效果都有較大的影響,甚至?xí)鳒p學(xué)習(xí)的積極性,進而產(chǎn)生畏難和厭學(xué)情緒,產(chǎn)生惡性循環(huán),有些學(xué)生干脆不學(xué)了。數(shù)據(jù)結(jié)構(gòu)中教學(xué)中出現(xiàn)的這些問題,嚴重影響了數(shù)據(jù)結(jié)構(gòu)課程的教與學(xué),探討數(shù)據(jù)結(jié)構(gòu)課程教學(xué)方法,勢在必行。
2 教學(xué)探討與實施
2.1 正確認識“數(shù)據(jù)結(jié)構(gòu)”。認識數(shù)據(jù)結(jié)構(gòu)課程不僅僅讓學(xué)生了解其在專業(yè)中的地位和重要性,更要理解數(shù)據(jù)結(jié)構(gòu)課程本身的涵義和作用。所以在課程開始的時候開課之初,對課程緒論部分的講解不應(yīng)吝嗇時間,要把這部門內(nèi)容講清楚講透徹。數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計算機的程序設(shè)計問題中計算機的操作對象以及他們之間關(guān)系的操作等的學(xué)科。從這個定義中,我們從中抽取對象、關(guān)系、操作等關(guān)鍵詞,再以設(shè)計實現(xiàn)一個家族家譜這樣一個比較形象的例子進行講解,進而引出如何存儲表示數(shù)據(jù)對象及關(guān)系和能對這個家族的族譜做哪些操作,這樣就引入了邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的知識以及對數(shù)據(jù)結(jié)構(gòu)建立相應(yīng)操作的問題。這樣學(xué)生就基本能建立數(shù)據(jù)對象、數(shù)據(jù)關(guān)系、基本操作三元組的概念,并能深刻理解邏輯結(jié)構(gòu)與物理結(jié)構(gòu)的概念和關(guān)系。從總體上認識、把握、建立數(shù)據(jù)結(jié)構(gòu)的整體概念是學(xué)習(xí)好數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)。
2.2 針對數(shù)據(jù)結(jié)構(gòu)課程需要制定C語言課程教學(xué)大綱。因為不同專業(yè)學(xué)習(xí)C語言的要求不同,所以根據(jù)教學(xué)計劃制定科學(xué)合理的數(shù)據(jù)結(jié)構(gòu)前導(dǎo)課程的教學(xué)大綱、考試大綱能有效解決前導(dǎo)課程儲備知識不足的情況。根據(jù)教學(xué)計劃安排有數(shù)據(jù)結(jié)構(gòu)課程的專業(yè),其C語言課程與其他專業(yè)的課程不同,是單獨列出的。其教學(xué)大綱、考試大綱等教學(xué)文件由講授C語言和數(shù)據(jù)結(jié)構(gòu)的老師根據(jù)專業(yè)特點及后續(xù)課程的需要共同研究制定,并按學(xué)校的規(guī)定定期修訂。教學(xué)中只要按照制定好的教學(xué)大綱等相關(guān)文件規(guī)定執(zhí)行,就能滿足數(shù)據(jù)結(jié)構(gòu)課程的要求。這樣就從源頭上解決了C語言儲備知識不足的問題,避免了以往數(shù)據(jù)結(jié)構(gòu)課程教師需要與C語言課程教師溝通重點講解哪些內(nèi)容,但因只是個人行為而沒有學(xué)校相關(guān)文件規(guī)定的限制,所以不能達到較好的效果。通過制定專門的教學(xué)大綱,也無需要求數(shù)據(jù)結(jié)構(gòu)與C語言課程采用“一師制”,避免了人員變動等其他因素帶來的不確定性影響。
2.3 構(gòu)建整體教學(xué)內(nèi)容體系。數(shù)據(jù)結(jié)構(gòu)課程內(nèi)容抽象涉及很多概念和技術(shù),學(xué)生在學(xué)習(xí)的課程過程中總是感到知識沒有連貫性與整體性,難以對所學(xué)內(nèi)容融會貫通,對課程的知識缺少一個整體的把握。所以建立整體的知識框架體系對數(shù)據(jù)結(jié)構(gòu)的教學(xué)非常重要。數(shù)據(jù)結(jié)構(gòu)課程的內(nèi)容主要圍繞數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)在計算機中存儲的物理結(jié)構(gòu)以及對數(shù)據(jù)操作算法的實現(xiàn)及評價展開。數(shù)據(jù)的邏輯結(jié)構(gòu)根據(jù)數(shù)據(jù)對象之間關(guān)系的不同特性,分為線性結(jié)構(gòu)(一對一)、樹形結(jié)構(gòu)(一對多)、圖結(jié)構(gòu)(多對多);數(shù)據(jù)的物理存儲結(jié)構(gòu)按照數(shù)據(jù)對象之間關(guān)系的表示方法分為順序存儲結(jié)構(gòu)和非順序存儲結(jié)構(gòu)。在教學(xué)中引入抽象數(shù)據(jù)類型(ADT)觀點介紹數(shù)據(jù)結(jié)構(gòu)技術(shù),采用算法時空分析來判斷算法的好壞。在講授每一個數(shù)據(jù)結(jié)構(gòu)時,以抽象數(shù)據(jù)類型為主線,按照抽象數(shù)據(jù)類型的定義—抽象數(shù)據(jù)類型的設(shè)計—抽象數(shù)據(jù)類型的實現(xiàn)三個層次展開來討論,滲透并應(yīng)用模塊化的思想,在此基礎(chǔ)上介紹數(shù)據(jù)結(jié)構(gòu)的具體應(yīng)用。在教學(xué)過程中教師會反復(fù)強調(diào)課程的篇章結(jié)構(gòu)及其關(guān)系,數(shù)據(jù)結(jié)構(gòu)課程的章、節(jié)、目,是課程的“骨架”,反應(yīng)了課程內(nèi)容的邏輯關(guān)系,以此加強學(xué)生對課程的內(nèi)容體系的理解和掌握。
2.4 課堂上適當(dāng)進行編程示范教學(xué)。教學(xué)過程中,我們發(fā)現(xiàn),學(xué)生能聽懂老師所講授解題的算法思路,但就是不知道如何用編程語言或算法表達出來。為解決這一問題,在教學(xué)中會在課堂上對有代表性的算法進行現(xiàn)場編程演示。課堂上教師先帶著學(xué)生先把算法總體思想寫出來,接下來選擇合適的物理存儲結(jié)構(gòu)利用C語言進行編程調(diào)試運行。這種方法可以讓學(xué)生掌握將解決問題的思路轉(zhuǎn)變成代碼的全過程,對學(xué)生編寫和調(diào)試程序起到很好的示范作用。在編程過程中,教師會邊寫代碼邊講解,引導(dǎo)學(xué)生積極獻計獻策一起來解決問題。由于現(xiàn)場編程比較耗費課時,對于比較長的程序,一般教師會在課前完成,留下解決問題的關(guān)鍵步驟在課堂與學(xué)生一起編程實現(xiàn)。通過這個過程學(xué)生能深刻理解緒論中算法的設(shè)計只取決于將要解決問題的數(shù)據(jù)對象之間的邏輯結(jié)構(gòu),而算法的實現(xiàn)則依賴于數(shù)據(jù)對象及其關(guān)系的存儲結(jié)構(gòu)。同時學(xué)生也能認識到用類C語言表示的算法與用C語言編寫的程序有哪些不同。有了現(xiàn)場的變成演示,在上機實踐中,學(xué)生直接將教材上的算法照抄到計算機內(nèi)運行的情況大大減少,理解了如何將抽象的數(shù)據(jù)結(jié)構(gòu)理論應(yīng)用到實際解決問題當(dāng)中去。
2.5 任務(wù)驅(qū)動教學(xué)方法的應(yīng)用。所謂“任務(wù)驅(qū)動”就是在學(xué)習(xí)信息技術(shù)的過程中,學(xué)生在教師的幫助下,緊緊圍繞一個共同的任務(wù)活動中心,在強烈的問題動機的驅(qū)動下,通過對學(xué)習(xí)資源的積極主動應(yīng)用,進行自主探索和互動協(xié)作的學(xué)習(xí),并在完成既定任務(wù)的同時,引導(dǎo)學(xué)生產(chǎn)生一種學(xué)習(xí)實踐活動。“任務(wù)驅(qū)動”是一種建立在建構(gòu)主義教學(xué)理論基礎(chǔ)上的教學(xué)法。它要求任務(wù)的目標(biāo)性和教學(xué)情境的創(chuàng)建。使學(xué)生帶著真實的任務(wù)在探索中學(xué)習(xí)。在這個過程中,學(xué)生還會不斷地獲得成就感,可以更大地激發(fā)他們的求知欲望,逐步形成一個感知心智活動的良性循環(huán),從而培養(yǎng)出獨立探索、勇于開拓進取的自學(xué)能力。在教學(xué)中,我們應(yīng)用了任務(wù)驅(qū)動的教學(xué)方法并加以改進,達到了較好的教學(xué)效果。我們的做法是根據(jù)不同的場景“任務(wù)”不僅僅是學(xué)生的,也是老師的,或者是由老師和學(xué)生共同完成的。比如在講解第二章線性表的時候,我們就會根據(jù)課程內(nèi)容,設(shè)計完成一個共同的任務(wù):一元多項式的相加。為了完成這個任務(wù)師生共同找解決的方法,當(dāng)然任務(wù)的完成需要老師的按既定的方向循序漸進地引導(dǎo),先講解兩個集合合并到一起的算法,再講解將兩個按值非遞減有序排列的線性表如何合并,一元多項式相加的問題稍加改進就解決了。在完成一些比較大任務(wù)的過程中,我們會將其分解成若干個小任務(wù)讓學(xué)生獨立完成。當(dāng)然,在教學(xué)實踐中也不是所有的內(nèi)容都可以通過任務(wù)驅(qū)動的方法實現(xiàn),不能執(zhí)行一刀切。授課教師應(yīng)根據(jù)課程內(nèi)容,學(xué)生的能力多方面考慮設(shè)計合適的任務(wù)。任務(wù)太大完不成,容易打消學(xué)生的積極性,任務(wù)太小不能起到應(yīng)有的作用。
2.6 系統(tǒng)化實踐教學(xué)。為了滿足不同層次學(xué)生對實驗題目難度,提升學(xué)生對實踐教學(xué)的興趣;我們針對不同學(xué)生的特點,制定分層次實踐教學(xué)的方法。按照實驗的難易程度分為驗證性實驗、設(shè)計性實驗、綜合性實驗三個層次。驗證性實驗根據(jù)數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)內(nèi)容設(shè)計,難度較低。目的是讓學(xué)生掌握基本數(shù)據(jù)結(jié)構(gòu)的特點和基本概念,同時掌握基本算法及應(yīng)用。在上機指導(dǎo)中授課教師將驗證性實驗作為主要的考核內(nèi)容,只有對基本算法的完全掌握,才能靈活應(yīng)用。設(shè)計性實驗是在驗證性實驗的基礎(chǔ)上增加難度和深度。根據(jù)特定的數(shù)據(jù)結(jié)構(gòu)有針性設(shè)計題目,必須使用某種數(shù)據(jù)結(jié)構(gòu)解決。授課教師會和學(xué)生一起分析問題,引導(dǎo)學(xué)生如何解決,如何設(shè)計數(shù)據(jù)結(jié)構(gòu),采用什么樣的算法,但是具體的數(shù)據(jù)結(jié)構(gòu)及算法編程實現(xiàn)需要學(xué)生獨立完成。綜合性實驗一般要求綜合使用多種數(shù)據(jù)結(jié)構(gòu)解決一個難度較大的現(xiàn)實問題;主要訓(xùn)練學(xué)生綜合運用知識的能力、協(xié)作能力和創(chuàng)新能力。由于問題難度較大,我們采取將綜合性實驗安排在課程設(shè)計階段。
教學(xué)實踐證明,這種重點進行驗證性實驗,適當(dāng)補充設(shè)計性實驗,通過課程設(shè)計完成綜合性實驗的分層次的實踐教學(xué)體系,符合學(xué)生的認知規(guī)律和特點,在實踐教學(xué)中也取得了較好的教學(xué)效果。
3 總結(jié)
數(shù)據(jù)結(jié)構(gòu)課程在計算機專業(yè)的課程體系中具有非常重要的作用。本文通過對數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中存在的問題及現(xiàn)狀進行深刻剖析,結(jié)合教學(xué)經(jīng)驗有針對性地提出了相應(yīng)的解決方法,從問題的源頭上避免了這些問題的發(fā)生。教學(xué)實踐表明,通過在教學(xué)中采用以上教學(xué)方法,提高了數(shù)據(jù)結(jié)構(gòu)的教學(xué)質(zhì)量,并取得了良好的教學(xué)效果。
參考文獻:
[1]嚴蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].清華大學(xué)出版社,1997.
[2]余建國,劉雙紅.基于任務(wù)驅(qū)動的協(xié)同教學(xué)模式在程序設(shè)計類課程中的研究與實踐[J].科技信息,2009,27:104,83.