數(shù)據(jù)結(jié)構(gòu)與算法范文

時(shí)間:2023-03-15 08:17:28

導(dǎo)語:如何才能寫好一篇數(shù)據(jù)結(jié)構(gòu)與算法,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。

數(shù)據(jù)結(jié)構(gòu)與算法

篇1

1 理論教學(xué)

1.1 明確教學(xué)目標(biāo)

數(shù)據(jù)結(jié)構(gòu)算法》這門課程的所有算法思想最后都會(huì)落腳到程序上,都需要用高級(jí)語言表現(xiàn)出來,老師把握不好目標(biāo),很容易把數(shù)據(jù)結(jié)構(gòu)當(dāng)成C語言的“延伸”和“升華”,課堂上帶領(lǐng)學(xué)生一個(gè)一個(gè)讀算法程序,而沒有做到讓學(xué)生去領(lǐng)會(huì)算法的思想。所以老師一定要明確這門課的教學(xué)目標(biāo)是編程思想而不是程序本身,先有好的構(gòu)思和想法,輔助語言加以實(shí)現(xiàn),每節(jié)課都要以“思想第一,實(shí)現(xiàn)第二” 為教學(xué)綱領(lǐng),教學(xué)生怎么從實(shí)際問題中抽象出模型,提煉出思路,然后用程序來實(shí)現(xiàn)這個(gè)思路,最后真正的解決問題,就像古人講的“胸有成竹”,在畫竹之前,對于竹子的高度,樹干、樹枝和葉子的結(jié)構(gòu),心里要有個(gè)規(guī)劃,做到心中有數(shù),這樣畫出來的竹子才能形象。編程也一樣,先從實(shí)際問題重剝離出系統(tǒng)架構(gòu),構(gòu)造出合適的模型,選擇高效率的算法,再使用高級(jí)語言把它實(shí)現(xiàn),最后再進(jìn)一步處理趨向完善,使之具備客戶所需要的功能。學(xué)生要從《數(shù)據(jù)結(jié)構(gòu)與算法》這門課程中掌握的就是如何從實(shí)際問題中抽象出模型、建造起架構(gòu)的過程,老師只有時(shí)刻帶領(lǐng)學(xué)生從這個(gè)角度來著手解決問題,才能真正為該課程的教學(xué)把握好方向。

1.2 合理運(yùn)用教學(xué)方法

隨著現(xiàn)代教學(xué)水平的提高,越來越多的多媒體課件和網(wǎng)絡(luò)資源被運(yùn)用于教學(xué)當(dāng)中,人們也對啟發(fā)式、問題探究式、課堂討論式等這些新型的教學(xué)方法趨之若鶩,或多或少的把傳統(tǒng)的教學(xué)方法冠以“落伍”和“填鴨式”等貶義色彩。但我個(gè)人認(rèn)為,傳統(tǒng)的黑板加粉筆的教學(xué)方法,在《數(shù)據(jù)結(jié)構(gòu)與算法》這門課程當(dāng)中仍然有著舉足輕重的作用,因?yàn)镻PT課件和動(dòng)畫都是老師預(yù)先按照自己的思路經(jīng)過思考和摸索,多次嘗試和修改而整理出來的,對于經(jīng)驗(yàn)不豐富,未曾接觸過相關(guān)知識(shí)的學(xué)生來說,直接跳出來的課件和動(dòng)畫沒有給夠他們思考和整理思路的時(shí)間,冰冷的課件和學(xué)生沒有眼神、肢體語言等情感交流,無法從算法思想的角度去引領(lǐng)學(xué)生一步一步的剝離表象,抽離出問題的本質(zhì)。所以,片面的強(qiáng)調(diào)新型的教學(xué)方法是不科學(xué)的,傳統(tǒng)的黑板教學(xué)也不可忽視,在傳統(tǒng)的基礎(chǔ)之上,一些粉筆和語言都不太容易展示的算法執(zhí)行過程,可以結(jié)合現(xiàn)代化多媒體教學(xué)手段來表現(xiàn),形象的動(dòng)畫能讓抽象的內(nèi)容變得更加直觀更易理解,學(xué)生也更容易被帶入其中,從而使教學(xué)過程變得更加生動(dòng)形象。

所以,合理的教學(xué)方法應(yīng)該是以板書為主,課件為輔,配合老師與學(xué)生的情感交流,這樣才能取得好的教學(xué)效果。

1.3 實(shí)例化教學(xué)設(shè)計(jì)

大學(xué)的學(xué)習(xí)和高中不一樣,不再簡單的以分?jǐn)?shù)定乾坤,學(xué)生沒有了壓力也就沒了動(dòng)力,而且大學(xué)生都各有鋒芒,有自己獨(dú)立的思想,如何調(diào)動(dòng)學(xué)生對該課程的興趣,使被動(dòng)學(xué)習(xí)變?yōu)橹鲃?dòng)求知就顯得尤為重要,那如何激發(fā)學(xué)生的學(xué)習(xí)興趣呢?答案是要讓學(xué)生感覺到數(shù)據(jù)結(jié)構(gòu)解決的問題其實(shí)都來源于我們的實(shí)際生活,是切切實(shí)實(shí)存在于我們周圍的,比如講到順序表和鏈表,可以舉例我們早期去銀行辦事需要排隊(duì),中間插隊(duì)一個(gè)人后面的人都要后移(順序表插入),中間有一個(gè)人離開后面的人都要前移(順序表刪除),這就是順序表,而現(xiàn)在我們在銀行取個(gè)號(hào)就可以找個(gè)舒服的位置坐下,或者離開去辦其它的事情,等叫到號(hào)再到窗口,這就是鏈表,存儲(chǔ)的位置不連續(xù),但是大家的邏輯關(guān)系仍然存在;比如講到圖的最短路徑問題時(shí)可以設(shè)計(jì)一個(gè)旅游場景,需要去多個(gè)城市旅游,但又希望旅途最短花費(fèi)最少,讓學(xué)生去設(shè)計(jì)路線;比如講到約瑟夫環(huán)的時(shí)候可以結(jié)合猶太歷史故事讓學(xué)生身臨其境;再比如講到漢諾塔的時(shí)候可以讓學(xué)生先試著玩一玩漢諾塔游戲,然后再考慮怎么用算法來實(shí)現(xiàn)。

“興趣是最好的老師”,真正把學(xué)生的興趣調(diào)動(dòng)起來,使學(xué)生進(jìn)入到一個(gè)積極思考和探索的活躍狀態(tài),教學(xué)就能起到事半功倍的效果。

2 實(shí)驗(yàn)教學(xué)

鑒于該課程的課時(shí)壓縮,實(shí)驗(yàn)課的課時(shí)也隨之減少了,學(xué)生能動(dòng)手實(shí)踐的時(shí)間減少使教學(xué)效果大打折扣。而該課程的學(xué)了老師在理論課上的引導(dǎo)以外,學(xué)生自己動(dòng)手去“練”才是真正去領(lǐng)悟和內(nèi)化算法思想的法寶,“練”必不可少,所以在這有限的實(shí)驗(yàn)課時(shí)間里,如何讓學(xué)生的“練”落到實(shí)處也需要老師投入很大的精力來設(shè)計(jì)和管控。

2.1 合理安排實(shí)驗(yàn)項(xiàng)目

根據(jù)教學(xué)大綱,結(jié)合學(xué)生的實(shí)際掌握程度來設(shè)計(jì)實(shí)驗(yàn)項(xiàng)目,主要分為驗(yàn)證性、可選性和綜合設(shè)計(jì)性三大類,驗(yàn)證性實(shí)驗(yàn)的目的是重溫基礎(chǔ)知識(shí),強(qiáng)調(diào)編程規(guī)范性和完整的算法思想, 主要針對一些常用的算法實(shí)現(xiàn), 如順序表、鏈表的創(chuàng)建、要求學(xué)生在上機(jī)實(shí)驗(yàn)課堂內(nèi)完成。可選性實(shí)驗(yàn)稍有難度,需要融會(huì)貫通和創(chuàng)新能力,針對基礎(chǔ)較好的學(xué)生,如果驗(yàn)證性實(shí)驗(yàn)很快完成,就可以進(jìn)行可選性實(shí)驗(yàn)項(xiàng)目的操作。綜合設(shè)計(jì)類實(shí)驗(yàn)一般涉及多個(gè)知識(shí)點(diǎn), 要求學(xué)生自己抽象出模型進(jìn)行設(shè)計(jì), 主要訓(xùn)練學(xué)生綜合運(yùn)用所學(xué)知識(shí)的能力、團(tuán)隊(duì)協(xié)作能力和自主創(chuàng)新能力。題目一般是要求解決實(shí)際生活中遇到的問題,可以對學(xué)生按照基礎(chǔ)的強(qiáng)弱搭配成3-4人一個(gè)小組,完成后通過現(xiàn)場演示和答辯來評價(jià)效果,這類實(shí)驗(yàn)完成后學(xué)生在體會(huì)到成功喜悅的同時(shí),也能領(lǐng)悟到數(shù)據(jù)結(jié)構(gòu)及算法的價(jià)值,激發(fā)他們的求知欲望和探索精神,使其更加積極主動(dòng)的學(xué)習(xí),而這一部分人的主動(dòng)也能帶動(dòng)其他的同學(xué)跟進(jìn)步伐,形成一個(gè)好的學(xué)習(xí)氛圍。

2.2 正確管理實(shí)驗(yàn)過程

實(shí)驗(yàn)課堂上,針對不同類型的實(shí)驗(yàn)項(xiàng)目,采用相應(yīng)的教學(xué)方式。對于驗(yàn)證性實(shí)驗(yàn),老師可以在實(shí)驗(yàn)開始前對實(shí)驗(yàn)的流程、操作要點(diǎn)及最終的運(yùn)行效果進(jìn)行講解,不至于讓學(xué)生盲目摸索,浪費(fèi)時(shí)間。選擇性實(shí)驗(yàn)需要針對部分基礎(chǔ)較好的學(xué)生進(jìn)行適當(dāng)?shù)膯l(fā)式引導(dǎo),對關(guān)鍵算法和思路予以提點(diǎn)。對綜合設(shè)計(jì)性實(shí)驗(yàn),教師可以采用項(xiàng)目式的教學(xué)方法,帶領(lǐng)學(xué)生理清需求、提取模型、設(shè)計(jì)步驟、確定計(jì)劃,并對小組成員予以分工,使得實(shí)驗(yàn)?zāi)軌蝽樌倪M(jìn)行下去。

實(shí)驗(yàn)過程中也要設(shè)定一定的獎(jiǎng)勵(lì)機(jī)制,不能只看最后結(jié)果,對于積極主動(dòng),喜歡鉆研的學(xué)生要及時(shí)獎(jiǎng)勵(lì),給予一定的加分,在綜合設(shè)計(jì)類實(shí)驗(yàn)中擔(dān)任重要角色的學(xué)生也要識(shí)別出來,適當(dāng)提高實(shí)驗(yàn)過程分?jǐn)?shù)。

基礎(chǔ)較差的學(xué)生光靠課堂上的練習(xí)遠(yuǎn)遠(yuǎn)不夠,需要整合機(jī)房資源,給學(xué)生提供課外實(shí)踐的機(jī)會(huì),鼓勵(lì)他們利用業(yè)余時(shí)間補(bǔ)齊差距。

篇2

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu)預(yù)算法;國際化;互動(dòng)式教學(xué)

文章編號(hào):1672-5913(2013)18-0058-04

中圖分類號(hào):G642

0 引言

通過觀察和對比,國際一流大學(xué)學(xué)生參與課堂發(fā)言和課后研討的積極性要遠(yuǎn)遠(yuǎn)高于復(fù)旦大學(xué)學(xué)生,而參與研討對于促進(jìn)學(xué)生深入理解課程內(nèi)容,培養(yǎng)學(xué)生在立題、思辨和協(xié)作方面的能力十分有益。為此,復(fù)旦大學(xué)軟件學(xué)院開展了數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)類課程國際化建設(shè)工作,主要目標(biāo)是研究如何在課堂教學(xué)中采用研討型方式,在實(shí)驗(yàn)環(huán)節(jié)中采用協(xié)作型項(xiàng)目,并針對中國學(xué)生的特點(diǎn),探索如何引導(dǎo)學(xué)生提出問題和參與討論,以提高課程教學(xué)效果,縮小與國際一流大學(xué)差距的教學(xué)方法。課程建設(shè)教師團(tuán)隊(duì)的主要人員首先通過全程旁聽美國麻省理工學(xué)院數(shù)門相同或類似的課程,認(rèn)識(shí)與國際一流大學(xué)在教學(xué)手段和效果方面差距的同時(shí),分析中美學(xué)生在提出問題、參與討論方面表現(xiàn)差異的原因。然后通過與學(xué)生座談方式收集整理中國學(xué)生不愿意在課堂上發(fā)言和參與研討的主要原因和相應(yīng)對策。最后介紹復(fù)旦大學(xué)軟件學(xué)院根據(jù)課程國際化教學(xué)課題的研究成果進(jìn)行教學(xué)方式調(diào)整和開展課堂教學(xué)實(shí)踐的情況。

1 麻省理工學(xué)院在課程教學(xué)中促進(jìn)學(xué)生參與研討的先進(jìn)經(jīng)驗(yàn)

在開展數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)課程國際化建設(shè)過程中,課程建設(shè)教師團(tuán)隊(duì)的主要人員利用在美國麻省理工學(xué)院(MIT)參與研究工作的機(jī)會(huì),在一年內(nèi)全程旁聽了Design and Analysis ofAlgorithms、Web 3.0、Economics 0f Information、Software Construction 4門課程,并且參加了MIT的IFF(International Faculty Fellow)國際大學(xué)教師培訓(xùn)項(xiàng)目。IFF是由MIT發(fā)起組織的、致力于提高國外高等院校教師的科研能力、培養(yǎng)研究生水平和授課技能的項(xiàng)目。在上述過程中,教師團(tuán)隊(duì)人員對于MIT在促進(jìn)學(xué)生參與課程相關(guān)內(nèi)容研討方面的舉措印象深刻,并將值得借鑒的教學(xué)方式和方法進(jìn)行了歸納。

(1)學(xué)生參與課程相關(guān)內(nèi)容的討論需要相關(guān)知識(shí)的準(zhǔn)備,只有將相關(guān)知識(shí)積累到一定的程度,學(xué)生才會(huì)自然而然地愿意對相關(guān)問題進(jìn)行討論,而課程教材和課堂講義對知識(shí)積累是遠(yuǎn)遠(yuǎn)不夠的。MIT在課程開始時(shí)就由任課教師提供課程相關(guān)的文獻(xiàn)閱讀列表,閱讀完這些文獻(xiàn)所需要的時(shí)間大約為課程授課時(shí)間的3倍左右。對比復(fù)旦大學(xué)類似課程的文獻(xiàn)閱讀要求,發(fā)現(xiàn)中國學(xué)生在完成課程相關(guān)文獻(xiàn)閱讀量方面遠(yuǎn)遠(yuǎn)少于國際一流大學(xué)的學(xué)生。

(2)每一門課程除了提供網(wǎng)站用于下載課程相關(guān)的資料外,還有課程的BLOG便于學(xué)生和教師在線交流。利用這樣的系統(tǒng),教師往往規(guī)定在課程授課期間,學(xué)生至少針對數(shù)個(gè)課題(完成相關(guān)文獻(xiàn)的閱讀后)在BLOG上發(fā)表自己的觀點(diǎn)。由此促進(jìn)學(xué)生圍繞相關(guān)課題開展討論,這樣的方式也為那些不太愿意在眾人面前發(fā)言的學(xué)生提供闡述自己觀點(diǎn)的機(jī)會(huì)。

(3)MIT的教室一般都是階梯教室,這樣既可以讓每一位學(xué)生能夠清楚地看到任課教師各種面部和身體語言,也使授課教師能夠看到所有的學(xué)生,時(shí)刻了解學(xué)生對課堂內(nèi)容的各種反饋。學(xué)生座位之間留有通道,授課時(shí)教師會(huì)在整個(gè)教室里走動(dòng),確保能夠走近每一位學(xué)生的身旁,讓每一位學(xué)生感受關(guān)注和重視,這樣也讓學(xué)生感到親切隨和。實(shí)踐表明,這樣做更能讓學(xué)生暢所欲言。

(4)教學(xué)內(nèi)容融合任課教師的研究成果。任課教師對于自身的研究內(nèi)容一般都有較深的認(rèn)識(shí)和理解(甚至有些理論和技術(shù)是世界首創(chuàng)),講解過程中能夠廣征博引,相關(guān)難點(diǎn)都能夠娓娓道來,所以往往更為生動(dòng)有趣,可以激發(fā)學(xué)生的提問熱情和學(xué)習(xí)興趣。教師只有在相關(guān)領(lǐng)域內(nèi)具備一定的科研水平才能更好地講授相應(yīng)的課程內(nèi)容。

(5)在講解有關(guān)技術(shù)內(nèi)容時(shí),會(huì)邀請業(yè)界一些著名人物走進(jìn)課堂為學(xué)生講解其擅長的話題。以MIT互聯(lián)網(wǎng)方面的課程為例,任課教師會(huì)請IBM、Google、Microsoft等著名科技公司副總裁或技術(shù)總監(jiān)級(jí)別的人物為學(xué)生講一堂課(有時(shí)是遠(yuǎn)程視頻連線,教室配有大屏幕高清投影和高速網(wǎng)絡(luò)),之后一般設(shè)有學(xué)生提問環(huán)節(jié)。這樣的課程很受學(xué)生歡迎,學(xué)生提問也非常踴躍。

綜上所述,在課程開始前精心為學(xué)生挑選各章節(jié)相關(guān)的閱讀文獻(xiàn)(分為必讀和選讀部分)、建設(shè)課程BLOG促進(jìn)師生間交流、將研究內(nèi)容融入課程內(nèi)容等教學(xué)方式和方法都值得借鑒,并且通過一段時(shí)間的準(zhǔn)備加以實(shí)施。但是中國學(xué)生不愿意上課發(fā)言和參與研討也有其成長環(huán)境中文化背景的影響,例如,追求標(biāo)準(zhǔn)答案的應(yīng)試教育、謹(jǐn)守中庸之道處事態(tài)度等。而美國學(xué)生從小就讓他們不斷地進(jìn)行發(fā)言和表達(dá)的訓(xùn)練,從幼兒園開始,每天都會(huì)讓小孩子輪流講一下昨天發(fā)生的事情。參加各種活動(dòng)和社團(tuán)也是如此,久而久之,養(yǎng)成了愿意并且善于表達(dá)自己觀點(diǎn)的習(xí)慣。所以對于我們的學(xué)生,不僅要營造讓其發(fā)言的環(huán)境和氣氛,也需要有意識(shí)地利用各種機(jī)會(huì)培養(yǎng)他們發(fā)言的習(xí)慣。

2 學(xué)生不愿意在課堂上發(fā)言和參與研討的主要原因及改進(jìn)建議

課題組對兩個(gè)班52名學(xué)生針對不愿意在課堂上發(fā)言和參與研討的問題進(jìn)行面談,每位學(xué)生面談時(shí)間為20~30分鐘。學(xué)生不愿意在課堂上發(fā)言和參與討論的主要原因可歸納為:害怕回答錯(cuò)誤后造成對自己不利的影響(特別是教師隨后會(huì)給出答案的情況)、沒有養(yǎng)成積極發(fā)表自己觀點(diǎn)的習(xí)慣(與成長的文化和環(huán)境有關(guān))、擔(dān)心積極發(fā)言后被別人說愛表現(xiàn)、課堂上沒有能夠很好地營造出各抒己見氛圍。調(diào)查過程中同時(shí)也聽取了學(xué)生對讓他們能夠積極主動(dòng)發(fā)言的一些建議和意見,歸納為以下幾點(diǎn)。

(1)討論的問題應(yīng)該是一些不存在對錯(cuò)的開放性問題。

(2)可以先由教師開題和啟發(fā),然后找到學(xué)生感興趣的幾點(diǎn)展開討論。

(3)教師要營造隨和的課堂氣氛,需要有一個(gè)破冰的過程,讓學(xué)生放松不害怕。

(4)可以采取分組討論然后再由學(xué)生總結(jié)發(fā)言的方式。

(5)提出一些學(xué)生比較熟悉且有啟發(fā)的問題比較容易讓學(xué)生展開交流。

(6)發(fā)言和討論適當(dāng)增加一些平時(shí)成績(但也有學(xué)生擔(dān)心別人認(rèn)為他為了成績而發(fā)言,所以增加成績的比重也不宜過高)。

(7)不要僅對一個(gè)學(xué)生提問,要求其他學(xué)生可以隨時(shí)補(bǔ)充。

(8)對于有標(biāo)準(zhǔn)答案的問題,可以采取按座位順序點(diǎn)名提問回答的方式。

綜合以上學(xué)生的意見和建議,為了讓學(xué)生積極參與課堂發(fā)言和研討應(yīng)當(dāng)盡量營造輕松隨意的課堂氣氛,提出的問題也應(yīng)是開放性的(即沒有標(biāo)準(zhǔn)的答案),任課教師要善于引導(dǎo)和組織課堂討論,在提出問題前給予必要的講解和啟發(fā)。

3 教學(xué)方式調(diào)整和課堂教學(xué)實(shí)踐

通過借鑒國際一流大學(xué)和國內(nèi)名師的先進(jìn)教學(xué)經(jīng)驗(yàn),針對中國學(xué)生,特別就數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)課程的教學(xué)方式提出了一些方案和措施,并且進(jìn)行了相應(yīng)的課堂教學(xué)實(shí)踐。雖然這些方案和措施還有待進(jìn)一步完善和改進(jìn),但是課堂教學(xué)效果和學(xué)生參與研討和發(fā)言的意愿明顯提高。具體的方案和措施包括以下幾個(gè)方面。

3.1 嘗試誘導(dǎo)式、研討式和互動(dòng)式教學(xué)方式

任課教師要改進(jìn)之前以灌輸式知識(shí)傳授的教學(xué)方式,嘗試采用誘導(dǎo)式、研討式和互動(dòng)式教學(xué)方式。教學(xué)過程中一般首先給出實(shí)際的應(yīng)用問題,然后要求學(xué)生嘗試提出解決問題的算法,其他學(xué)生需對提出的方法進(jìn)行評價(jià),提出不足之處和改進(jìn)方法,然后通過討論這個(gè)算法的缺點(diǎn),引出克服這個(gè)缺點(diǎn)的其他算法,最后對解決相同問題的不同算法進(jìn)行比較和歸納。適當(dāng)增加學(xué)生對相關(guān)重要文獻(xiàn)的閱讀量,并且根據(jù)閱讀和調(diào)研結(jié)果進(jìn)行課堂討論。以NP完全性問題教學(xué)為例,由于學(xué)生還沒有學(xué)習(xí)計(jì)算理論方面的課程,對于理解NP問題和NP完全性問題有一定的困難。首先任課教師介紹旅行商問題,接著讓學(xué)生嘗試尋找有效地求解算法,在教師引導(dǎo)下討論得出結(jié)論:在現(xiàn)有計(jì)算機(jī)體系結(jié)構(gòu)和運(yùn)算能力的基礎(chǔ)上,一定規(guī)模的旅行商問題目前不存在找到最優(yōu)解的計(jì)算復(fù)雜性為多項(xiàng)式的算法;然后指出存在一類這樣的問題,并且任取這類中的一個(gè)問題,再任取這類中的另一個(gè)問題,則一定存在多項(xiàng)式時(shí)間復(fù)雜性的算法,即可以把前者轉(zhuǎn)變?yōu)楹笳?。如果存在解決前者的多項(xiàng)式算法,必定存在能夠解決后者的多項(xiàng)式算法;最后指出目前仍然沒有找到多項(xiàng)式算法來解決這類問題,同時(shí)也不能證明這樣的多項(xiàng)式算法不存在。為了讓學(xué)生加深對上述問題的體會(huì)并且熟知典型的NP問題,將學(xué)生分成9組,每一組給出一對問題,其中一個(gè)屬于P(多項(xiàng)式)問題,一個(gè)屬于NP問題。要求學(xué)生調(diào)查這一對問題在應(yīng)用中出現(xiàn)的實(shí)例和變體,然后設(shè)計(jì)可行的解決方法。并且要求每組以課堂演講的方式向師生介紹他們的調(diào)查結(jié)果,聽取報(bào)告的教師和學(xué)生可以隨時(shí)進(jìn)行提問,要求做報(bào)告的學(xué)生回答。教學(xué)實(shí)踐表明,此舉加深了學(xué)生對NP完全性問題的認(rèn)識(shí)和理解。

3.2 從解決實(shí)際問題出發(fā),培養(yǎng)學(xué)生提問和思辨的能力

對于每個(gè)知識(shí)單元,首先提出若干個(gè)實(shí)際應(yīng)用中的問題,在提出可行的數(shù)據(jù)結(jié)構(gòu)與算法前,引導(dǎo)學(xué)生進(jìn)行討論,并且提出自己的解決方案。通過分析學(xué)生所提出的各種方法,比較之前已學(xué)方法,歸納出新的數(shù)據(jù)結(jié)構(gòu)與算法的特點(diǎn)和用途,最后在深入剖析和討論的基礎(chǔ)上進(jìn)行擴(kuò)展和綜合。

3.3 借鑒國際一流大學(xué)的教學(xué)內(nèi)容和方式,彌補(bǔ)與國際先進(jìn)授課水平之間的差距

數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)課程的教學(xué)內(nèi)容和方式借鑒了美國麻省理工學(xué)院的同名課程,并嘗試進(jìn)行誘導(dǎo)式、研討式和互動(dòng)式教學(xué)。課程的教材、講義、作業(yè)、實(shí)踐和考試全部使用英文,外教采用英語授課。將世界頂尖級(jí)學(xué)者撰寫的經(jīng)典著作Introduction to Algorithms作為課程的教材,并且根據(jù)中國學(xué)生的生活經(jīng)歷和背景文化,對部分案例進(jìn)行相應(yīng)的增補(bǔ)和改寫。

3.4 以應(yīng)用為導(dǎo)向,培養(yǎng)綜合型人才

目前計(jì)算機(jī)學(xué)科方面的教學(xué),一般從計(jì)算機(jī)基礎(chǔ)知識(shí)和編程原理開始,經(jīng)過若干中級(jí)課程,直至大學(xué)三、四年級(jí),學(xué)生才可能涉足整個(gè)軟件系統(tǒng)開發(fā)的全過程,這樣往往造成“只見樹木,不見森林”的情況。學(xué)生已經(jīng)學(xué)習(xí)了構(gòu)成軟件系統(tǒng)所需的知識(shí)和技術(shù),但是難以針對某一現(xiàn)實(shí)應(yīng)用,將所學(xué)較好地綜合起來。在大學(xué)低年級(jí)時(shí),以完整系統(tǒng)開發(fā)和應(yīng)用為目標(biāo),讓學(xué)生在專業(yè)學(xué)習(xí)的早期就能夠了解和體會(huì)實(shí)際應(yīng)用的復(fù)雜性,掌握并實(shí)踐綜合集成各項(xiàng)技術(shù)的方法和手段。學(xué)生只有較早地了解整個(gè)軟件系統(tǒng)的開發(fā)與應(yīng)用,才能在今后創(chuàng)造性地綜合運(yùn)用所學(xué),成為既有較高專業(yè)水平,又對現(xiàn)實(shí)應(yīng)用有敏銳洞察能力的復(fù)合型人才。

3.5 以科研帶動(dòng)和促進(jìn)教學(xué),將最新技術(shù)的發(fā)展成果融入教學(xué)內(nèi)容中

數(shù)據(jù)結(jié)構(gòu)與算法的基本內(nèi)容雖然相對穩(wěn)定,但對已有數(shù)據(jù)結(jié)構(gòu)與算法的擴(kuò)展和結(jié)合,特別是解決新的應(yīng)用方面的發(fā)展卻日新月異,知識(shí)更新和演化速度較快。數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)課程組的教師在現(xiàn)有教材的理論體系和教學(xué)內(nèi)容的基礎(chǔ)上,及時(shí)了解和把握技術(shù)發(fā)展的新動(dòng)向,將最新的理論創(chuàng)新和技術(shù)進(jìn)步充實(shí)到教學(xué)內(nèi)容中,每年都增補(bǔ)緊跟學(xué)科發(fā)展的新內(nèi)容。此外,任課教師會(huì)指導(dǎo)學(xué)生參與自己的科研項(xiàng)目,或者推薦學(xué)生進(jìn)入其他教師的實(shí)驗(yàn)室從事相關(guān)的科研活動(dòng)。

這些方案和措施的實(shí)施,使得數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)課程能夠在較短的時(shí)期內(nèi)形成科研和教學(xué)并線、講解和演示并重、理論和實(shí)踐并行的特色。課題組教師不斷用科學(xué)研究和國際學(xué)術(shù)交流的成果充實(shí)課程的內(nèi)容,使課程能夠充分體現(xiàn)目前算法理論和應(yīng)用方面最新的發(fā)展和動(dòng)向。在教學(xué)中始終堅(jiān)持理論與實(shí)踐相結(jié)合的原則,從經(jīng)典案例引出科學(xué)問題,并強(qiáng)調(diào)對學(xué)生邏輯思維和動(dòng)手能力的培養(yǎng)。

4 結(jié)語

篇3

【關(guān)鍵詞】考核方式改革 人才培養(yǎng) 動(dòng)手能力

《數(shù)據(jù)結(jié)構(gòu)與算法》是計(jì)算機(jī)和信息與計(jì)算科學(xué)專業(yè)一門重要的專業(yè)基礎(chǔ)課,在信息專業(yè)教學(xué)體系中占有舉足輕重的地位。為進(jìn)一步培養(yǎng)學(xué)生的實(shí)際應(yīng)用能力和獨(dú)立解決問題的意識(shí),使同學(xué)們能夠把所學(xué)知識(shí)與實(shí)踐有機(jī)的結(jié)合,對《數(shù)據(jù)結(jié)構(gòu)與算法》課程的考核方式進(jìn)行改革。

一、當(dāng)前考核方式存在的問題和改革的必要性

期末筆試的成績比重很大,忽略了學(xué)生的學(xué)習(xí)過程。期末的成績占到80%,期末決定了學(xué)生是否及格。有一部分學(xué)生平時(shí)不學(xué)習(xí),臨近考試采用突擊學(xué)習(xí)的方式,考試雖然及格了,可是考試后沒多長時(shí)間基本都忘了。為了平時(shí)成績得高分,同學(xué)之間抄襲作業(yè)的情況很常見,破環(huán)了學(xué)生的學(xué)習(xí)氛圍和學(xué)習(xí)的積極性,不利于學(xué)生建立良好的學(xué)習(xí)氛圍。為了適應(yīng)應(yīng)用型人才培養(yǎng)模式的改革,提高學(xué)生的實(shí)踐動(dòng)手能力,結(jié)合目前考核體系對于本課程存在的問題,應(yīng)該對現(xiàn)行考核方案進(jìn)行適當(dāng)?shù)恼{(diào)整和改革。調(diào)整的原則是結(jié)合本專業(yè)學(xué)生的特點(diǎn)和專業(yè)課程體系,理論聯(lián)系實(shí)際,著重培養(yǎng)理論聯(lián)系實(shí)際能解決實(shí)際問題的應(yīng)用型人才。改革的目的是要正確評價(jià)學(xué)生的綜合素質(zhì),提高學(xué)生就業(yè)競爭能力。

二、考試改革的方法

重視學(xué)習(xí)過程,增加期中考試。采用過程化考核思想,避免學(xué)生突擊學(xué)習(xí),增加期中考試。用8周左右的時(shí)間學(xué)習(xí)完數(shù)組之后進(jìn)行一次期中考試。目的是考查學(xué)生的基礎(chǔ)知識(shí)和程序設(shè)計(jì)語言。期中成績占總成績的30%。降低期末考試成績的權(quán)重。避免期末考試成績“一錘定音”。數(shù)據(jù)結(jié)構(gòu)中的樹和圖連同查找和排序內(nèi)容是期末考試的重點(diǎn)。為了避免遺忘線性結(jié)構(gòu)的內(nèi)容,期末考試也要涉及期中的相應(yīng)知識(shí)點(diǎn)。期末成績占總成績的40%。

為了培養(yǎng)學(xué)生動(dòng)手能力,增加上機(jī)實(shí)踐考核。上機(jī)實(shí)踐采用階段式的考核方式。為了避免學(xué)生的抄襲,培養(yǎng)自我學(xué)習(xí)的能力,上機(jī)考核的內(nèi)容不做統(tǒng)一規(guī)定。學(xué)生至少完成兩個(gè)題目,一個(gè)是線性結(jié)構(gòu)插入h除等操作;另一個(gè)是非線性結(jié)構(gòu)和排序中選出一個(gè)題目。兩個(gè)題目分別在期中和期末考試之前考核完畢,考核的重點(diǎn)是看學(xué)生對程序的理解、上機(jī)熟練操作的程度以及答辯情況。為了鼓勵(lì)學(xué)生的學(xué)習(xí)興趣和對后續(xù)課程的延伸,對于在實(shí)踐操作中表現(xiàn)出色,勇于創(chuàng)新的學(xué)生給予加分的獎(jiǎng)勵(lì)。實(shí)踐題目完成情況占總成績的23%,獎(jiǎng)勵(lì)加分占2%。

降低平時(shí)成績。現(xiàn)行的考核體系中平時(shí)成績所占的比重偏高。平時(shí)成績的主要來源應(yīng)該是學(xué)生理論課的課堂表現(xiàn),包括出勤。從課堂的表現(xiàn)可以看出學(xué)生對問題的理解和思考,出勤可以看出學(xué)生的學(xué)習(xí)態(tài)度。平時(shí)成績占總成績的5%。

三、考核的結(jié)果分析

考核結(jié)果的分析主要從橫向和縱向兩個(gè)方面進(jìn)行對比。橫向是指不同年級(jí)的同一門課程(10級(jí)和11級(jí)對比);縱向是指同年級(jí)學(xué)生的兩門課程(11級(jí)的計(jì)算機(jī)方向?qū)I(yè)課程只開設(shè)了《面向?qū)ο蟪绦蛟O(shè)計(jì)》和《數(shù)據(jù)結(jié)構(gòu)與算法》)。橫向?qū)Ρ鹊慕Y(jié)果表明同一門課程不同年級(jí)學(xué)生的掌握情況,縱向?qū)Ρ鹊慕Y(jié)果顯示出來的是學(xué)生的基礎(chǔ)和對后續(xù)課程的影響。

本次考核的主要對象是信息與計(jì)算科學(xué)系11級(jí)學(xué)生共78人,《數(shù)據(jù)結(jié)構(gòu)與算法》課程成績分布如下:

單獨(dú)的成績很難說明問題,下面從橫、縱兩個(gè)方面結(jié)合具體的數(shù)據(jù)進(jìn)行分析?!稊?shù)據(jù)結(jié)構(gòu)與算法》和《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程11級(jí)和10級(jí)學(xué)生成績分析如下表:

縱向?qū)Ρ龋簭男畔?1級(jí)《數(shù)據(jù)結(jié)與算法》和《面向?qū)ο蟪绦蛟O(shè)計(jì)》兩門課程成績分析可以看出11級(jí)學(xué)生對《面向?qū)ο蟪绦蛟O(shè)計(jì)》掌握情況不好,從及格率、優(yōu)秀率、最高分以及最低分中都能體現(xiàn)出來,先行課的學(xué)習(xí)情況直接影響后續(xù)課程。

橫向?qū)Ρ龋簭臄?shù)據(jù)表中可以看出11級(jí)的成績最高分和最低分要比10級(jí)好,兩個(gè)年級(jí)及格率的差距很小。11級(jí)的不及格率是10級(jí)的1倍,平均分差了9分,得出的結(jié)論是11級(jí)學(xué)生的基礎(chǔ)差很多。

通過兩組數(shù)據(jù)的對比,不難看出,11級(jí)學(xué)生學(xué)習(xí)先行課《面向?qū)ο蟪绦蛟O(shè)計(jì)》的情況不好。11級(jí)《數(shù)據(jù)結(jié)構(gòu)與算法》不及格率比10級(jí)低0.74%,平均分低0.71,但優(yōu)秀率高3.43%,最低分和最高分的差距由80分縮小到62分。就11級(jí)學(xué)生《數(shù)據(jù)結(jié)構(gòu)與算法》和先行課《面向?qū)ο蟪绦蛟O(shè)計(jì)》的成績對比來說,最低分和最高分的差距由92分縮小到62分,及格率提高23.65%,平均分提高16.49分,優(yōu)秀率提高3.95%。從成績上可以看出11級(jí)的學(xué)生整體成績有所提高。也就是說明本次的課程考核改革取得了相應(yīng)的效果。

四、考核中存在的問題

篇4

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu)與算法分析;課程體系;研究型大學(xué);創(chuàng)新性教學(xué)

為落實(shí)教育部“高等學(xué)校教學(xué)質(zhì)量與教學(xué)改革工程”,湖南大學(xué)肩負(fù)著為建設(shè)創(chuàng)新型國家而培養(yǎng)創(chuàng)新型拔尖人才的重大歷史使命[1]。湖南大學(xué)計(jì)算機(jī)與通信學(xué)院為進(jìn)一步貫徹以人為本、因材施教的辦學(xué)理念,加速培養(yǎng)基礎(chǔ)寬厚、學(xué)科知識(shí)交叉的復(fù)合型人才,充分調(diào)動(dòng)學(xué)生學(xué)習(xí)積極性,以精品課程為目標(biāo),進(jìn)行研究型大學(xué)創(chuàng)新性課程建設(shè),實(shí)施設(shè)計(jì)與創(chuàng)新型人才培養(yǎng)模式的本科教學(xué)質(zhì)量工程[2]。在學(xué)院制定的新本科教學(xué)計(jì)劃中,“數(shù)據(jù)結(jié)構(gòu)與算法分析”是四門學(xué)科通識(shí)教育課之一。課程教學(xué)團(tuán)隊(duì)結(jié)合學(xué)校和學(xué)院的教學(xué)質(zhì)量工程要求,對課程進(jìn)行了全面的創(chuàng)新建設(shè)。

1 “數(shù)據(jù)結(jié)構(gòu)與算法分析”課程的地位

計(jì)算機(jī)專業(yè)的學(xué)生今后無論是從事硬件方向的工作,還是從事軟件方向的工作,其程序設(shè)計(jì)和算法設(shè)計(jì)與分析的能力都是非常重要的!隨著計(jì)算機(jī)應(yīng)用領(lǐng)域的擴(kuò)大和軟硬件的發(fā)展,計(jì)算機(jī)加工處理的數(shù)據(jù)越來越龐大和復(fù)雜,而且對其處理的效率也提出了更高的需求[3]。“數(shù)據(jù)結(jié)構(gòu)與算法分析”就是隨著處理對象的復(fù)雜性不斷增加而發(fā)展起來的一門課程,作為計(jì)算機(jī)專業(yè)的核心課程,它在專業(yè)人才培養(yǎng)鏈條中占有舉足輕重的地位,它是一門承上啟下的樞紐課程,同時(shí)也是一門實(shí)踐性很強(qiáng)的專業(yè)技術(shù)基礎(chǔ)課程[4]。

2研究創(chuàng)新性“數(shù)據(jù)結(jié)構(gòu)與算法分析”課程的目標(biāo)

研究型大學(xué)既要培養(yǎng)研究型人才,也必須培養(yǎng)高質(zhì)量的應(yīng)用型人才,即必須多目標(biāo)培養(yǎng)人才[5]。同時(shí)為貫徹教育部本科教學(xué)質(zhì)量工程提出的顯著增強(qiáng)學(xué)生的實(shí)踐能力和創(chuàng)新精神的要求。我們制定研究創(chuàng)新性“數(shù)據(jù)結(jié)構(gòu)與算法分析”課程的目標(biāo)是:激發(fā)創(chuàng)新意識(shí),培養(yǎng)研究興趣,訓(xùn)練兩種能力,提高實(shí)踐技能。

研究數(shù)據(jù)結(jié)構(gòu)的目的是為了學(xué)會(huì)編寫更高效的程序,基于追求更有效率程序的創(chuàng)新理念,引入并加強(qiáng)“權(quán)衡”的概念,培養(yǎng)學(xué)生研究數(shù)據(jù)結(jié)構(gòu)相關(guān)的代價(jià)和效益的興趣和方法。通過課程教學(xué)和實(shí)驗(yàn),訓(xùn)練數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)和算法分析兩種能力。這兩種能力有以下三個(gè)層次:1)學(xué)會(huì)常用的數(shù)據(jù)結(jié)構(gòu),形成一個(gè)程序員的基本數(shù)據(jù)結(jié)構(gòu)工具箱,在解決實(shí)際問題時(shí),能熟練使用數(shù)據(jù)結(jié)構(gòu)來表示和存儲(chǔ)問題中待處理的數(shù)據(jù)元素。2)熟練地應(yīng)用各種常用的數(shù)據(jù)結(jié)構(gòu)。掌握對每一個(gè)數(shù)據(jù)結(jié)構(gòu)和相關(guān)基本操作算法所花費(fèi)的時(shí)間和空間代價(jià)的分析方法。針對實(shí)際問題所要求的資源限制,能確定工具箱中的哪一個(gè)數(shù)據(jù)結(jié)構(gòu)對于該問題是最合適的,即解決方案是最有效率的。3)了解研究數(shù)據(jù)結(jié)構(gòu)和算法分析的方法,培養(yǎng)研究數(shù)據(jù)結(jié)構(gòu)的興趣,為在解決實(shí)際問題中,能發(fā)明新的數(shù)據(jù)結(jié)構(gòu)和進(jìn)行正確的算法分析打下良好的基礎(chǔ)。

通過該課程的學(xué)習(xí),我們不僅要讓學(xué)生掌握數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)及其相應(yīng)的算法,更重要的是激發(fā)學(xué)生的研究創(chuàng)新意識(shí),培養(yǎng)學(xué)生研究問題和解決問題的能力,即能夠把現(xiàn)實(shí)世界中的客觀問題變換為在計(jì)算機(jī)內(nèi)的表示形式,學(xué)會(huì)組織數(shù)據(jù)、選擇算法、養(yǎng)成良好的程序設(shè)計(jì)風(fēng)格。所以,“數(shù)據(jù)結(jié)構(gòu)與算法分析”的教學(xué)要以培養(yǎng)學(xué)生的實(shí)踐能力為核心,重點(diǎn)提高學(xué)生的分析設(shè)計(jì)能力和編程能力,進(jìn)而提高學(xué)生的系統(tǒng)的認(rèn)知、設(shè)計(jì)、開發(fā)、應(yīng)用能力,為研究數(shù)據(jù)處理的科學(xué)問題和創(chuàng)新解決問題的科學(xué)方法打下堅(jiān)實(shí)的基礎(chǔ)。

3研究創(chuàng)新性“數(shù)據(jù)結(jié)構(gòu)與算法分析”課程建設(shè)

3.1教學(xué)計(jì)劃

在創(chuàng)新與設(shè)計(jì)型人才培養(yǎng)模式探索過程中,學(xué)院基于基礎(chǔ)厚實(shí)、學(xué)以致用、知識(shí)技能并重的理念,大膽重設(shè)課程體系,實(shí)現(xiàn)通識(shí)教育基礎(chǔ)上的寬口徑專業(yè)教育的兩階段培養(yǎng)模式,并將實(shí)驗(yàn)教學(xué)組成相對獨(dú)立體系,提出了“課程實(shí)驗(yàn)――實(shí)驗(yàn)課程――工程設(shè)計(jì)訓(xùn)練――畢業(yè)設(shè)計(jì)”四級(jí)實(shí)驗(yàn)體系[2]。學(xué)院選出“數(shù)據(jù)結(jié)構(gòu)與算法分析”等四門專業(yè)基礎(chǔ)課程作為專業(yè)學(xué)科通識(shí)教育平臺(tái)課程。要求課程相對穩(wěn)定,安排足夠?qū)W時(shí),力求講透講深,夯實(shí)專業(yè)學(xué)科的理論基礎(chǔ)。安排足夠的課程實(shí)驗(yàn)學(xué)時(shí),通過課程實(shí)驗(yàn)使學(xué)生鞏固加深對理論知識(shí)的理解;以及通過相應(yīng)的實(shí)驗(yàn)課程,訓(xùn)練和增強(qiáng)學(xué)生綜合運(yùn)用知識(shí)的能力。圖1 給出了本科教學(xué)計(jì)劃的部分運(yùn)行圖。由圖可知,“數(shù)據(jù)結(jié)構(gòu)與算法分析”在課程體系中的安排,凸顯了其作為培養(yǎng)學(xué)生專業(yè)基本能力的地位和作用,強(qiáng)調(diào)計(jì)算思維能力、算法設(shè)計(jì)與分析能力和程序設(shè)計(jì)與實(shí)現(xiàn)能力的訓(xùn)練和培養(yǎng),為全面培養(yǎng)學(xué)生的創(chuàng)新與設(shè)計(jì)能力打下堅(jiān)實(shí)基礎(chǔ)。

3.2教學(xué)大綱

課程教學(xué)大綱根據(jù)近年全國碩士研究生入學(xué)統(tǒng)一考試計(jì)算機(jī)科學(xué)與技術(shù)學(xué)科綜合考試大綱中的要求,參考全國著名高等院校近幾年使用的教材以及期末考試、研究生入學(xué)考試試題編制而成。教學(xué)內(nèi)容包括54個(gè)知識(shí)點(diǎn),分為:數(shù)據(jù)結(jié)構(gòu)緒論,算法分析,線性表,棧、隊(duì)列和數(shù)組,樹和二叉樹,圖,查找和內(nèi)部排序八個(gè)部分。每個(gè)知識(shí)點(diǎn)根據(jù)課程目標(biāo)中三個(gè)能力層次要求分為基礎(chǔ)知識(shí),重點(diǎn)知識(shí),提高知識(shí),并為其設(shè)計(jì)相應(yīng)的教學(xué)內(nèi)容,教學(xué)進(jìn)度,作業(yè)題或?qū)嶒?yàn)題以及考查評價(jià)要求。

如教學(xué)大綱中線性表部分。通過這部分的課堂和實(shí)驗(yàn)教學(xué),要求學(xué)生熟練掌握線性表的基本性質(zhì),及其順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的描述方法,以及線性表的各種基本操作的實(shí)現(xiàn),這是該部分的基礎(chǔ)知識(shí),注重課程目標(biāo)中能力層次一的培養(yǎng)。理解線性表的兩類存儲(chǔ)結(jié)構(gòu)的特點(diǎn),能夠從時(shí)間和空間復(fù)雜度的角度綜合比較兩類存儲(chǔ)結(jié)構(gòu)和各種基本操作性能的不同特點(diǎn)及其適用場合,這是該部分的重點(diǎn)知識(shí),注重課程目標(biāo)中能力層次二的培養(yǎng)。了解從實(shí)際應(yīng)用問題的需求分析中發(fā)現(xiàn)待處理數(shù)據(jù)具有線性關(guān)系的方法,以及如何設(shè)計(jì)合適的基本操作,這是該部分的提高知識(shí),注重課程目標(biāo)中能力層次三的培養(yǎng)。重點(diǎn)考查學(xué)生對線性表的基本概念和基本應(yīng)用的掌握,以及對線性表兩種存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)(尤其是鏈表實(shí)現(xiàn))的特點(diǎn)的理解情況。通過實(shí)驗(yàn)和算法設(shè)計(jì)題考查學(xué)生對線性表靈活運(yùn)用的程度。

3.3教材建設(shè)

由于計(jì)算機(jī)科學(xué)是一門快速發(fā)展的新興科學(xué),數(shù)據(jù)結(jié)構(gòu)與算法分析的理論、概念和方法隨著程序設(shè)計(jì)方法學(xué)和程序設(shè)計(jì)語言的發(fā)展不斷發(fā)展和更新。這些情況給課程的教材建設(shè)提出了更高的要求:必須緊跟計(jì)算機(jī)科學(xué)技術(shù)發(fā)展的步伐[6]。在選材上,我們始終堅(jiān)持統(tǒng)一要求和因材施教的原則,確保教材內(nèi)容的組織科學(xué)、合理,體系得當(dāng)。選取的課堂教學(xué)教材,內(nèi)容涵蓋了教學(xué)大綱中確定的所有知識(shí)點(diǎn),并根據(jù)課程的培養(yǎng)目標(biāo),以及學(xué)生的學(xué)習(xí)基礎(chǔ)和興趣需求,選用了三本高水平教材――嚴(yán)蔚編的《數(shù)據(jù)結(jié)構(gòu)(C語言版)》、Clifford A. Shaffer主編的《數(shù)據(jù)結(jié)構(gòu)與算法分析(C++版)》和Sartaj Sahni主編的《數(shù)據(jù)結(jié)構(gòu)、算法與應(yīng)用(C++語言描述)》。經(jīng)過幾年的教學(xué)實(shí)踐,學(xué)生普遍反映嚴(yán)老師的書在講解知識(shí)點(diǎn)時(shí),能夠把抽象的內(nèi)容表述得更明確、更具體、更便于學(xué)生理解和把握。兩位美國教授編寫的教材都使用C++語言描述數(shù)據(jù)結(jié)構(gòu)和算法,使得數(shù)據(jù)結(jié)構(gòu)與面向?qū)ο蟮乃枷刖o密結(jié)合。Shaffer的書還結(jié)合算法分析來討論各種存儲(chǔ)方法和算法的利弊,如何設(shè)計(jì)出有效率的算法,如何根據(jù)應(yīng)用需求選擇最佳方案,這種“授人以漁”的思想極大激發(fā)學(xué)生的思考熱情。Sartaj Sahni的書最大特色就是強(qiáng)調(diào)應(yīng)用,通過現(xiàn)實(shí)生活中的許多應(yīng)用實(shí)例具體演示了各種數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計(jì)方法,使學(xué)生能了解學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)后如何應(yīng)用到實(shí)際工作中去,學(xué)以致用。

只靠讀書是不能學(xué)會(huì)靈活使用數(shù)據(jù)結(jié)構(gòu)的。課程的教學(xué)目的不僅是讓學(xué)生掌握各種數(shù)據(jù)結(jié)構(gòu),更重要的是培養(yǎng)學(xué)生解決實(shí)際問題的能力。因此,上機(jī)實(shí)驗(yàn)是課程教學(xué)的重要環(huán)節(jié)。為了幫助學(xué)生進(jìn)行有效的實(shí)驗(yàn)訓(xùn)練,我們積累多年實(shí)驗(yàn)教學(xué)改革經(jīng)驗(yàn),編寫了《數(shù)據(jù)結(jié)構(gòu)與算法分析課程實(shí)踐》講義,用于指導(dǎo)學(xué)生的課程實(shí)驗(yàn)教學(xué)。在講義中不僅精心設(shè)計(jì)題目,緊扣理論內(nèi)容,由淺入深,循序漸進(jìn)地培養(yǎng)學(xué)生計(jì)算思維能力、算法設(shè)計(jì)與實(shí)現(xiàn)能力,而且給出了實(shí)習(xí)步驟和實(shí)習(xí)報(bào)告的規(guī)范,訓(xùn)練學(xué)生軟件工程的能力。教學(xué)實(shí)踐表明,學(xué)生通過上機(jī)訓(xùn)練和完成實(shí)驗(yàn)報(bào)告,不僅加深了對理論知識(shí)的理解,提高了復(fù)雜程序設(shè)計(jì)的技能,而且培養(yǎng)了良好程序設(shè)計(jì)的習(xí)慣和工作作風(fēng)。

數(shù)據(jù)結(jié)構(gòu)與算法分析是實(shí)踐性很強(qiáng)的課程,僅靠上課和上機(jī)中學(xué)習(xí)是絕對不夠的。為了給學(xué)生在課外自學(xué)和練習(xí)中提供指導(dǎo),我們編寫了《ACM程序設(shè)計(jì)培訓(xùn)教程》,并提供在線評測系統(tǒng)供學(xué)生隨時(shí)測試。這樣做可以充分調(diào)動(dòng)學(xué)生的學(xué)習(xí)積極性和主動(dòng)性,并使其鉆研更深、更新、更難的問題,提高研究創(chuàng)新能力。

3.4教學(xué)組織

多年來,本課程教學(xué)團(tuán)隊(duì)已積累了一套“課堂―課程實(shí)驗(yàn)―實(shí)驗(yàn)課程―課外自學(xué)輔導(dǎo)”四個(gè)環(huán)節(jié)相互配合,提倡激發(fā)興趣,精講多練,重點(diǎn)突出,培養(yǎng)專業(yè)基本能力和研究創(chuàng)新的教學(xué)實(shí)施方案。

課堂環(huán)節(jié)注重計(jì)算思維能力的訓(xùn)練。在講授具體課程內(nèi)容時(shí),要精講,把重點(diǎn)要講透徹,把難點(diǎn)加以分解,讓學(xué)生能理解。要串講:把前后相互關(guān)聯(lián)的多個(gè)知識(shí)點(diǎn)串講,總結(jié)其中的共性,突出各自的特點(diǎn),分析相互的差別。要活講,除了講解基本的知識(shí),更要授人以漁,要把“分析問題中待處理的數(shù)據(jù)建立抽象數(shù)據(jù)類型、根據(jù)物理存儲(chǔ)特點(diǎn)建立物理數(shù)據(jù)結(jié)構(gòu)、設(shè)計(jì)有效率的存儲(chǔ)結(jié)構(gòu)和基本操作算法、分析各種數(shù)據(jù)結(jié)構(gòu)和基本操作算法特點(diǎn)和適用性”這樣一條學(xué)習(xí)主線給予詳細(xì)的介紹,引導(dǎo)學(xué)生有效地學(xué)習(xí)理論知識(shí),進(jìn)行計(jì)算思維能力的訓(xùn)練,使學(xué)生掌握創(chuàng)新地學(xué)習(xí)的能力,以激發(fā)學(xué)生對問題的探索精神。

實(shí)驗(yàn)注重算法、程序設(shè)計(jì)與分析能力的訓(xùn)練。通過實(shí)驗(yàn)報(bào)告文檔,訓(xùn)練學(xué)生的算法設(shè)計(jì)和分析能力,通過上機(jī)實(shí)踐,訓(xùn)練學(xué)生的程序設(shè)計(jì)和調(diào)試能力。實(shí)驗(yàn)實(shí)踐環(huán)節(jié)由簡單到復(fù)雜,通過精心挑選的驗(yàn)證型、技能型、創(chuàng)新與設(shè)計(jì)型三類實(shí)驗(yàn)題目,提升學(xué)生對理論知識(shí)的理解和應(yīng)用能力,促進(jìn)學(xué)生的創(chuàng)新研究思維。對每次實(shí)驗(yàn)的目的、原理、實(shí)驗(yàn)步驟、注意事項(xiàng)和實(shí)驗(yàn)要求都做出了詳細(xì)的說明,突出了實(shí)驗(yàn)的重點(diǎn),并編寫了詳細(xì)的實(shí)習(xí)指導(dǎo)書,包括實(shí)習(xí)報(bào)告范例、難度不同的程序范例,便于學(xué)生從模板開始,快速入門與提高。實(shí)驗(yàn)報(bào)告包括需求分析,概要設(shè)計(jì),詳細(xì)設(shè)計(jì),調(diào)試分析,測試結(jié)果,使用說明和實(shí)驗(yàn)心得七個(gè)方面。嚴(yán)格實(shí)施這些貌似繁瑣的規(guī)范,對于學(xué)生基本程序設(shè)計(jì)素養(yǎng)的培養(yǎng)和研究問題方法的訓(xùn)練,將能起到顯著的促進(jìn)作用。

課外自學(xué)輔導(dǎo)注重因材施教,滿足不同的學(xué)習(xí)需求。學(xué)生的興趣、專長,接受能力、自學(xué)能力都有差異,課堂上“均等和有限”的教學(xué)不能達(dá)到因材施教的目的。在課堂上,教師只能針對程度一般的多數(shù)學(xué)生的情況進(jìn)行教學(xué),對于程度差的學(xué)生要靠個(gè)別的輔導(dǎo),幫助其積累知識(shí)和提高理解能力,跟上一般學(xué)生的進(jìn)度。對于優(yōu)等生,也要進(jìn)行個(gè)別的指導(dǎo),指定課外讀物,加大信息量,布置思考題,調(diào)動(dòng)其潛能,引導(dǎo)其創(chuàng)新。對于尖子生,我們還有一條措施,讓其參加程序設(shè)計(jì)競賽,組織和指導(dǎo)他們參加全國性的學(xué)科競賽,促使他們脫穎而出。

3.5教學(xué)研究

為實(shí)現(xiàn)培養(yǎng)“寬口徑、厚基礎(chǔ)、強(qiáng)能力、高素質(zhì)”的研究型人才的教學(xué)理念,學(xué)院對包括數(shù)據(jù)結(jié)構(gòu)與算法分析在內(nèi)的四門學(xué)科通識(shí)教育課程進(jìn)行重點(diǎn)建設(shè),組織專業(yè)教師認(rèn)真總結(jié)多年來的教學(xué)經(jīng)驗(yàn),深入開展教學(xué)研究,提出一系列合理的教改方案。

1) 優(yōu)化調(diào)整專業(yè)培養(yǎng)計(jì)劃。

2009年初,為配合學(xué)校的人才培養(yǎng)模式向研究型轉(zhuǎn)變的本科教育培養(yǎng)計(jì)劃改革,學(xué)院制定了新的旨在培養(yǎng)設(shè)計(jì)與創(chuàng)新型人才的課程體系和實(shí)驗(yàn)體系,把“數(shù)據(jù)結(jié)構(gòu)與算法分析”課程定位在學(xué)科通識(shí)教育課程,全院所有專業(yè)的學(xué)生必修。同時(shí)把該課程從第四學(xué)期提前到第三學(xué)期,并與第一學(xué)期開設(shè)的程序設(shè)計(jì)基礎(chǔ),第二學(xué)期開設(shè)的高等程序設(shè)計(jì)和軟件基礎(chǔ)實(shí)驗(yàn)1,以及第四學(xué)期的軟件基礎(chǔ)實(shí)驗(yàn)2,構(gòu)成一組課程體系,保證本科生在通識(shí)教育培養(yǎng)的兩年中,每個(gè)學(xué)期都開設(shè)程序設(shè)計(jì)方面的課程,為培養(yǎng)設(shè)計(jì)與創(chuàng)新型人才夯實(shí)學(xué)科基礎(chǔ)。

2) 基于課程責(zé)任制的師資隊(duì)伍建設(shè)。

近幾年,學(xué)院在教學(xué)改革中大力實(shí)施定崗定編和課程責(zé)任制改革。根據(jù)教師的科研方向分配教學(xué)任務(wù),同時(shí)按照課程特色組合多個(gè)教學(xué)團(tuán)隊(duì),并與教師所屬的科研團(tuán)隊(duì)互相關(guān)聯(lián),達(dá)到科研與教學(xué)相結(jié)合促進(jìn)教學(xué)質(zhì)量提高的目的。

3) 以申報(bào)精品課程為契機(jī)加速課程信息化建設(shè)。

以課程建設(shè)促進(jìn)專業(yè)建設(shè),打造精品課程是學(xué)院對每門專業(yè)核心課程的要求。根據(jù)精品課程建設(shè)的要求,開發(fā)了課程網(wǎng)站,學(xué)生可以隨時(shí)訪問網(wǎng)站獲取課程資源、在線播放課件、習(xí)題指導(dǎo)等;開發(fā)實(shí)驗(yàn)與實(shí)踐在線評測系統(tǒng),學(xué)生可隨時(shí)上網(wǎng)提交軟件在線評測,并在學(xué)習(xí)園地學(xué)習(xí)交流。開發(fā)ACM競賽培訓(xùn)網(wǎng)站,為喜愛編程的學(xué)生提供交流和切磋的平臺(tái)。

4) 培養(yǎng)設(shè)計(jì)與創(chuàng)新人才的實(shí)踐教學(xué)體系建設(shè)。

學(xué)院提出了“課程實(shí)驗(yàn)―實(shí)驗(yàn)課程―工程設(shè)計(jì)訓(xùn)練―畢業(yè)設(shè)計(jì)”的新型特色實(shí)踐教學(xué)體系。明確“課程實(shí)驗(yàn)”和“實(shí)驗(yàn)課程”的內(nèi)涵與目標(biāo),要求所有核心課程必有此環(huán)節(jié)[2]。“數(shù)據(jù)結(jié)構(gòu)與算法分析”作為訓(xùn)練學(xué)生計(jì)算思維、算法設(shè)計(jì)和分析能力和程序設(shè)計(jì)與實(shí)現(xiàn)能力的重要課程,對課程實(shí)驗(yàn)和實(shí)驗(yàn)課程的實(shí)踐教學(xué)環(huán)節(jié)不斷改革創(chuàng)新,如教學(xué)團(tuán)隊(duì)積累多年實(shí)踐教學(xué)經(jīng)驗(yàn),編寫了《數(shù)據(jù)結(jié)構(gòu)與算法分析課程實(shí)踐》講義,用于指導(dǎo)學(xué)生的課程實(shí)踐教學(xué)。申請多個(gè)SIT項(xiàng)目,為學(xué)生提供研究創(chuàng)新平臺(tái)。編寫了《ACM程序設(shè)計(jì)培訓(xùn)教程》教材,對喜歡算法和程序設(shè)計(jì)的學(xué)生進(jìn)行指導(dǎo),使學(xué)生在各類與程序設(shè)計(jì)相關(guān)的學(xué)科競賽中頻獲佳績。

4結(jié)語

“數(shù)據(jù)結(jié)構(gòu)與算法分析”是計(jì)算機(jī)專業(yè)的一門核心課程,學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計(jì)分析不僅為學(xué)習(xí)后續(xù)課程建立基礎(chǔ),也有益于創(chuàng)新與設(shè)計(jì)型人才的培養(yǎng)。

為了不使教學(xué)過程過于抽象和枯燥,我們要充分調(diào)動(dòng)學(xué)生主動(dòng)學(xué)習(xí)的積極性,提高教學(xué)的趣味性;大力提高學(xué)生的實(shí)踐能力和知識(shí)應(yīng)用能力,注重創(chuàng)新研究能力的培養(yǎng)。借著學(xué)院新型課程體系和新型特色實(shí)踐教學(xué)體系改革的春風(fēng),我們明確了培養(yǎng)創(chuàng)新與設(shè)計(jì)人才的理念,針對數(shù)據(jù)結(jié)構(gòu)與算法分析課程能力培養(yǎng)三層目標(biāo),在繼承原有教學(xué)體系中關(guān)注課堂教學(xué)的基礎(chǔ)上,加強(qiáng)實(shí)踐教學(xué)環(huán)節(jié)和課外輔導(dǎo)提高環(huán)節(jié),使這門課程的教學(xué)更加系統(tǒng)和全面。實(shí)踐證明,這種新模式對提升教學(xué)質(zhì)量非常必要,近幾年,學(xué)生和校督導(dǎo)團(tuán)的評教成績在學(xué)院名列前茅,該課程已通過省精品課程評審,用新模式培養(yǎng)出來的學(xué)生陸續(xù)在全國各種大賽上獲得較好名次,在2010年ACM亞洲區(qū)比賽中我院學(xué)生獲得兩個(gè)金獎(jiǎng)。

按照學(xué)院提出的“創(chuàng)新與設(shè)計(jì)型人才”培養(yǎng)目標(biāo)?!皵?shù)據(jù)結(jié)構(gòu)與算法分析”課程教學(xué)工作從課堂教學(xué)和實(shí)踐教學(xué)兩個(gè)方面進(jìn)行建設(shè)和完善,精品課程網(wǎng)站和實(shí)驗(yàn)與實(shí)踐在線評測系統(tǒng)已經(jīng)投入使用,課程教學(xué)輔助課件在逐步建設(shè)中,符合創(chuàng)新與設(shè)計(jì)型人才培養(yǎng)目標(biāo)的教材正在編寫中,相信“數(shù)據(jù)結(jié)構(gòu)與算法分析”這門課的教學(xué)質(zhì)量在教學(xué)改革中將不斷得到提高。

參考文獻(xiàn):

[1] 鐘秉林,董奇,葛岳靜,等. 創(chuàng)新型人才培養(yǎng)體系的構(gòu)建與實(shí)踐[J]. 中國大學(xué)教育,2009(11):22-24.

[2] 趙歡,駱嘉偉,李仁發(fā),等. 計(jì)算機(jī)專業(yè)設(shè)計(jì)與創(chuàng)新型人才培養(yǎng)模式及課程體系研究[R]. 武漢:第八屆全國計(jì)算機(jī)系主任論壇,2005,10.

[3] Gregory Goth. Turning Data Into Knowledge [J]. Communications on the ACM,2010,53(11):13-15.

[4] 教育部高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會(huì). 高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)人才專業(yè)能力構(gòu)成與培養(yǎng)[M]. 北京:機(jī)械工業(yè)出版社,2010.

[5] 張思東,張有根,高萬英,等. 重點(diǎn)大學(xué)既要培養(yǎng)研究型人才也必須培養(yǎng)高質(zhì)量的應(yīng)用型人才[R]. 深圳:全國電子高等教育學(xué)術(shù)研討會(huì),2003,11.

[6] 張乃孝. 編寫“數(shù)據(jù)結(jié)構(gòu)”教材的幾點(diǎn)體會(huì)[R]. 南京:第二屆大學(xué)計(jì)算機(jī)課程報(bào)告論壇,2006,7.

Constructing Innovative Curriculum of Data Structures and Algorithm Analysis

in Research-oriented University

LI Xiaohong, LUO Jiawei, YAN Hua, WU Hao

(School of Computer and Communication, Hunan University, Changsha 410082, China)

篇5

楊佩理

江蘇沙洲工學(xué)院

摘要:本文針對在采用虛擬現(xiàn)實(shí)技術(shù)描述地理地形時(shí)所要求的數(shù)據(jù)海量、處理復(fù)雜的特點(diǎn),采用金字塔分層結(jié)構(gòu),提出了細(xì)節(jié)層次算法的解決方案。探討了適應(yīng)于虛擬現(xiàn)實(shí)地理數(shù)據(jù)可視化的數(shù)據(jù)庫模型結(jié)構(gòu)。

關(guān)鍵詞:虛擬現(xiàn)實(shí);金字塔結(jié)構(gòu);細(xì)節(jié)層次算法

篇6

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu),前導(dǎo)課;算法

《數(shù)據(jù)結(jié)構(gòu)》不僅是程序設(shè)計(jì)的基礎(chǔ),而且是設(shè)計(jì)和實(shí)現(xiàn)編譯程序、操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)等系統(tǒng)程序和其它大型應(yīng)用程序的重要課程之一。為學(xué)生今后從事理論研究、應(yīng)用開發(fā)、技術(shù)管理工作提供了堅(jiān)實(shí)的理論基礎(chǔ),是專升本、考研和等級(jí)水平考試的必考科目,也是學(xué)生學(xué)習(xí)中感到比較吃力的一門課。

《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)目標(biāo)要求學(xué)生學(xué)會(huì)分析數(shù)據(jù)對象特征,掌握數(shù)據(jù)組織方法和計(jì)算機(jī)的表示方法,以便為應(yīng)用所涉及數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)及相應(yīng)算法,初步掌握算法時(shí)間空間分析的技巧,培養(yǎng)良好的程序設(shè)計(jì)技能。本文對如何學(xué)習(xí)、掌握《數(shù)據(jù)結(jié)構(gòu)》課程內(nèi)容進(jìn)行了探討,提出了切實(shí)可行的有效學(xué)習(xí)方法。

一、注意前導(dǎo)課知識(shí)的熟練掌握

《數(shù)據(jù)結(jié)構(gòu)》的前導(dǎo)課包括一門計(jì)算機(jī)語言(PASCAL、C或C++,本文以C++為例)和高等數(shù)學(xué)。要想輕松學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)》,必須先打好這兩門課的基礎(chǔ)。學(xué)生學(xué)習(xí)感到吃力主要是這兩門課掌握不牢,用起來生疏,算法思路有,但卻無從下手,不能熟練地用C++語句描述出來。所以,從c++語言入手,加強(qiáng)程序設(shè)計(jì)基本素質(zhì)的培養(yǎng),是學(xué)好數(shù)據(jù)結(jié)構(gòu)的重中之重。

C++知識(shí)點(diǎn)主要有:(1)包含文件語句:#include。例如,#include、#include、#include、#include是常用的系統(tǒng)頭文件。(2)函數(shù)和函數(shù)參數(shù)。在C++語言中,程序由一個(gè)名為main的主函數(shù)和若干個(gè)功能相對獨(dú)立的函數(shù)模塊組成。函數(shù)的調(diào)用是關(guān)鍵,要區(qū)分形參中值參和引用參數(shù)的使用?;竞瘮?shù)有:max(表達(dá)式1,…,表達(dá)式n)、min(表達(dá)式1,…,表達(dá)式n)、abs(表達(dá)式)、exit(表達(dá)式)。(3)運(yùn)算符重載。在數(shù)據(jù)結(jié)構(gòu)中經(jīng)常要用的是在自定義的結(jié)構(gòu)類型上對關(guān)系運(yùn)算符進(jìn)行重載,使得記錄同記錄之間、記錄同其中一個(gè)域類型的數(shù)據(jù)之間也能進(jìn)行比較。(4)類。當(dāng)開發(fā)者的應(yīng)用程序需定義自己的數(shù)據(jù)類型時(shí),要使用C++中的類。(5)抽象類型和模板。用于實(shí)現(xiàn)軟件的復(fù)用,提高利用率。(6)基本語句有:賦值語句、選擇語句、循環(huán)語句、結(jié)束語句、輸入/出語句、注釋語句等,一定要徹底理解、熟練掌握這些語句。通過C++的學(xué)習(xí),應(yīng)該建立起良好的程序設(shè)計(jì)思想。

計(jì)算機(jī)解決實(shí)際應(yīng)用問題及算法分析,涉及到很多數(shù)學(xué)知識(shí)。例如:集合、階乘函數(shù)、排列、組合、對數(shù)、級(jí)數(shù)求和、遞歸,反證法、數(shù)學(xué)歸納法等數(shù)學(xué)證明方法,要對這些基本知識(shí)加以熟悉。

二、數(shù)據(jù)結(jié)構(gòu)課程體系的歸納

數(shù)據(jù)結(jié)構(gòu)討論的范疇:數(shù)據(jù)成員以及它們相互之間的邏輯關(guān)系,也稱為數(shù)據(jù)的邏輯結(jié)構(gòu),簡稱為數(shù)據(jù)結(jié)構(gòu);數(shù)據(jù)成員極其關(guān)系在計(jì)算機(jī)存儲(chǔ)器內(nèi)的存儲(chǔ)表示,也稱為數(shù)據(jù)的物理結(jié)構(gòu),簡稱為存儲(chǔ)結(jié)構(gòu);施加于該數(shù)據(jù)結(jié)構(gòu)上的操作,ADT抽象數(shù)據(jù)類型描述。

教材的主體可以總結(jié)為:基本概念、三類數(shù)據(jù)結(jié)構(gòu),兩種存儲(chǔ)結(jié)構(gòu)、兩種算法。三類數(shù)據(jù)結(jié)構(gòu)有:線性(線性表、棧和隊(duì)列、串、數(shù)組和廣義表)、樹(樹和二叉樹)、圖等。兩種存儲(chǔ)結(jié)構(gòu)有:順序結(jié)構(gòu)和鏈接結(jié)構(gòu)。兩種算法為:查找、排序。抽象數(shù)據(jù)類型(Abstract Data Type,縮寫為ADT)是整個(gè)教材的核心。

抽象數(shù)據(jù)類型(Abstract Data Type,縮寫為ADT)包括數(shù)據(jù)結(jié)構(gòu)的定義、表示、操作實(shí)現(xiàn)三部分。定義如下:

ADT

Data:

Operation:

end()

數(shù)據(jù)結(jié)構(gòu)常見的操作有:插入、刪除、檢索、遍歷、排序等。每一種數(shù)據(jù)結(jié)構(gòu)可有多種不同的存儲(chǔ)方法。在不同的存儲(chǔ)結(jié)構(gòu)下,同一操作有不同的時(shí)間、空間復(fù)雜度。例如:線性表既可以用一維數(shù)組順序存儲(chǔ),也可用指針結(jié)構(gòu)鏈?zhǔn)酱鎯?chǔ)。向線性表中插入、刪除一個(gè)數(shù)據(jù)元素,順序存儲(chǔ)下,需平均移動(dòng)表中一半元素,而鏈?zhǔn)酱鎯?chǔ)下,僅需修改指針而不需移動(dòng)元素。所以,要根據(jù)實(shí)際應(yīng)用問題的操作,選用合適的存儲(chǔ)結(jié)構(gòu),以提高執(zhí)行效率。

三、總結(jié)章節(jié)特點(diǎn),指導(dǎo)數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)

針對每章不同特點(diǎn),總結(jié)學(xué)習(xí)方法及重點(diǎn)。如對線性表、樹、圖三種數(shù)據(jù)結(jié)構(gòu)均按照“邏輯結(jié)構(gòu)定義、特點(diǎn)、ADT描述;線性存儲(chǔ)結(jié)構(gòu)及ADT實(shí)現(xiàn)、算法復(fù)雜度分析;鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)及ADT實(shí)現(xiàn)、算法復(fù)雜度分析;典型應(yīng)用案例分析”模式進(jìn)行講解,也就是說,只要按此主線掌握了數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,就達(dá)到了學(xué)習(xí)目的。

對查找方法從概念、算法思想、查找過程、算法實(shí)現(xiàn)等方面去掌握,從查找速度、占用存儲(chǔ)空間多少、算法本身復(fù)雜程度、平均查找長度ASL(Average Search Length)等方面去評價(jià)分析各種方法,總結(jié)各自的適用條件。

對排序方法從概念、算法思想、排序過程、算法實(shí)現(xiàn)等方面去掌握,從排序所花費(fèi)的全部比較次數(shù)、移動(dòng)記錄次數(shù)、占內(nèi)存輔助空間的大小等分析時(shí)空復(fù)雜度,最后要考慮算法的穩(wěn)定性,總結(jié)各自的優(yōu)缺點(diǎn)及適用范圍。

四、算法的學(xué)習(xí)

算法設(shè)計(jì)技能是學(xué)好數(shù)據(jù)結(jié)構(gòu)的關(guān)鍵,根據(jù)學(xué)生學(xué)習(xí)的認(rèn)知特點(diǎn),主要從以下幾個(gè)方面進(jìn)行強(qiáng)化訓(xùn)練:

1 吃透課本例子。每學(xué)完一次新課,讓學(xué)生對課本例子先分析任務(wù)、再自己編寫算法與課本對照,找出不足,然后改進(jìn)。如此反復(fù)練習(xí),不僅能夠培養(yǎng)學(xué)生動(dòng)腦思考的習(xí)慣,而且還會(huì)養(yǎng)成遇事三思、認(rèn)真、周密的作風(fēng)。

2 精選上機(jī)題目,要求調(diào)試通過。每章找出一個(gè)綜合性的應(yīng)用題目,如怎樣設(shè)計(jì)旅游線路,使得費(fèi)用最少或路程最短;課程計(jì)劃的編排等,要求用C++語言編寫可執(zhí)行的源程序,上機(jī)調(diào)試。這樣不僅能夠鍛煉學(xué)生解決實(shí)際問題的能力,更重要的是能夠激發(fā)學(xué)生學(xué)習(xí)課程的興趣,抽象變具體,理論變實(shí)踐,對這門課有更深的認(rèn)識(shí)。

3 閱讀填空法。找一些經(jīng)典算法,配上必要的說明,適當(dāng)去掉語句或表達(dá)式,讓學(xué)生通過閱讀填補(bǔ)空白,訓(xùn)練學(xué)生的程序設(shè)計(jì)能力。

4 準(zhǔn)備一個(gè)經(jīng)驗(yàn)本,記下自己出錯(cuò)的解決方法及老師講解的其他同學(xué)出現(xiàn)的常見錯(cuò)誤,抽空常翻看,逐步積累經(jīng)驗(yàn),使以后避免。

5 強(qiáng)化和本課程密切相關(guān)的結(jié)構(gòu)體、指針和函數(shù)等知識(shí)點(diǎn)的再學(xué)習(xí)及上機(jī)訓(xùn)練。

6 加強(qiáng)算法閱讀訓(xùn)練,模擬執(zhí)行過程。通過大量的閱讀分析和模仿,吸取算法精華,提高編程能力。如對教材中的類C語言算法改寫程序,上機(jī)通過,掌握基本技能,鞏固課堂教學(xué)的內(nèi)容,加深了對算法的理解。

7 掌握算法設(shè)計(jì)的步驟。①明確算法要解決的問題目標(biāo)。②選擇合適的數(shù)據(jù)結(jié)構(gòu),確定在所選的數(shù)據(jù)結(jié)構(gòu)上必須有的操作,寫出抽象的算法,然后存儲(chǔ)結(jié)構(gòu)。③分解每個(gè)操作的實(shí)現(xiàn)步驟,用c++語言對應(yīng)地寫出實(shí)現(xiàn)程序。

有些學(xué)生經(jīng)過學(xué)習(xí)之后,雖然能看懂教材上的算法,但當(dāng)自己動(dòng)手設(shè)計(jì)算法解決實(shí)際問題時(shí)仍感到無從下手。解決這一問題除了掌握必要的方法之外,必須通過多練習(xí)多動(dòng)手,培養(yǎng)自己的程序設(shè)計(jì)經(jīng)驗(yàn)和素質(zhì)來解決。因此,要求學(xué)生必須認(rèn)真對待算法設(shè)計(jì)型的習(xí)題,通過多做這類習(xí)題來理解、消化和鞏固所學(xué)的知識(shí),提高分析問題、解決問題的能力以及編程能力。

篇7

【關(guān)鍵詞】數(shù)據(jù)結(jié)構(gòu);算法;軟件設(shè)計(jì)

1.經(jīng)典算法的選擇

選擇經(jīng)典算法的重要性,PASCAL語言的創(chuàng)始人、著名的計(jì)算機(jī)科學(xué)家N.沃思說得好“程序=數(shù)據(jù)結(jié)構(gòu)+算法”,足以見得算法在程序設(shè)計(jì)中的重要地位。在合理的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)上,算法是對數(shù)據(jù)結(jié)構(gòu)的操作(運(yùn)算),是數(shù)據(jù)處理的核心。在《數(shù)據(jù)結(jié)構(gòu)》中介紹的基本數(shù)據(jù)結(jié)構(gòu)有線性表、堆棧、隊(duì)列、數(shù)組、樹、二叉樹、圖以及相應(yīng)的算法。一個(gè)算法是建立在某種數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,一個(gè)算法不可能脫離數(shù)據(jù)結(jié)構(gòu)而孤立存在。只有通過學(xué)習(xí)算法,才能真正掌握某種數(shù)據(jù)結(jié)構(gòu)。可以說學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)》的過程基本上是學(xué)習(xí)各種算法的過程。在眾多的算法中有簡單的、有復(fù)雜的、有容易的、有難度大的,在有限的學(xué)時(shí)情況下,不可能也沒有必要逐一講解每一個(gè)算法。大多數(shù)的算法,要靠學(xué)生自己理解消化。在這種情況下,如何選擇少量的經(jīng)典算法進(jìn)行分析講解,顯得尤其重要。一個(gè)經(jīng)典算法往往能起到以一當(dāng)十、以點(diǎn)帶面的關(guān)鍵作用。通過經(jīng)典算法的分析,一方面讓學(xué)生加深對數(shù)據(jù)結(jié)構(gòu)基本理論的理解另一方面讓學(xué)生學(xué)習(xí)程序設(shè)計(jì)方法。

選擇好經(jīng)典算法后下一步就是要對其展開綜合分析,下面以具體的算法為例進(jìn)行討論。

2.利用經(jīng)典算法說明基本原理

2.1 經(jīng)典算法應(yīng)能體現(xiàn)某個(gè)數(shù)據(jù)結(jié)構(gòu)的基本特征

我們知道線性表順序存儲(chǔ)時(shí)其優(yōu)點(diǎn)是能夠?qū)γ總€(gè)數(shù)據(jù)元素隨機(jī)訪問,存儲(chǔ)密度高,其缺點(diǎn)是插入、刪除操作時(shí)需要移動(dòng)大量的數(shù)據(jù)元素,操作效率低?!跋蛴行颍ㄓ尚〉酱蠡蛴纱蟮叫。┑木€性表(順序存儲(chǔ))插入一個(gè)新的數(shù)據(jù)元素”,這一經(jīng)典算法集中反映了線性表順序存儲(chǔ)的這些特點(diǎn)。

分析:將一個(gè)值為X的數(shù)據(jù)元素插入到有序(由小到大或由大到小)的線性表(順序存儲(chǔ))中,可以分兩步進(jìn)行,首先查找到值為X的數(shù)據(jù)元素在線性表中應(yīng)有的位置,采用從頭到尾循環(huán)比較的方法確定其位置I,然后,將第I個(gè)以后的全部數(shù)據(jù)元素向后移動(dòng)一個(gè)存儲(chǔ)單元,最后將值為X的數(shù)據(jù)元素存放到第I個(gè)位置上,線性表元素個(gè)數(shù)增1。

【算法1】

PROCEDURE INSERT(V,m,n,X)

//將值為X的數(shù)據(jù)元素插入到V數(shù)組中,(線性表順序存貯在V中)m為最多元素個(gè)數(shù),n為當(dāng)前實(shí)際元素個(gè)數(shù)

IF (m=n) THEN{“OVERFLOW”; RETURN}

FOR I=1 TO n DO

IF (X〈V(I))THEN BREAK

FOR J=n TO I BY -1 DO V(J+1)=V(J)

V(I)=X

n=n+1

RETURN

分析:【算法1】的優(yōu)點(diǎn)是簡單,便于理解,缺點(diǎn)是:

①循環(huán)體內(nèi)有提前退出語句,不利于結(jié)構(gòu)化程序設(shè)計(jì);

②確定新數(shù)據(jù)元素位置和移動(dòng)數(shù)據(jù)元素分兩步進(jìn)行,有重復(fù)操作,可以改進(jìn)之,將兩步合并一步完成,即將循環(huán)比較與移動(dòng)數(shù)據(jù)元素同時(shí)進(jìn)行。從線性表的尾部開始向前循環(huán)比較,比新數(shù)據(jù)元素大者后移,直到小于等于時(shí)停止。

【算法2】

PROCEDURE INSERT(V,m,n,X)

IF(m=n)THEN{“OVERFLOW”;RETURN}

I=n

WHILE (I〉=1)AND (V(I)〉X)DO {V(I+1)=V(I);I=I-1}

V(I+1)=X

n=n+1

RETURN

分析:注意【算法2】中循環(huán)條件,當(dāng)循環(huán)結(jié)束后I=0或V(I)〈=X,新數(shù)據(jù)元素的位置為I+1,【算法1】的時(shí)間復(fù)雜度為0(2n),而【算法2】的時(shí)間復(fù)雜度為0(n),效率提高一倍。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)中最基本最核心的部分,歸納循環(huán)條件是關(guān)鍵?!舅惴?】能進(jìn)一步推廣。

2.2 利用經(jīng)典算法學(xué)習(xí)算法設(shè)計(jì)

經(jīng)典算法能給學(xué)習(xí)者以啟示、示范作用。

分析:可以將【算法2】用于對線性表(順序存儲(chǔ))排序算法中。在直接插入排序算法中,其算法思想是從第2個(gè)數(shù)據(jù)元素開始直到第n個(gè)數(shù)據(jù)元素,逐一插入到已有序的子線性表中。

【算法3】

PROCEDURE SORT(V,n)

FOR I=2 TO n DO

{ Y=V(I)

J=I-1

WHILE (J〉=1) AND (V(J)〉Y) DO {V(J+1)=V(J);J=J-1}

V(J+1)=Y }

RETURN

分析:【算示3】其結(jié)構(gòu)分為雙重循環(huán),外循環(huán)完成逐一取數(shù)據(jù)元素,即取第I個(gè)數(shù)據(jù)元素,內(nèi)循環(huán)完成將第I個(gè)數(shù)據(jù)元素插入到前I-1個(gè)已有序的子線性表中。內(nèi)循環(huán)完成的功能可以獨(dú)立成為一個(gè)子函數(shù)(子過程),可以借用【算法2】。這正是結(jié)構(gòu)化程序設(shè)計(jì)思想的體現(xiàn),即主程序完成任務(wù)的劃分,說明“做什么”,子函數(shù)(子過程)完成任務(wù)的具體實(shí)現(xiàn),說明“如何做”。結(jié)構(gòu)化程序設(shè)計(jì)方法采取“分解”的手段來控制系統(tǒng)的復(fù)雜性,將大系統(tǒng)劃分為若干個(gè)相對獨(dú)立的、功能單一的子模塊。一方面子函數(shù)(子過程)可以實(shí)現(xiàn)軟件的重用性,在不同的程序段有相同的處理過程時(shí)調(diào)用子函數(shù)(子過程),減少軟件開發(fā)的工作量;另一方面子函數(shù)(子過程)對具體的實(shí)現(xiàn)技術(shù)細(xì)節(jié)進(jìn)行隱藏,便于開發(fā)人員集中精力把握軟件開發(fā)的核心和主要問題,降低了軟件開發(fā)難度,從而保證軟件質(zhì)量。在利用【算法2】時(shí)要稍加修改,見【算法4】。

【算法4】

PROCEDURE INSERT(V,I,X)

//將值為X的數(shù)據(jù)元素插入到已有序的前I-1個(gè)數(shù)據(jù)元素中

J=I-1

Y=X

WHILE (J〉=1) AND (V(J)〉X) DO {V(J+1)=V(J);J=J-1}

V(J+1)=Y

RETURN

相應(yīng)的主程序也要作修改,見【算法5】

【算法5】

PROCEDURE SORT(V,n)

FOR I=2 TO n DO

INSERT(V,I,V(I))

RETURN

3.結(jié)束語

在眾多的算法中選擇好少量的經(jīng)典算法對于教好、學(xué)好《數(shù)據(jù)結(jié)構(gòu)》至關(guān)重要;經(jīng)典算法要有助于學(xué)生理解對應(yīng)的數(shù)據(jù)結(jié)構(gòu),經(jīng)典算法的分析要側(cè)重于程序設(shè)計(jì)能力的提高。

參考文獻(xiàn)

[1]歐建圣.數(shù)據(jù)結(jié)構(gòu)教學(xué)研究――經(jīng)典算法的綜合分析[J].武漢工程職業(yè)技術(shù)學(xué)院學(xué)報(bào),2004,16(1):58-60.

篇8

關(guān)鍵詞邏輯結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)操作運(yùn)算橫向聯(lián)系縱向聯(lián)系

1引言

數(shù)據(jù)結(jié)構(gòu)作為計(jì)算機(jī)核心學(xué)科,其主要研究內(nèi)容:邏輯結(jié)構(gòu),物理存儲(chǔ)結(jié)構(gòu),操作(或算法)[1]。通常,算法的設(shè)計(jì)取決于數(shù)據(jù)的邏輯結(jié)構(gòu),算法的實(shí)現(xiàn)取決于數(shù)據(jù)的物理存儲(chǔ)結(jié)構(gòu)。

根據(jù)數(shù)據(jù)元素之間不同特性,把數(shù)據(jù)結(jié)構(gòu)劃分四種基本結(jié)構(gòu):(1)集合,(2)線型結(jié)構(gòu),(3)樹型結(jié)構(gòu),(4)圖狀結(jié)構(gòu)或網(wǎng)狀結(jié)構(gòu)。針對每種數(shù)據(jù)結(jié)構(gòu)均從邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和操作運(yùn)算等方面進(jìn)行研究,是貫穿數(shù)據(jù)結(jié)構(gòu)研究始終的“紅線”,也是數(shù)據(jù)結(jié)構(gòu)研究的共同切入點(diǎn),稱之為數(shù)據(jù)結(jié)構(gòu)的“橫向聯(lián)系”。從集合、線型結(jié)構(gòu)等基本數(shù)據(jù)結(jié)構(gòu)入手,以實(shí)現(xiàn)樹形結(jié)構(gòu)、圖或網(wǎng)狀結(jié)構(gòu)等較復(fù)雜結(jié)構(gòu)研究,實(shí)現(xiàn)數(shù)據(jù)元素間的關(guān)系從簡單到復(fù)雜探討,稱之為“縱向聯(lián)系”。

2邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)、操作運(yùn)算的思想模式——數(shù)據(jù)結(jié)構(gòu)間的橫向聯(lián)系

邏輯結(jié)構(gòu)的定義、存儲(chǔ)結(jié)構(gòu)的實(shí)現(xiàn)、操作運(yùn)算的實(shí)現(xiàn)是對數(shù)據(jù)結(jié)構(gòu)研究的基本思想,一種數(shù)據(jù)結(jié)構(gòu)的研究首先對這三方面內(nèi)容有一個(gè)清晰的探討。

集合數(shù)據(jù)結(jié)構(gòu)與數(shù)學(xué)中集合概念是一致的,其邏輯結(jié)構(gòu)元素間只是同屬關(guān)系。存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)只是在計(jì)算機(jī)內(nèi)存儲(chǔ),它的操作就是一些交、差、并、補(bǔ)等。

線型結(jié)構(gòu)是N個(gè)數(shù)據(jù)元素的有限序列,至于每一個(gè)數(shù)據(jù)元素的具體的含義在不同的情況下各不相同,其長度可根據(jù)需要增長或縮短,其邏輯結(jié)構(gòu)就是它的數(shù)據(jù)元素間的線形關(guān)系,即一個(gè)對一個(gè),一個(gè)元素最多有一個(gè)前驅(qū),最多有一個(gè)后繼。它的存儲(chǔ)結(jié)構(gòu)的實(shí)現(xiàn)一般有順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)兩種方法。順序表是指用一組地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)線性結(jié)構(gòu)中的數(shù)據(jù)元素,這是一種隨機(jī)存取的存儲(chǔ)結(jié)構(gòu);鏈?zhǔn)酱鎯?chǔ)是數(shù)據(jù)元素之間的邏輯關(guān)系由結(jié)點(diǎn)中的指針來表示并且每一個(gè)結(jié)點(diǎn)有且只有一個(gè)指針域。線性結(jié)構(gòu)的操作中,最基本的操作是在線性結(jié)構(gòu)中插入、刪除數(shù)據(jù)元素。存儲(chǔ)結(jié)構(gòu)為順序存儲(chǔ)有線性順序表、數(shù)組、串等。存儲(chǔ)結(jié)構(gòu)為鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)時(shí)有鏈表等。根據(jù)線性表的操作的不同便產(chǎn)生了兩種重要的數(shù)據(jù)結(jié)構(gòu)即棧和隊(duì)列,這兩種數(shù)據(jù)結(jié)構(gòu)是線性結(jié)構(gòu)的典型例子[2]。

樹型結(jié)構(gòu)是一種重要的非線性結(jié)構(gòu),其中的樹和二叉樹最為常用。直觀看來,樹是以分支關(guān)系定義的層次結(jié)構(gòu),其邏輯結(jié)構(gòu)是一對多的關(guān)系,而在二叉樹中是一個(gè)根結(jié)點(diǎn)對應(yīng)左右兩個(gè)孩子的層次關(guān)系。存儲(chǔ)結(jié)構(gòu)的實(shí)現(xiàn)當(dāng)采取順序存儲(chǔ)時(shí)用一組地址連續(xù)的存儲(chǔ)單元依上而下、自左向右存儲(chǔ)樹中的結(jié)點(diǎn)元素。在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)中可采用二叉鏈表表示法即鏈表中結(jié)點(diǎn)的兩個(gè)鏈域分別指向該結(jié)點(diǎn)的第一個(gè)孩子和下一個(gè)兄弟結(jié)點(diǎn),樹形結(jié)構(gòu)的最基本的操作是遍歷,其它復(fù)雜的操作大部分就是遍歷操作的衍生與擴(kuò)展。在樹型結(jié)構(gòu)中最有特色的一種數(shù)據(jù)結(jié)構(gòu)就是二叉樹,其獨(dú)特的邏輯結(jié)構(gòu)是每個(gè)結(jié)點(diǎn)至多有二棵子樹并且還有左右之分,這就決定著它獨(dú)特的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),每個(gè)數(shù)據(jù)元素有且只有兩個(gè)指針分別指向該結(jié)點(diǎn)的左右孩子。二叉樹的最基本的操作是遍歷二叉樹,對每個(gè)結(jié)點(diǎn)的訪問是對其它復(fù)雜操作的基礎(chǔ),例如統(tǒng)計(jì)結(jié)點(diǎn)個(gè)數(shù)、統(tǒng)計(jì)葉子結(jié)點(diǎn)數(shù)、交換二叉樹的左右孩子等一些復(fù)雜的操作運(yùn)算均是遍歷二叉樹操作的擴(kuò)展和衍生?;诙鏄涞倪f歸定義可得到遍歷二叉樹遞歸算法,前序遍歷、中序遍歷、后序遍歷二叉樹。

圖狀結(jié)構(gòu)是一種較線型結(jié)構(gòu)和樹更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),圖的邏輯結(jié)構(gòu)是多對多的關(guān)系即在圖形結(jié)構(gòu)中結(jié)點(diǎn)之間的關(guān)系是任意的。因此在存儲(chǔ)結(jié)構(gòu)中無法以數(shù)據(jù)元素在存儲(chǔ)區(qū)中的物理位置來表示數(shù)據(jù)元素間的關(guān)系。即圖沒有順序映象但可以借助數(shù)組的數(shù)據(jù)類型表示元素之間的關(guān)系,用兩個(gè)數(shù)組分別存儲(chǔ)數(shù)據(jù)元素(頂點(diǎn))的信息和數(shù)據(jù)元素之間的關(guān)系信息[3]。另一方面圖的存儲(chǔ)結(jié)構(gòu)也可由多重鏈表實(shí)現(xiàn),即一個(gè)由一個(gè)數(shù)據(jù)域和多個(gè)指針域組成的結(jié)點(diǎn)來表示圖中的一個(gè)頂點(diǎn),其中數(shù)據(jù)域存儲(chǔ)該頂點(diǎn)的信息,指針域存儲(chǔ)指向鄰接點(diǎn)的指針,但由于圖中各個(gè)結(jié)點(diǎn)的度各不相同,結(jié)點(diǎn)的指針域設(shè)定不易確定,則圖的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)可用鄰接多重表表示法,對圖中每個(gè)頂點(diǎn)建立一個(gè)單鏈表,第一個(gè)單鏈表的結(jié)點(diǎn)表示依附于頂點(diǎn)V的邊,每個(gè)結(jié)點(diǎn)由三個(gè)域組成其中鄰接點(diǎn)域指示頂點(diǎn)V的鄰接點(diǎn)在圖中的位置,鏈域指示下一條邊或弧的結(jié)點(diǎn),數(shù)據(jù)域存儲(chǔ)和邊或弧相關(guān)的信息,如權(quán)值等。每個(gè)鏈表附有一個(gè)表頭結(jié)點(diǎn)。在表頭結(jié)點(diǎn)中除了設(shè)有鏈域指向鏈表中第一個(gè)結(jié)點(diǎn)外還設(shè)有存儲(chǔ)頂點(diǎn)的名或其它有關(guān)信息的數(shù)據(jù)域,這樣實(shí)現(xiàn)了圖的鏈?zhǔn)酱鎯?chǔ)。遍歷是最基本的操作也是最重要的操作運(yùn)算,它是求解圖的連通性、拓?fù)渑判蚝颓箨P(guān)鍵路徑的基礎(chǔ),然而圖的遍歷比樹的遍歷復(fù)雜的多,因?yàn)閳D的任一頂點(diǎn)都有可能和其余的頂點(diǎn)相鄰接。所以在訪問某個(gè)頂點(diǎn)之后可能沿著某條路徑搜索之后又回到該頂點(diǎn)上。因此要設(shè)有一個(gè)輔助數(shù)組V[0..n-1],它的初始值置為假,一旦訪問頂點(diǎn)Vi,便置V[i]為真,這樣避免了同一個(gè)頂點(diǎn)被訪問多次,對圖的遍歷有深度優(yōu)先搜索和廣度優(yōu)先搜索。圖的深度優(yōu)先搜索遍歷類似樹的先根遍歷,是樹的先根遍歷的推廣。廣度優(yōu)先搜索類似樹的按層次遍歷的過程。圖狀結(jié)構(gòu)中復(fù)雜的操作大部分都是以圖的遍歷為基礎(chǔ)。

因此無論對于線型結(jié)構(gòu)、樹性結(jié)構(gòu)、網(wǎng)狀或圖,它們都遵循著邏輯結(jié)構(gòu)的定義、存儲(chǔ)結(jié)構(gòu)的實(shí)現(xiàn)、操作運(yùn)算方法的實(shí)現(xiàn)模式來實(shí)現(xiàn)每種數(shù)據(jù)結(jié)構(gòu)的類型。在數(shù)據(jù)結(jié)構(gòu)研究中對每種數(shù)據(jù)結(jié)構(gòu)的研究只有對它的這三個(gè)方面內(nèi)容的研究,才能對它進(jìn)行探索、掌握、改進(jìn)。這是數(shù)據(jù)結(jié)構(gòu)研究中的基本思想。在數(shù)據(jù)結(jié)構(gòu)研究中當(dāng)前面向各專門領(lǐng)域特殊問題的多維數(shù)據(jù)結(jié)構(gòu)和從抽象數(shù)據(jù)類型的觀點(diǎn)來討論數(shù)據(jù)結(jié)構(gòu),都不能背離這個(gè)思想。

3由棧和隊(duì)列實(shí)現(xiàn)樹、圖的遍歷——縱向聯(lián)系

遍歷操作對樹、圖結(jié)構(gòu)是很基礎(chǔ)、很重要的運(yùn)算,它是實(shí)現(xiàn)一個(gè)數(shù)據(jù)結(jié)構(gòu)的核心部分,雖然根據(jù)樹、圖的遞歸定義能設(shè)計(jì)出樹、圖的遍歷的遞歸算法,但從線型結(jié)構(gòu)到樹、圖的發(fā)展也是數(shù)據(jù)結(jié)構(gòu)從簡單到復(fù)雜的逐步發(fā)展過程。線型結(jié)構(gòu)中棧和隊(duì)列是兩個(gè)非常重要的數(shù)據(jù)結(jié)構(gòu),對于樹、圖的遍歷可用棧和隊(duì)列來實(shí)現(xiàn)。對樹、圖復(fù)雜的數(shù)據(jù)結(jié)構(gòu),可通過棧和隊(duì)列的操作來實(shí)現(xiàn)復(fù)雜數(shù)據(jù)結(jié)構(gòu)的操作,體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)間的“縱向聯(lián)系”。

用棧實(shí)現(xiàn)二叉樹的前序遍歷算法:

Statuspreorder(bitreet)

{P=t;

Initstack(s);

Push(s,p);

While(!stackempty(s)){

pop(s,p)

while(p){

visit(p);

push(s,prchild);

p=p-lchild;}

}}

用棧實(shí)現(xiàn)二叉樹的中序遍歷算法:

Statusinorder(bitreet)

{p=t;

Initstack(s);

Push(s,p);

P=Plchild;

while(!stackempty){

while(p){

push(s,p);

p=p-lchild;}

pop(s,p);

visist(p);

p=prchild;}}

用棧來實(shí)現(xiàn)二叉樹的后序遍歷算法:

Statuspostorder(bitreet){

P=t;

inistack(s);

While(p||!stackempty(s)){

If(p){

push(s,p);

P=plchild;}

ElseIf(!stackempty(s)){

pre=null;

Gettop(s,p);

While(prchild==pre){pop(s,p);

Visit(p);

Pre=p;

Gettop(s,p);}

P=prchild;}

}}}

用隊(duì)列實(shí)現(xiàn)二叉樹層次遍歷算法:

VoidLayers(bitreet){

if(t){

p=t;

Initqueue(q);

Enqueue(q,t);

while(!empty(q)){

p=Dlqueue(q);

visit(p);

if(Plchild)Enqueue(q,plchild);

if(prchild)Enqueue(q,prchild);}

}

用隊(duì)列實(shí)現(xiàn)圖的廣度優(yōu)先搜索算法:

VoidBfs(Graphg,intv){

Visit(v);

Visited[v]=true;

Enqueue(q,v);

While(!emptyqueue(q)){

Dlqueue(g,vex);

For(w=firstadjvex(g,vex),w,w=nextadjvex(g,vex,w)){

If(!visited[w]){visit(w);

Visited[w]=true;

Enqueue(q,w);}}

}}

VoidDfs(Graphg,intv){

Visit(v);

Visited[v]=true;

Push(s,v);

While(!emptystack(s)){V=gettop(s);

For(w=fistadjvex(g,v);w&&!visited[w];w=nextadjvex(g,v,w))

If(!w)pop(s)

Else{visit(w);

Visited[w]=true;

Push(s,w);}}

因?yàn)槎鏄?、圖的其它的操作大部分是對遍歷基本操作的拓展或綜合應(yīng)用,靈活運(yùn)用棧和隊(duì)列可實(shí)現(xiàn),并且算法描述比較直觀。線性結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)學(xué)科的基礎(chǔ),樹、圖的發(fā)展在線性結(jié)構(gòu)的基礎(chǔ)上而發(fā)展,因樹、圖發(fā)展促進(jìn)著線性結(jié)構(gòu)中和一些算法的完善和改進(jìn),線型結(jié)構(gòu)、樹型結(jié)構(gòu)、圖狀結(jié)構(gòu)是緊密相聯(lián)的。

4抽象數(shù)據(jù)類型的研究

數(shù)據(jù)結(jié)構(gòu)間縱橫聯(lián)系明顯且緊密。運(yùn)用與把握這種“縱橫聯(lián)系”,對從抽象數(shù)據(jù)類型的角度來進(jìn)行數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)與研究有著重要的借鑒意義。

抽象數(shù)據(jù)類型(ADT)的研究越來越被人所重視[4-8],它可理解為數(shù)據(jù)類型的進(jìn)一步抽象。即把數(shù)據(jù)類型和數(shù)據(jù)類型上的運(yùn)算捆在一起,進(jìn)行封裝。引入抽象數(shù)據(jù)類型的目的是把數(shù)據(jù)類型的表示和數(shù)據(jù)類型上運(yùn)算的實(shí)現(xiàn)與這些數(shù)據(jù)類型和運(yùn)算在程序中的引用隔開,使它們相互獨(dú)立。對于抽象數(shù)據(jù)類型的描述,除了必須描述它的數(shù)據(jù)結(jié)構(gòu)外,還必須描述定義在它上面的運(yùn)算(過程或函數(shù))。抽象數(shù)據(jù)類型上定義的過程和函數(shù)以該抽象數(shù)據(jù)類型的數(shù)據(jù)所應(yīng)具有的數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)。它仍遵循邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)、操作運(yùn)算的數(shù)據(jù)結(jié)構(gòu)基本思想,所有的抽象數(shù)據(jù)類型都可有簡單的分類策略獲得,這個(gè)策略就是抽象數(shù)據(jù)類型對象像什么和對它們做些什么。邏輯結(jié)構(gòu)定義、存儲(chǔ)結(jié)構(gòu)表示、操作的實(shí)現(xiàn)在抽象類型中它們被稱為數(shù)據(jù)類型說明、抽象數(shù)據(jù)類型的表示和抽象數(shù)據(jù)類型的實(shí)現(xiàn)[3]。抽象數(shù)據(jù)類型具體的表示和實(shí)現(xiàn)依賴所采用的語言,用戶可以用某高級(jí)語言的固有數(shù)據(jù)類型和自定義類型并借助于過程和函數(shù)來表示和實(shí)現(xiàn)抽象數(shù)據(jù)類型。

5結(jié)論

邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)、操作運(yùn)算等核心方面是貫穿數(shù)據(jù)結(jié)構(gòu)研究與發(fā)展的一條基本線,也是數(shù)據(jù)結(jié)構(gòu)研究中所看到數(shù)據(jù)結(jié)構(gòu)間的“橫向聯(lián)系”。應(yīng)用基本數(shù)據(jù)結(jié)來實(shí)現(xiàn)復(fù)雜數(shù)據(jù)結(jié)構(gòu)的方法與途徑,這是對數(shù)據(jù)元素之間關(guān)系從簡單到復(fù)雜的探討,即為“縱向聯(lián)系”。數(shù)據(jù)結(jié)構(gòu)聯(lián)系是對數(shù)據(jù)結(jié)構(gòu)的整體把握,體現(xiàn)在這種“橫向聯(lián)系”和“縱向聯(lián)系”之中。靈活運(yùn)用與把握這種數(shù)據(jù)結(jié)構(gòu)間的關(guān)系,對抽象數(shù)據(jù)結(jié)構(gòu)類型的研究有重要的借鑒意義,同時(shí)對數(shù)據(jù)結(jié)構(gòu)的實(shí)際教學(xué)過程有著一定的指導(dǎo)意義。

參考文獻(xiàn)

[1]陸松年.數(shù)據(jù)結(jié)構(gòu)教程[M].北京:科學(xué)出版社.2002年

[2]嚴(yán)蔚敏.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社.1997年

[3]帥訓(xùn)波.數(shù)據(jù)結(jié)構(gòu)間普遍整體聯(lián)系[D].曲阜:曲阜師范大學(xué)計(jì)算機(jī)科學(xué)學(xué)院.2003年

[4]藍(lán)雯飛.數(shù)據(jù)結(jié)構(gòu)的面向?qū)ο竺枋龇椒ㄑ芯縖J].計(jì)算機(jī)工程與應(yīng)用,2006;42(26):79-80

[5]劉毅.關(guān)于Treap數(shù)據(jù)結(jié)構(gòu)問題的研究[J].計(jì)算機(jī)應(yīng)用與軟件,2005;22(8):36-38

[6]胡澤明,岳瑞生,王志剛.嵌入式GIS線要素?zé)o縫拼接的數(shù)據(jù)結(jié)及實(shí)現(xiàn)算法[J].測繪科學(xué),2006;31(5):102-103

篇9

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);教學(xué)效果;存在問題;改革總結(jié)

一、課程的重要性

《數(shù)據(jù)結(jié)構(gòu)》課程是計(jì)算機(jī)專業(yè)中一門重要的專業(yè)基礎(chǔ)必修課,它為操作系統(tǒng)、數(shù)據(jù)庫原理、編譯原理、單片機(jī)原理等后續(xù)專業(yè)課程的學(xué)習(xí)奠定了基礎(chǔ)。其次,數(shù)據(jù)結(jié)構(gòu)課程是計(jì)算機(jī)相關(guān)專業(yè)的考研專業(yè)課之一。該課程的重要性顯而易見。

二、教學(xué)中存在的問題

《數(shù)據(jù)結(jié)構(gòu)》課程的教學(xué)目標(biāo)是全面系統(tǒng)地介紹數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和算法實(shí)現(xiàn),并介紹常用的非數(shù)值計(jì)算方法,如數(shù)據(jù)插入、刪除、排序、查找檢索等,使學(xué)生掌握各種數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)和算法思想,并能結(jié)合具體應(yīng)用,運(yùn)用各種數(shù)據(jù)結(jié)構(gòu)和算法解決實(shí)際問題。但大部分高?!稊?shù)據(jù)結(jié)構(gòu)》課程的教學(xué)效果都不盡如人意,影響課程學(xué)致有如下原因:

1.程序設(shè)計(jì)課程掌握較差,基礎(chǔ)薄弱。

2.實(shí)踐機(jī)會(huì)少,動(dòng)手能力差。

3.缺乏課外輔導(dǎo),學(xué)生自學(xué)時(shí)障礙重重。

三、解決方法

鑒于以上幾點(diǎn),可以從這幾方面進(jìn)行教學(xué)改革:

1.加大對先行課程的重視程度。首先加大C程序設(shè)計(jì)課程的課時(shí)。C程序設(shè)計(jì)課程是數(shù)據(jù)結(jié)構(gòu)課程的直接先行課,因此,學(xué)好C語言,為后續(xù)若干課程的學(xué)習(xí)打好堅(jiān)實(shí)的基礎(chǔ)。另外,增加數(shù)學(xué)及線性代數(shù)課程的課時(shí)。學(xué)習(xí)算法離不開數(shù)學(xué)的思想,學(xué)習(xí)數(shù)組的存儲(chǔ)結(jié)構(gòu)也離不開線性代數(shù)的應(yīng)用。最后,增加了32課時(shí)的C程序設(shè)計(jì)課程設(shè)計(jì)。

2.實(shí)際操作方面,計(jì)算機(jī)專業(yè)要求有很高的實(shí)際操作技能,而我們的學(xué)生在長期被動(dòng)的學(xué)習(xí)過程中卻養(yǎng)成了勤于動(dòng)腦,懶于動(dòng)手的學(xué)習(xí)特點(diǎn),這樣教出的學(xué)生卻是不能滿足實(shí)際工作要求的。因此,數(shù)據(jù)結(jié)構(gòu)的實(shí)驗(yàn)教學(xué)要緊密配合理論教學(xué),通過相關(guān)實(shí)驗(yàn)與課程設(shè)計(jì),幫助和加深對數(shù)據(jù)結(jié)構(gòu)的整體理解,所以在本課程結(jié)束前安排兩周實(shí)踐進(jìn)行課程設(shè)計(jì),不要求實(shí)現(xiàn)過多的項(xiàng)目,但每個(gè)學(xué)生都要?jiǎng)邮秩プ?,親身經(jīng)歷從需求分析到算法分析,最后的代碼編寫與調(diào)試這樣的過程,從而更深刻的理解數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)以及在某種具體的存儲(chǔ)結(jié)構(gòu)下的運(yùn)算及其實(shí)現(xiàn)方法。

3.構(gòu)建《數(shù)據(jù)結(jié)構(gòu)》網(wǎng)絡(luò)視頻課程,加強(qiáng)師生互動(dòng)環(huán)節(jié)。為了彌補(bǔ)課外輔導(dǎo)的缺陷,制作與《數(shù)據(jù)結(jié)構(gòu)》課程內(nèi)容相適應(yīng)的視頻,尤其是該課程中典型的算法及其實(shí)現(xiàn)過程,學(xué)生在課外學(xué)習(xí)時(shí)遇到問題可隨時(shí)登錄校園網(wǎng)觀看視頻,進(jìn)行查漏補(bǔ)缺,達(dá)到鞏固知識(shí)的效果。另外,在網(wǎng)站上可以設(shè)置在線答疑或留言功能,從而實(shí)現(xiàn)師生互動(dòng)。

四、改革成果

根據(jù)以上改革方法,經(jīng)過實(shí)施,數(shù)據(jù)結(jié)構(gòu)課程教學(xué)效果頗見成效,簡單做以總結(jié):

1.加大C語言程序設(shè)計(jì)課程的課時(shí),教師能夠在足夠的課堂時(shí)間將課程內(nèi)容系統(tǒng)化的進(jìn)行講解,尤其是數(shù)組、指針、結(jié)構(gòu)體等重要知識(shí)。從而給數(shù)據(jù)結(jié)構(gòu)課程的學(xué)習(xí)打下了夯實(shí)的基礎(chǔ)。

2.網(wǎng)絡(luò)視頻的構(gòu)建,給學(xué)生提供了更為豐富的學(xué)習(xí)參考資料。學(xué)生在課外復(fù)習(xí)時(shí)遇到不理解的算法,隨時(shí)登錄校園網(wǎng)觀看視頻,好像再一次回到了課堂,從而解決了疑難問題。另外,校園網(wǎng)上開通了該課程的在線答疑功能,學(xué)生可以通過在線答疑功能隨時(shí)和任課教師進(jìn)行溝通。

3.加強(qiáng)數(shù)據(jù)結(jié)構(gòu)課內(nèi)實(shí)踐與課程設(shè)計(jì)的實(shí)施,學(xué)生可以將課堂上的理論知識(shí)應(yīng)用于實(shí)踐中。尤其是課程設(shè)計(jì)的開設(shè),如:簡單文本編輯器的設(shè)計(jì)與實(shí)現(xiàn)、科學(xué)計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)等,通過案例讓學(xué)生真正體會(huì)到數(shù)據(jù)結(jié)構(gòu)課程的實(shí)用性,并從本質(zhì)上理解該課程的內(nèi)容。

五、結(jié)束語

《數(shù)據(jù)結(jié)構(gòu)》不僅是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的專業(yè)基礎(chǔ)課,也是大多數(shù)院校研究生入學(xué)考試的專業(yè)必考課,因此,《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)的討論將會(huì)持續(xù)下去,最終能找到一條行之有效的教學(xué)方法。以上是作者結(jié)合自己多年教學(xué)經(jīng)驗(yàn)和體會(huì),提出的若干改革方法,不足之處會(huì)繼續(xù)探討研究。

參考文獻(xiàn):

[1]李春葆.數(shù)據(jù)結(jié)構(gòu)(C語言)[M].北京:清華大學(xué)出版社,2013

[2]嚴(yán)蔚敏.數(shù)據(jù)結(jié)構(gòu)(C語言)[M].北京:清華大學(xué)出版社,2011

篇10

關(guān)鍵詞: 編程能力; 教學(xué)方法; 算法; 程序設(shè)計(jì); 實(shí)踐

中圖分類號(hào):TP3-0 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1006-8228(2013)08-61-02

0 引言

數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)專業(yè)及計(jì)算機(jī)相關(guān)專業(yè)的一門實(shí)踐性較強(qiáng)的軟件基礎(chǔ)課,它內(nèi)容繁多,涉及面廣,主要研究如何把具有一定邏輯關(guān)系的數(shù)據(jù)在計(jì)算機(jī)中存儲(chǔ),它是對數(shù)據(jù)進(jìn)行操作的有關(guān)算法研究的一門學(xué)科[1],它以程序設(shè)計(jì)為基礎(chǔ),對學(xué)生進(jìn)行較復(fù)雜程序設(shè)計(jì)的訓(xùn)練,課程以提高學(xué)生的編程能力培養(yǎng)為主要目標(biāo)。本文對數(shù)據(jù)結(jié)構(gòu)的教學(xué)方法和實(shí)踐環(huán)節(jié)進(jìn)行探討。

1 注重教學(xué)方法,提高學(xué)生的認(rèn)識(shí)能力

在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中為了提高學(xué)生的編程能力,應(yīng)注重課堂的教學(xué)方法,使學(xué)生能更好地掌握課程內(nèi)容,理解前人設(shè)計(jì)的算法,為此我們研究了數(shù)據(jù)結(jié)構(gòu)的教學(xué)方法?,F(xiàn)代教學(xué)論中,人們把教學(xué)方法歸為兩大類:一類是程序式教學(xué)法,其特點(diǎn)是課堂以教師為中心,有計(jì)劃有步驟地教給學(xué)生教學(xué)大綱上規(guī)定的知識(shí);另一類是發(fā)現(xiàn)式教學(xué)法,這種教學(xué)法的基本目的不再局限于把前人整理好的知識(shí)傳授給學(xué)生,而是引導(dǎo)、鼓勵(lì)學(xué)生盡可能參與探索知識(shí)的過程,其側(cè)重點(diǎn)在于使學(xué)生領(lǐng)悟和掌握形成知識(shí)的過程和獲取知識(shí)的方法。

在教學(xué)過程中,我們將這兩種方法相結(jié)合,在講解數(shù)據(jù)結(jié)構(gòu)理論基礎(chǔ)知識(shí)時(shí)主要采用程序式教學(xué)法,始終抓住什么是“數(shù)據(jù)結(jié)構(gòu)”這根主線,按照數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)、運(yùn)算和運(yùn)算的實(shí)現(xiàn)這四步逐層展開討論,做到教學(xué)思路清晰、邏輯性強(qiáng),引導(dǎo)學(xué)生理解程序的運(yùn)行原理和過程,并且對于不同層次的學(xué)生具體采用不同的方法。在講解數(shù)據(jù)結(jié)構(gòu)算法的實(shí)現(xiàn)時(shí),我們發(fā)現(xiàn)有些班的學(xué)生對編程普遍懷有恐懼感,針對這種情況教師與學(xué)生一起按常人的邏輯思維方式考慮解決問題的方法,歸納出解決問題的方法和步驟,按方法和步驟與學(xué)生一起一步一步地寫出程序,然后回過去重讀一遍程序,并將不夠理想的地方加以改進(jìn),使學(xué)生知道原來教師考慮問題的思路和自己的思路基本是一樣的,這樣引導(dǎo)學(xué)生編程的過程可使學(xué)生獲益匪淺,再經(jīng)過大量地由淺入深地訓(xùn)練后,學(xué)生消除了恐懼感,增強(qiáng)了信心,對編程逐漸也產(chǎn)生了興趣。

數(shù)據(jù)結(jié)構(gòu)中的內(nèi)容很豐富,為使學(xué)生更好地掌握,我們將教學(xué)重點(diǎn)放在使用廣泛的數(shù)據(jù)結(jié)構(gòu)上,精講最基本的概念與方法,并在這基礎(chǔ)上例舉一些綜合的算法例子,通常借助于發(fā)現(xiàn)式教學(xué)法的思想進(jìn)行教學(xué),提供背景材料,講透算法思想,提出問題,鼓勵(lì)學(xué)生思考、分析,舉一反三,讓學(xué)生自己設(shè)計(jì)出多種算法。例如,在講解數(shù)據(jù)結(jié)構(gòu)中的遞歸算法時(shí),由于遞歸算法是數(shù)據(jù)結(jié)構(gòu)中最難掌握的內(nèi)容之一,學(xué)生一般不能很快接受,因此講解遞歸算法的方法很重要。我們先從學(xué)生較易接受的數(shù)學(xué)函數(shù)計(jì)算入手,進(jìn)而引入非數(shù)值的遞歸算法,為了使學(xué)生了解嵌套調(diào)用、層層返回等概念,畫出遞歸運(yùn)行的狀態(tài)圖和棧的變化圖,告訴學(xué)生嵌套調(diào)用和返回的含義,概括出“遞歸進(jìn)入一層,則進(jìn)棧,遞歸退出一層,則退棧”的方法,使學(xué)生一目了然。在掌握了基本遞歸算法及運(yùn)行過程后,進(jìn)一步例舉稍難的遞歸算法,使學(xué)生從多個(gè)方面加深對遞歸算法的理解,這對數(shù)據(jù)結(jié)構(gòu)后續(xù)內(nèi)容中的樹、圖、查找和排序算法設(shè)計(jì)的學(xué)習(xí)是很有幫助的。

2 注重常用的、經(jīng)典算法的學(xué)習(xí),以激起探索研究的愿望

在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)過程中我們強(qiáng)調(diào)基本的編程方法和常用的算法的介紹,并指導(dǎo)學(xué)生積累常用算法,積累經(jīng)典的好算法,例如查找算法、排序算法、遍歷算法和圖操作算法等,這樣使學(xué)生在解決復(fù)雜問題之前掌握可使用的基本方法,可借鑒好算法的思想來拓展自己的思路。

數(shù)據(jù)結(jié)構(gòu)中有很多經(jīng)典的好算法,它們是著名的計(jì)算機(jī)科學(xué)家的成果。我們不僅要學(xué)習(xí)算法的設(shè)計(jì)思想,還要學(xué)習(xí)算法設(shè)計(jì)的思維方式,以提高學(xué)生的邏輯思維能力。以最小生成樹兩種方法為例,①普里姆(Prim)算法以圖中的點(diǎn)為主,通過點(diǎn)朝最小邊權(quán)伸張出去的方式來求解,其時(shí)間復(fù)雜度為O(n2)(n為圖的頂點(diǎn)個(gè)數(shù)),它與圖中的邊數(shù)無關(guān),因此適用于求邊稠密的圖的最小生成樹,但在如何判斷加入一條邊而不形成回路的問題上就遇到了困難;②克魯斯卡爾(Kruskal)求最小生成樹算法以邊為主,容易判斷加入新頂點(diǎn)是否產(chǎn)生回路的問題,其時(shí)間復(fù)雜度為O(eloge)(e為圖中邊的個(gè)數(shù)),因此適合求邊稀疏的圖的最小生成樹。求解同一個(gè)問題時(shí),不同的算法具備不同的特點(diǎn),適應(yīng)不同的范圍,這樣分析討論,可使學(xué)生思路暢通,激發(fā)起探研的愿望。再例,數(shù)據(jù)結(jié)構(gòu)中的排序算法可分類討論,由個(gè)別到一般,由具體到抽象形成算法的設(shè)計(jì),并進(jìn)行算法的初步分析,其中有些算法的分析并未得到完整的答案,例如,希爾排序的分析就是一個(gè)復(fù)雜的問題,因?yàn)樗臅r(shí)間復(fù)雜度是所取“增量”序列的函數(shù),只是得出一些局部的結(jié)論。雖然我們不一定要引導(dǎo)學(xué)生去專門鉆研這些難題,但是,提出并分析這些問題至少可以提高學(xué)生的學(xué)習(xí)興趣,形成研究問題的情景,對數(shù)據(jù)結(jié)構(gòu)中的許多問題留下思考和探索的空間,從中啟發(fā)出今后需要深入研究的問題,這樣有利于對學(xué)生能力的培養(yǎng)。

3 加強(qiáng)實(shí)驗(yàn)環(huán)節(jié),以提高學(xué)生的編程能力

數(shù)據(jù)結(jié)構(gòu)是一門理論和實(shí)踐性都很強(qiáng)的課程,學(xué)習(xí)它的主要目的是提高學(xué)生的編程能力,而學(xué)會(huì)編程、提高編程的能力并不是輕而易舉的,要通過長時(shí)間的實(shí)踐鍛煉,要學(xué)生自己多動(dòng)手去體驗(yàn),有些問題只有通過實(shí)踐后才能明白,也只有實(shí)踐才能把教師和書本上的知識(shí)變成自己的。因此我們在教學(xué)過程中針對每個(gè)環(huán)節(jié)都布置一定數(shù)量的上機(jī)實(shí)踐題目,有基礎(chǔ)題、有綜合題,還有結(jié)合實(shí)際的綜合應(yīng)用題。例如基礎(chǔ)題有順序表、鏈表的創(chuàng)建、查找、插入、刪除;棧、隊(duì)列的操作;二叉樹的遍歷;圖的存儲(chǔ)實(shí)現(xiàn);查找;排序等。綜合題有一種結(jié)構(gòu)上的綜合操作題如兩個(gè)鏈表的合并操作就是查找、插入和刪除基本操作的綜合,還有多種結(jié)構(gòu)上的綜合操作題,如圖的遍歷搜索演示實(shí)驗(yàn),它可綜合考查學(xué)生對字符串、鏈表、棧、隊(duì)列、圖的遍歷和遞歸算法等的理解和綜合應(yīng)用能力,這種實(shí)驗(yàn)題知識(shí)點(diǎn)覆蓋了數(shù)據(jù)結(jié)構(gòu)的絕大部分內(nèi)容,具有較強(qiáng)的綜合性。我們舉幾個(gè)結(jié)合實(shí)際應(yīng)用的例題。

例1:用二叉排序樹與單鏈表相結(jié)合來實(shí)現(xiàn)學(xué)生成績管理。

用二叉排序樹存放成績,用鏈表存放學(xué)生信息,相同成績的學(xué)生連在一個(gè)鏈表中并由二叉排序樹相應(yīng)結(jié)點(diǎn)指向,具體鏈表結(jié)點(diǎn)形式:

二叉樹結(jié)點(diǎn)形式:

程序具有前序、中序、后序遍歷瀏覽所有信息功能、有各信息查詢功能、有統(tǒng)計(jì)成績功能、有鏈表結(jié)點(diǎn)插入和樹結(jié)點(diǎn)插入功能,有鏈表結(jié)點(diǎn)刪除和樹結(jié)點(diǎn)刪除等功能,對編程基礎(chǔ)好的學(xué)生還要求將二叉排序樹改為平衡樹來完成。

例2:用棧解決算術(shù)表達(dá)式求值演示。根據(jù)算符優(yōu)先關(guān)系,實(shí)現(xiàn)算術(shù)四則混合運(yùn)算表達(dá)式的求值,演示在求值中運(yùn)算符棧、操作數(shù)棧、輸入字符和主要操作的變化過程。

例3:用棧隊(duì)列進(jìn)行停車場管理。以棧模擬停車場,以隊(duì)列模擬車場外的通道,從輸入的數(shù)據(jù)序列進(jìn)行模擬管理。

例4:用圖進(jìn)行上海導(dǎo)游咨詢。以圖中頂點(diǎn)表示上海各主要景點(diǎn),存放景點(diǎn)名稱、代號(hào)、簡介等,以邊表示路徑,存放路徑長度等相關(guān)信息,程序具有為游客提供各景點(diǎn)相關(guān)信息的查詢,有查詢?nèi)我鈨蓚€(gè)景點(diǎn)之間的最短路徑等功能。

為了達(dá)到預(yù)期實(shí)驗(yàn)效果,在做每個(gè)實(shí)驗(yàn)時(shí),要求學(xué)生上機(jī)運(yùn)行所編程序,教師認(rèn)真檢查程序運(yùn)行結(jié)果及程序的測試數(shù)據(jù),必要時(shí)查看學(xué)生所編寫的程序,了解他們的編程思想;將編程風(fēng)格好、解決方案好的程序作為例子給學(xué)生講解,鼓勵(lì)他們多觀察、分析、比較、積累,遇到問題時(shí)多想幾種解決方案;通過分析這些程序,培養(yǎng)學(xué)生良好的編程習(xí)慣,讓他們明白編程風(fēng)格的好壞在很大程度上影響程序的質(zhì)量。良好的編程風(fēng)格可以使程序結(jié)構(gòu)清晰合理,且使程序代碼便于維護(hù)。我們經(jīng)過這樣大量的上機(jī)實(shí)踐,使學(xué)生的編程能力、上機(jī)調(diào)試能力得到很大的提高。

4 結(jié)束語

本文探討了提高學(xué)生編程能力的具體教學(xué)措施,這些措施需要結(jié)合教學(xué)方法靈活地加以運(yùn)用。我們積累了大量的教學(xué)實(shí)驗(yàn)用例,幫助學(xué)生開闊視野,增強(qiáng)學(xué)習(xí)的動(dòng)力,進(jìn)而提高學(xué)生學(xué)習(xí)的自覺性,使他們的學(xué)習(xí)過程走向良性循環(huán)的軌道。我們經(jīng)過幾年的數(shù)據(jù)結(jié)構(gòu)教學(xué)實(shí)踐,學(xué)生的編程能力普遍提高,證明了上述教學(xué)方法是有效的。

參考文獻(xiàn):

[1] 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].清華大學(xué)出版社,2011.

[2] 許自龍.關(guān)于《數(shù)據(jù)結(jié)構(gòu)》的教學(xué)實(shí)踐和體會(huì)[J].信息技術(shù)教學(xué)與研究,2012.4.

[3] 呂國英.算法設(shè)計(jì)與分析(第二版)[M].清華大學(xué)出版社,2011.