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

時間:2023-03-29 04:39:14

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

篇1

【關(guān)鍵詞】數(shù)據(jù)結(jié)構(gòu);知識體系;教學設(shè)計

1 課程的地位與作用

《數(shù)據(jù)結(jié)構(gòu)》是計算機科學與技術(shù)專業(yè)的核心專業(yè)基礎(chǔ)課程,是計算機程序設(shè)計的重要理論和實踐基礎(chǔ),是計算機理論與技術(shù)的重要基石。《數(shù)據(jù)結(jié)構(gòu)》上承高級語言程序設(shè)計,下啟算法分析與設(shè)計,是計算機科學與技術(shù)人才素質(zhì)框架中的脊梁骨,對學生能力培養(yǎng)至關(guān)重要,向來是計算機本科教學的重中之重。調(diào)查表明已畢業(yè)的學生通過他們的工作實踐認為《數(shù)據(jù)結(jié)構(gòu)》是最有用的課程之一,這也從另一方面說明了該課程的重要性。

計算機科學與技術(shù)專業(yè)的培養(yǎng)目標之一是掌握計算機科學與技術(shù)的基本理論、計算機軟/硬件基本知識及應(yīng)用技術(shù),《數(shù)據(jù)結(jié)構(gòu)》在培養(yǎng)目標的實現(xiàn)中具有舉足輕重的作用,是理解計算機科學與程序開發(fā)技術(shù)的關(guān)鍵課程。作為一門重要的專業(yè)必修課程,《數(shù)據(jù)結(jié)構(gòu)》課程既是對以往課程的深入和擴展,也是為將來更加深入地學習其他專業(yè)課程打下基礎(chǔ)。課程中所學習的排序問題的算法,以及基本的樹、圖等數(shù)據(jù)結(jié)構(gòu),是計算機科學的基本功。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)目標中的作用如圖2所示。

圖2 《數(shù)據(jù)結(jié)構(gòu)》在培養(yǎng)目標中的作用

2 課程的教學目標與主要內(nèi)容

2.1 課程的教學目標

學習本課程后,應(yīng)達到下列基本要求:

(1)理解數(shù)據(jù)結(jié)構(gòu)的基本概念;

(2)熟練掌握線性表、棧、隊列、樹、圖等常用數(shù)據(jù)結(jié)構(gòu)的基本運算的實現(xiàn)及應(yīng)用;

(3)熟練掌握排序和查找的常用算法及應(yīng)用;

(4)能夠?qū)λ惴ㄟM行時間復雜度度、空間復雜度的分析;

(5)培養(yǎng)學生分析數(shù)據(jù)、組織數(shù)據(jù)的能力,能夠根據(jù)實際問題來選擇合適的數(shù)據(jù)結(jié)構(gòu),設(shè)計有效的算法。

2.2 教材與主要參考資料

教材

耿國華《數(shù)據(jù)結(jié)構(gòu)(用C語言描述)》,高等教育出版社,2011年

教材選擇的依據(jù):

(1)該教材跟蹤技術(shù)發(fā)展需要,體系科學,是“十一五”國家級規(guī)劃教材。

(2)該教材理論的闡述由淺入深、通俗易懂。

(3)該教材理論結(jié)合實際,配有大量的例題、習題與實習題。

主要參考資料

[1]嚴蔚敏,吳偉民《數(shù)據(jù)結(jié)構(gòu)(C語言版)》,清華大學出版社,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]西北大學數(shù)據(jù)結(jié)構(gòu)精品課程網(wǎng)站

http//:/datastr

[6]北大數(shù)據(jù)結(jié)構(gòu)與算法課程網(wǎng)站

http:///pkujpk/course/sjjg/

[7]洛陽理工學院數(shù)據(jù)結(jié)構(gòu)精品課程網(wǎng)站

http//:/sjjg

[8]洛陽理工學院數(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 課程教學內(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)課程的認識,基本概念比較多,概念要講清楚、準確,第一章要通過豐富的例子講解如何分析算法時間復雜度,這是貫穿整門課程的內(nèi)容,也是本課程的一個難點,第2章是整個課程的重要基礎(chǔ),要講得十分詳細,為后面的章節(jié)打下良好的基礎(chǔ),第3章的棧與遞歸的實現(xiàn)是本書的一個難點,要通過例子講透,并且在第6章還要進一步地講遞歸到非遞歸的轉(zhuǎn)換。第四章內(nèi)容較簡單,而且學生在高級語言程序設(shè)計中學習過字符串,因此留給學生自學,也可以培養(yǎng)學生的自學能力。第五章數(shù)組和廣義表一般講解即可。第6章的二叉樹要詳細講解,第7章的幾個關(guān)于圖的算法較難,要結(jié)合例子講解,第8章中的難點是平衡二叉樹的調(diào)整和B樹,要通過例子把算法的思想講清楚,使學生能實際操作。第9章要把各種排序的思想、特點講清楚,特別是較難的希爾排序、快速排序、堆排序、基數(shù)排序一定要結(jié)合實例講解。

3.2 課時分配

表1 總課時:72;理論授課:58,實驗:14

4 課程實踐環(huán)節(jié)

數(shù)據(jù)結(jié)構(gòu)是與實踐緊密結(jié)合的課程,學生學習的理論必須經(jīng)過大量的實踐才能更好的掌握,因此必須強化實踐教學。數(shù)據(jù)結(jié)構(gòu)實踐分兩部分:一部分是隨課程進行的實驗,另一部分是課程結(jié)束后為期一周的課程設(shè)計。通過合理、有效地設(shè)計上機題目,改進實驗考核方式,調(diào)動學生的積極性,啟發(fā)引導學生掌握基礎(chǔ)理論并能創(chuàng)新應(yīng)用,增強學生綜合運用有關(guān)知識的能力。

實驗內(nèi)容包括六個實驗項目,分別為:線性表的基本操作(2學時),棧的基本操作(2學時),隊列的基本操作(2學時),二叉樹的建立及遍歷(2學時),圖的遍歷的實現(xiàn)(2學時),宿舍管理查詢系統(tǒng)(4學時)。其中宿舍管理查詢系統(tǒng)實驗為三性實驗。

課程設(shè)計是課程結(jié)束后進行的很重要的實踐環(huán)節(jié),本課程課程設(shè)計給出14個題目,這些題目都是綜合性的,學生可任選一題,完成后要寫出課程設(shè)計報告。通過課程設(shè)計,使學生進一步理解和掌握所學各種基本知識,培養(yǎng)學生綜合運用所學的理論知識和方法獨立分析和解決問題的能力;訓練學生用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進行軟件開發(fā),使學生具備軟件工作者所應(yīng)具備的科學的工作方法和作風。

學生完成實驗后,不僅要求學生提交高質(zhì)量的規(guī)范的實驗報告,還要引導學生互相交流,開闊視野。好的實驗作業(yè)要放到班級公共郵箱里和所有學生共享。

5 課程的建設(shè)情況

5.1 課程資源情況

該課程教學文件完備。通過多年的教學,積累了必要的一些輔助教學資料(包括教學參考書、參考課件、聲像、影像等),并且使用效果良好。補充的學習資料有:

(1)教學網(wǎng)站:http:///sjjg/

http:///ds/

(2)搜集了大量探討數(shù)據(jù)結(jié)構(gòu)理論與算法、介紹學科前沿動態(tài)的中、英文學術(shù)論文和碩、博論文,對其分類整理后在課程教學網(wǎng)站上提供下載鏈接,以供學生深入研究、學習;

(3)自編《數(shù)據(jù)結(jié)構(gòu)實驗指導書》;

(4)多媒體電子教案的紙制版和網(wǎng)絡(luò)版;

(5)數(shù)據(jù)結(jié)構(gòu)與課程實驗指導書的紙制版和網(wǎng)絡(luò)版;

(6)自編的算法演示器;

(7)Flash課件和Flash算法演示;

(8)圖書館內(nèi),國外優(yōu)秀的經(jīng)典教材。

5.2 實驗實習條件

所有實驗在計算機系機房進行,機房現(xiàn)有的實驗平臺功能齊全,課程中所涉及的實驗項目均可在平臺上完成。目前課程實驗大綱中所列的實驗開出率達到100%,實驗教學效果良好。

5.3 課程成果

該課程2010年被評為河南省級精品課程,2012河南省級精品資源課程。

6 教學設(shè)計

《數(shù)據(jù)結(jié)構(gòu)》是一門理論與實踐相結(jié)合的課程。由于理論的抽象性,學生難以建立起數(shù)據(jù)結(jié)構(gòu)的相應(yīng)算法概念,容易產(chǎn)生畏懼和茫然的情緒。因此教學中在積極引導學生、啟發(fā)學生,激發(fā)學生學習的積極性。教學以課堂講授為主,同時借助網(wǎng)絡(luò)教學平臺,拓展課堂講授的相關(guān)知識,便于同學自主學習、鞏固課堂所學內(nèi)容。另外,組織獨立習題課,針對學生作業(yè)中出現(xiàn)的典型問題進行深入探討。

在教學中要貫徹“以理論學習為主線,以課程實驗、課程設(shè)計為補充”的教學思想。

6.1 精心組織教學內(nèi)容

分析學生的需求和現(xiàn)實,同時緊緊抓住教學目的,參考相關(guān)院校的教材和教學計劃,取長補短,參考考研大綱、軟考大綱,對課程的內(nèi)容進行嚴格的篩選,刪除一些較深且應(yīng)用不是很廣泛的內(nèi)容,對于重點的內(nèi)容要精講、細講,而對于有些較簡單且與先修課程交叉的內(nèi)容(如字符串與數(shù)組),就粗講,甚至可以留給學生去自學。這樣重點突出,簡潔明了。在課程內(nèi)容的安排上由淺入深,循序漸進。對每種數(shù)據(jù)結(jié)構(gòu)都按三個層次來組織教學內(nèi)容,并且把這三個層次的思想貫穿于數(shù)據(jù)結(jié)構(gòu)教學的各個環(huán)節(jié)。第一個層次,基本概念、方法,這是最基本的內(nèi)容,學生必須掌握,在學生很好地掌握了這個層次的內(nèi)容后,可進入第二個層次,基本概念、知識的簡單應(yīng)用,這一層次是對基本概念、知識加深理解,這個層次學生必須達到。第三個層次就是基本概念、方法的深入應(yīng)用,把所學的知識、方法串起來靈活運用。要達到這個層次,需經(jīng)過大量的訓練才行。

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)容預先告知學生,這樣學生就會對相關(guān)知識印象深刻,到數(shù)據(jù)結(jié)構(gòu)課中就很容易用的得心應(yīng)手。在數(shù)據(jù)結(jié)構(gòu)課中講到各種后續(xù)課程中用到的數(shù)據(jù)結(jié)構(gòu)時也告訴學生,并且在后續(xù)課程中用到相關(guān)數(shù)據(jù)結(jié)構(gòu)時提醒學生這是這種數(shù)據(jù)結(jié)構(gòu)在本課程中的應(yīng)用。這樣使學生的知識一脈相承,使學生在學習各門課程時把知識融會貫通。

6.3 精講多練,加強實踐環(huán)節(jié),培養(yǎng)學生分析問題解決問題的能力

數(shù)據(jù)結(jié)構(gòu)既有大量的理論又是實踐性很強的課程,學生要很好地掌握這門課,必須要有一定的理論知識,又要經(jīng)過大量的上機實踐。因此,針對應(yīng)用型本科的特點,在教學過程中,即注重理論,又重視實踐,加大上機實踐的力度。實踐由與理論課同時進行的上機實驗和理論課講授完畢后的課程設(shè)計兩部分組成。對所學的每一部分內(nèi)容都要要求學生完成相應(yīng)的實驗習題。整個實踐過程要結(jié)合教學進度與學生的實際情況,制定實踐的內(nèi)容。每部分的實驗習題必須精心挑選,和上述三個層次對應(yīng),分為基礎(chǔ)與驗證型實驗、設(shè)計與綜合型實驗,開發(fā)與創(chuàng)新型實驗。既要把基本知識掌握好,又要會靈活運用。基礎(chǔ)與驗證型實驗是基本的、較簡單的題目,主要結(jié)合課堂理論教學內(nèi)容展開,學生可以對在課堂上學到的基本算法進行驗證;設(shè)計與綜合型實驗是具有挑戰(zhàn)性的較難的新穎有趣的題目,讓學生充分利用所學的理論知識進行相對較復雜的應(yīng)用設(shè)計,培養(yǎng)學生綜合能力;開發(fā)與創(chuàng)新型實驗培養(yǎng)學生的創(chuàng)新意識,提高綜合能力和創(chuàng)新實踐能力。

6.4 多樣化的教學方法

6.4.1 啟發(fā)式教學

教師主要起引導的作用,激發(fā)學生的學習興趣,發(fā)揮學生的學習積極性,與學生進行互動,鼓勵學生對教學內(nèi)容提出問題,師生共同討論,提高教學和學習水平。鼓勵學生多動腦子進行思考,在學習過程中不拘于以往的解法,對同一個問題可以提出不同的解法,深化對問題的理解。另外還要強調(diào)學生自己學會對知識的總結(jié)、梳理、推演和挖掘。總結(jié)是教學中一個非常重要的環(huán)節(jié),不可忽視。通過對所學內(nèi)容的總結(jié)、梳理、推演和挖掘,理清內(nèi)容的內(nèi)在聯(lián)系,使知識條理化、系統(tǒng)化,加強對知識的理解和掌握,培養(yǎng)學生的歸納總結(jié)能力和思維創(chuàng)造能力,對所學內(nèi)容提煉出精華的東西。(下轉(zhuǎn)第260頁)

(上接第167頁)6.4.2 對比式教學

對同一問題,引導學生從不同的角度去思考,找出多種方法來解決。比如,在解決約瑟夫環(huán)問題時,可以采用循環(huán)鏈表作存儲結(jié)構(gòu),或采用線性表的順序存儲結(jié)構(gòu),也可以采用數(shù)組作存儲結(jié)構(gòu)。這種對同一問題尋找不同算法實現(xiàn)的教學方式,有效地開闊了學生的思路,同時通過對不同算法的比較,加深了學生對算法的理解和掌握。

6.4.3案例教學

通過實例引入知識點。比如講最小生成樹可以通過城市間建立通信聯(lián)絡(luò)網(wǎng)為例引入最小生成樹及其求解算法,再比如講最短路徑可以通過去旅游選擇最短路徑為例引入最短路徑及其求解方法。

6.5 把課程與考研、軟考、相關(guān)競賽有機的結(jié)合起來

數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)考研和軟考的必考科目,在教學過程中有意識地把考研和軟考引入教學中,使學生學完本課程后能夠從容應(yīng)對考研和軟考中的數(shù)據(jù)結(jié)構(gòu)題目。組織和鼓勵學生參加程序員,高級程序員證書考試,輔導學生參加各種編程競賽比如ACM大賽。

7 考核方法

要加強平時的學習過程管理,不定時地進行一些隨堂的小測試,課堂提問等??荚囈詫W生完成日常作業(yè)和實驗環(huán)節(jié)為必要條件,期末考試采用筆試方式。成績評定由三部分組成:期末考試占總成績的60%,平時成績占總成績的20%,實驗占總成績的20%,綜合考核學生該科成績。

8 結(jié)語

《數(shù)據(jù)結(jié)構(gòu)》對計算機科學與技術(shù)專業(yè)的學生來說是非常重要的課程,組織好教學,使學生通過該課程的教學,很好地掌握數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識,為今后的學習奠定良好的基礎(chǔ)是非常重要的。

【參考文獻】

篇2

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);實踐教學;指針;結(jié)構(gòu)體;C語言

中圖分類號:TP311.12

1 指針和結(jié)構(gòu)體的概念

在程序中定義一個變量,如int x;在編譯時系統(tǒng)就根據(jù)定義的變量類型,給這個變量分配相應(yīng)的內(nèi)存單元。內(nèi)存中每個字節(jié)都有一個編號,稱為“地址”,在地址所標識的內(nèi)存單元中存放數(shù)據(jù)。在程序中,一般通過變量名對內(nèi)存單元進行存取操作,稱為“直接訪問”,如x=7;printf(“%d”,x);假設(shè)定義一個變量p,用于存放整型變量x的地址,int*p=&x;則變量p稱為“指針變量”,我們稱指針p指向x。通過指針p訪問x,稱為“間接訪問”,如*p。

因此定義指針變量的格式是:基類型 *指針變量名;

引用指針變量的格式是:*指針變量名。

結(jié)構(gòu)體將不同類型的數(shù)據(jù)組合成一個有機的整體,定義一個新的數(shù)據(jù)類型,格式:typedef struct

{成員列表}結(jié)構(gòu)體名;

結(jié)構(gòu)體變量的引用格式:結(jié)構(gòu)體變量名.成員名。

2 線性結(jié)構(gòu)中指針和結(jié)構(gòu)體的使用

線性結(jié)構(gòu)中數(shù)據(jù)元素之間是1:1的線性關(guān)系,線性表是最基本的線性結(jié)構(gòu),有順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)兩種存儲方法。順序存儲結(jié)構(gòu)是在內(nèi)存中用一段連續(xù)的存儲單元來依次存儲線性表的數(shù)據(jù)元素,用元素在機內(nèi)的物理位置相鄰表示邏輯相鄰關(guān)系,常借助于數(shù)組來表示數(shù)據(jù)存儲區(qū)域。因此順序表類型定義如下:

#define MaxSize 100 // MaxSize是數(shù)組的容量,便于后期進行插入運算

typedef char DataType; //程序中的DataType設(shè)定為char型,便于統(tǒng)一修改

typedef struct{

DataType data[MaxSize];//data數(shù)組用于存放數(shù)據(jù)元素

int Last;//整型變量last存放當前順序表中最后一個數(shù)據(jù)元素的下標值

}SeqList;//SeqList為順序表的數(shù)據(jù)類型

SeqList*L;//定義一個指針變量L

L=new SeqList;//new用來申請順序表的存儲空間,L指向此順序表

順序表表長:L->Last+1

順序表中的數(shù)據(jù)元素:L->data[0]~L->data[L->Last]

比如順序表的插入運算Insert_SeqList(SeqList *L,int i,DataType x)基本語句如下:

for(j=L->last;j>=i-1;j--)

L->data[j+1]=L->data[j];//從最后一個元素到第i個元素逐一后移

L->data[i-1]=x; //在i位置處插入元素x

L->last++; //表長加1

鏈式存儲結(jié)構(gòu)是用一組任意的存儲單元存放線性表的數(shù)據(jù)元素,邏輯次序和物理次序不一定相同,元素之間的邏輯關(guān)系用指針表示。單鏈表的類型定義如下:

typedef struct Node{

DataType data;//數(shù)據(jù)域,存儲數(shù)據(jù)元素

struct Node * next;//指針域,存儲后繼結(jié)點的地址

}Lnode,*LinkList;

LNode*p;//定義一個LNode類型的指針變量p

p->data //p所指結(jié)點的數(shù)據(jù)域

p->next //p所指結(jié)點的指針域,即后繼結(jié)點的存儲地址

LinkList:指向LNode類型的指針變量,通常用于定義頭指針的數(shù)據(jù)類型,如

LinkList head; //定義了一個頭指針head

比如在p所指向的數(shù)據(jù)元素之后插入新結(jié)點,基本語句為:

LNode*s;//定義一個LNode類型的指針變量s

s=new LNode;//申請結(jié)點空間

s->data=x;

s->next=p->next;

p->next=s;//注意:兩個語句的操作順序不能交換。

3 樹形結(jié)構(gòu)中指針和結(jié)構(gòu)體的使用

樹形結(jié)構(gòu)中數(shù)據(jù)元素之間是一對多的關(guān)系,以二叉樹為例,一般采用鏈式存儲結(jié)構(gòu),便于進行插入、刪除運算。二叉樹類型定義如下:

typedef struct node{

DataType data; //數(shù)據(jù)域

struct node *lchild,*rchild; //左右指針域

}BiTNode;

typedef BiTNode *BiTree; //指向二叉樹結(jié)點的指針類型

如構(gòu)造二叉樹算法如下:

void CreateBiTree( BiTree*t) //構(gòu)造二叉鏈表

{ char ch;

scanf("\n%c",&ch);

if(ch=='0') *t=NULL; //讀入0時,將相應(yīng)結(jié)點置空

else{*t=new BiTNode; //申請結(jié)點空間

(*t)->data=ch;

CreateBiTree(&(*t)->lchild); //構(gòu)造二叉樹的左子樹

CreateBiTree(&(*t)->rchild); //構(gòu)造二叉樹的右子樹

} }

4 圖形結(jié)構(gòu)中指針和結(jié)構(gòu)體的使用

圖形結(jié)構(gòu)中數(shù)據(jù)元素之間是多對多的關(guān)系,一般采用鄰接矩陣進行存儲,存儲頂點和邊(或者弧)的信息。以鄰接矩陣存儲圖的類型定義:

typedef struct{

int visited[MaxV]; //頂點表

int edges[MaxV][MaxV]; //邊表

int vertexN,edgeN; //頂點數(shù)和邊數(shù)

}Graph;

比如圖的深度優(yōu)先遍歷算法如下:

void DFS (Graph*G,int v){

int w;

G->visited[v]=1;

for(w=0;wvertexN;w++){

if(G->edges[v][w] && !G->visited[w]) { DFS(G, w); }

} }

5 結(jié)束語

指針和結(jié)構(gòu)體在數(shù)據(jù)結(jié)構(gòu)中頻繁使用,希望通過本文的講解,幫助學生理解結(jié)構(gòu)體定義數(shù)據(jù)類型的方法,掌握利用指針完成操作的方法,學好《數(shù)據(jù)結(jié)構(gòu)》這門課程,為后續(xù)專業(yè)課奠定良好的基礎(chǔ)。

參考文獻:

[1]譚浩強.C程序設(shè)計(第二版)[M].北京:清華大學出版社,2002.

[2]劉振鵬.數(shù)據(jù)結(jié)構(gòu)(第六版)[M].北京:中國鐵道出版社,2010.

[3]楊麗萍.數(shù)據(jù)結(jié)構(gòu)中指針的應(yīng)用及分析[J].計算機時代,2012(02).

[4]孔兵.數(shù)據(jù)結(jié)構(gòu)實驗中指針相關(guān)問題[J].教育教學論壇,2014(01).

篇3

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);教學模式;教學方法

中圖分類號:G424文獻標識碼:A文章編號:1009-3044(2008)24-1219-02

Discussion on the Tteaching Practice of "Data Structure"

CHEN Pei-zheng, ZHANG Hao-ming

(Department of Medical Informatics, Guangdong College of Pharmacy, Guangzhou 510003, China)

Abstract: The course of "Data Structure" is the foundation of computer theory and technology, which is abstruse and hard to understand. It is a discussable topic on the teaching pattern and teaching method. In this paper, to prompt the teaching effect, how to take good teaching method on the process of teaching the course of "Data Structure" are discussed.

Key words: data structure; teaching pattern; teaching method

1 引言

《數(shù)據(jù)結(jié)構(gòu)》是計算機應(yīng)用專業(yè)的專業(yè)基礎(chǔ)課程,也是整個計算機學科體系中的四大支柱課程之一。該課程主要介紹各種離散結(jié)構(gòu)(如表、向量、集合、樹、圖等)在計算機上的存儲和處理,以及一些常用算法?!稊?shù)據(jù)結(jié)構(gòu)》也是一門理論性很強的課程,是從事計算機軟件開發(fā)的基礎(chǔ),對培養(yǎng)學生良好的編程思想和風格也有很大的幫助作用。《數(shù)據(jù)結(jié)構(gòu)》重在理論,其概念的抽象性、算法的經(jīng)典性和復雜性、描述語言的先進性,導致在以往的教學中,理論教學和實踐教學未能很好的結(jié)合起來,加上通常大學學生的編程經(jīng)驗相對較少,學習起來難度特別大,被公認為是高校計算機課程中最難學好的課程之一。

2 《數(shù)據(jù)結(jié)構(gòu)》教學方法和措施

《數(shù)據(jù)結(jié)構(gòu)》課程具有較高的抽象性,學生普遍反應(yīng)難學。針對學生的特點,筆者在《數(shù)據(jù)結(jié)構(gòu)》的課程教學實踐中總結(jié)了一些教學方法和措施,并取得了較好的效果。主要體現(xiàn)在以下幾個方面:

2.1 使學生合理認識《數(shù)據(jù)結(jié)構(gòu)》課程

在課程開始階段,首先要強調(diào)這門課程的重要性,及其在計算機學科體系中的地位。數(shù)據(jù)結(jié)構(gòu)對于計算機專業(yè)的學生來說很重要,特別是對于從事計算機專業(yè),特別是軟件開發(fā)的人心里都清楚這點。有些愛好計算機的發(fā)燒友,自己學習了某種開發(fā)工具(編程語言),也能動手編程,但編出的程序總是顯得很“業(yè)余”,很難再做修改,或者進行移植,為什么呢?這就是缺乏了學習數(shù)據(jù)結(jié)構(gòu)這門課程。事實上,凡是真正學習了這門課程,都會認為它是計算機專業(yè)與非專業(yè)的一個分水嶺。它不僅是計算機專業(yè)的核心課程, 也是其他理工科專業(yè)的熱門選修課,特別是非計算機專業(yè)攻讀計算機輔修專業(yè)的學生,或者學習計算機程序設(shè)計的其他人員必須要學習的。

2.2 介紹《數(shù)據(jù)結(jié)構(gòu)》課程的特點和學習方法

說明這門課程的特點。很多同學反映數(shù)據(jù)結(jié)構(gòu)很抽象、很難學而且內(nèi)容又多。確實,本課程需要一門程序設(shè)計語言的知識(例如C++語言),還需要一些離散數(shù)學的知識。有些同學由于沒有這方面的基礎(chǔ),導致在看書時無法理解各種算法的思想,更無法看懂實現(xiàn)這些算法的程序。針對這種現(xiàn)狀,就要求這些學生首先要補習相關(guān)知識,如有必要,還要專門增加課時進行補習。在介紹課程的主要內(nèi)容時,需要用明白易懂而又概括性強的語言來描述。

數(shù)據(jù)結(jié)構(gòu)中涉及很多C++算法,學生直接閱讀很困難,事實上所有計算機程序都這樣,讀別人的程序,如果不清楚算法的思想,可能比自己寫程序還難,即使自己寫的程序,過了較長一段時間,再讀會很困難。因此,本人制作的教學課件中,將一些比較重要又較難的算法做成了動畫演示,這樣其中的算法思想看起來就很直觀,易懂。然后,再對照C++算法的每一條語句,來演示其實際變化過程,這樣一步一步理解整個算法,這對同學的幫助很大。還有,準備一些由淺到深的算法過程,讓同學來讀算法寫結(jié)果,幫助同學理解算法的意義。

另外,由于數(shù)據(jù)結(jié)構(gòu)涉及的內(nèi)容很多,教學中必須說明、區(qū)分重點內(nèi)容,否則教師和學生將花費太多的精力和時間(事實上,輔導時間也不允許)。例如,針對算法描述,我會說明算法思想更重要,而算法的C++函數(shù)定義只重點要求幾個基本而典型的算法。事實上,中央電大歷屆的考題是這樣,電大學生的實際狀況也是這樣。在平時教學過程中,特別是期末復習時,我會重點要求各種算法的基本思想,再針對部分算法的C++語言描述重點要求掌握。對這些重點內(nèi)容,不僅要多講解習題來印證,還要求同學下來完成平時作業(yè),并適當補充一些往屆考題。

2.3 實例教學,形象生動

所謂“實例教學”,就是對課程中的重點、難點內(nèi)容,選配適當?shù)睦}、運用恰當?shù)谋扔鬟M行演示和說明,把抽象的內(nèi)容具體化、形象化,幫助學生理解掌握這些內(nèi)容,并適當加以引伸,引導并激發(fā)學生作進一步的思考和探索。

應(yīng)該結(jié)合學生實際情況,使用更加通俗、形象、生動、直觀的教學語言和教學方法進行講授,注重激發(fā)學生的學習興趣,更有效地幫助學生理解和掌握課程內(nèi)容。例如在講解堆棧和隊列的時候,學生對這兩個概念比較陌生,于是我們通過與日常生活中的疊盤子、食堂排隊買飯等現(xiàn)象聯(lián)系起來進行比喻說明,學生不僅聽起來較有興趣,易于理解,而且效果也遠比只單純地念定義要強得多。

從學生的角度來看,通過一個比較有趣的實例,學生可以較容易地弄懂一個較復雜的知識點,在克服困難的過程中會不斷地獲得成就感,從而更大程度地激發(fā)他們的求知欲望,逐步形成一個感知心智活動的良性循環(huán),更能激發(fā)其繼續(xù)學習的欲望。

2.4 重視上機實踐,提高學生的學習興趣

本門課程強調(diào)對上機實驗的要求,專門有實驗指導教材,并要求每個實驗都要寫出實驗報告,就這門課程而言,不同教材采用不同的程序設(shè)計語言,以前還有自定義的一種語言,而現(xiàn)在都采用實際的計算機語言,例如Pascal語言,C語言,C++語言等,之所以要用一門計算機語言來數(shù)據(jù)結(jié)構(gòu)的算法,就是要達到這樣一個目的:讓學生在實際上機實踐操作時,在程序的運行、調(diào)試過程中,也即與計算機交流的過程,體會計算機解決問題的方式。而當學生意識到這一點后,就會體會到軟件開發(fā)的奧秘,激發(fā)其興趣,慢慢就會自己上路從事軟件開發(fā)工作了。這就是學習數(shù)據(jù)結(jié)構(gòu),學習數(shù)據(jù)組織和對已組織好的數(shù)據(jù)的基本處理對計算機專業(yè),特別是軟件開發(fā)專業(yè)學生的深刻影響。

2.5 聯(lián)系實際,學以致用

《數(shù)據(jù)結(jié)構(gòu)》是一門理論性課程,重在對編程思想和風格的培養(yǎng),簡單的死記硬背一些概念、定義沒有任何的用處,我們講課的目的就是要讓學生在學習完《數(shù)據(jù)結(jié)構(gòu)》之后,能夠主動的將書中的知識靈活運用到生活中去,所以在教學的過程中聯(lián)系實際非常重要。在教學過程中,我們努力使每個知識點都與具體的應(yīng)用實際聯(lián)系起來,促進了學生的理解,提高了他們的實踐應(yīng)用能力。

例如我們在講授圖的概念時,學生不理解圖的最小生成樹有何用處,于是我們列舉了網(wǎng)絡(luò)布線,城市道路建設(shè),郵遞員送信等大量應(yīng)用實例,同時啟發(fā)學生自己去發(fā)現(xiàn)其他的一些應(yīng)用實例。結(jié)果學生很感興趣,對這個知識點記憶非常深刻。

2.6 多課程結(jié)合,融會貫通

幾乎每一門課程都有前驅(qū)和后續(xù)課程,《數(shù)據(jù)結(jié)構(gòu)》也不例外。而且《數(shù)據(jù)結(jié)構(gòu)》作為一門專業(yè)基礎(chǔ)課程,同時又是計算機學科的支柱課程之一,其中的很多知識將貫穿計算機知識學習的整個過程。所以講授《數(shù)據(jù)結(jié)構(gòu)》更應(yīng)該注重與其他相關(guān)課程的聯(lián)系,通過《數(shù)據(jù)結(jié)構(gòu)》的講解使學生對整個計算機課程有一個較全面的了解,讓學生在頭腦中形成一條清晰的學科主線。

例如在講解稀疏矩陣的時候,我們先簡單回顧《多媒體》課程中圖像壓縮的方法,然后告訴學生之所以可以壓縮圖像,是因為圖像中含有大量的稀疏矩陣,同時,稀疏矩陣的存儲方法和訪問方法會直接影響圖像的壓縮效果和壓縮效率。通過這個例子,學生不但理解了稀疏矩陣的相關(guān)概念,同時也將本門課程同《多媒體》課程中的相關(guān)知識有機地聯(lián)系起來了。

3 結(jié)束語

由于《數(shù)據(jù)結(jié)構(gòu)》是計算機專業(yè)的骨干、核心課程,也是大多數(shù)學校研究生入學考試的必考課程。因此,對于該課程的教學不僅要從理論上進行探討,還要從內(nèi)容結(jié)構(gòu)、教學方法等方面進行研究,作者根據(jù)自己的教學經(jīng)驗和體會完成本文,與各位同行交流,希望共同搞好《數(shù)據(jù)結(jié)構(gòu)》課程的教學工作。

參考文獻:

[1] 周婭.“數(shù)據(jù)結(jié)構(gòu)”課堂教學與學生創(chuàng)新思維培養(yǎng)[J].桂林電子工業(yè)學院學報,2006,26(4):326-328.

篇4

關(guān)鍵詞 數(shù)據(jù)結(jié)構(gòu) 微課 碎片時間

中圖分類號:G642 文獻標識碼:A

數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)一門重要的基礎(chǔ)課程,其中涉及到了大量難度較大的算法描述,例如在模式匹配中的KMP算法,樹中的二叉樹搜索樹和圖中的迷宮,最短路徑問題等。

學習過程中,學生們普遍遇到的問題是,經(jīng)常當堂無法領(lǐng)悟難度較大的算法,或者當堂領(lǐng)悟了,過后由于算法的復雜度較高,個別知識點的的遺忘造成無法理順整個思路。但幾乎所有從事計算機編程的學生都會有這樣的反饋:數(shù)據(jù)結(jié)構(gòu)在實際應(yīng)用中非常重要且實用。綜上所述,如何提高數(shù)據(jù)結(jié)構(gòu)課程的當堂授課效果,或者提供一些學生可以很容易自學的課下輔助教學平臺,是非常有意義和值得探討的問題。

“微課”是指以視頻為主要載體,記錄教師在課堂內(nèi)外教育教學過程中圍繞某個知識點(重點難點疑點)或教學環(huán)節(jié)而開展的精彩教與學活動全過程。與傳統(tǒng)的教學視頻相比,“微”體現(xiàn)在時間的短和內(nèi)容的精悍,能夠充分滿足人們生活的快節(jié)奏所帶來的利用“碎片時間”進行學習的需求,而移動互聯(lián)網(wǎng)的迅猛發(fā)展,為這一需求提供了必要的硬件基礎(chǔ),以手機為載體,隨時隨地觀看微小視頻進行知識的學習和補充成為可能。數(shù)據(jù)結(jié)構(gòu)課程的微課化是指,利用微課形式,通過視頻,將數(shù)據(jù)結(jié)構(gòu)中的難點算法進行有效的講解和展示,讓學生或自學人員可以不受時間、地點的限制,進行相關(guān)知識點的學習,跟傳統(tǒng)的視頻教學相比,克服了時長(一般為40到60分鐘)所帶來的畏難心理,以10分鐘左右為一個單元,可以在短時間內(nèi)輕松獲取知識。但這也對視頻的制作和知識點的提煉、組織提出了更高的要求,短小而又精悍,給人以深刻的印象,又能達到學會的目的,是微課制作的難點所在。

以數(shù)據(jù)結(jié)構(gòu)中的二叉搜索樹為例,二叉搜索的概念其實在現(xiàn)實生活中就經(jīng)常使用,例如看商品猜價格,就用到了二叉搜索的方式,設(shè)計該微課時,就可以以此為切入點,首先通過看商品猜價格游戲的方式進行知識點的引入,在猜價格的過程中,通過軟件編程控制,提示價格猜高或者猜低,最終引導用戶猜中價格,根據(jù)用戶猜測的次數(shù)給出一個不同的提示,如果成績不理想,用戶可以進一步學習失敗的原因(猜測策略),然后提高猜中效率。興趣是最好的老師,通過這個有趣的開端,大家就有了進一步學習的欲望。接下來是二叉搜索樹的創(chuàng)建,一組需要查找的無序數(shù)據(jù),如果組織,才能盡可能地高效地完成搜索任意一個數(shù)據(jù)的過程,利用二叉搜索樹,可以在避免傳統(tǒng)排序的基礎(chǔ)上,進行高效的查找,于是如何建立出這樣一棵二叉搜索樹,成為大家進一步關(guān)心的知識點。通過前期自動演示,學習者可以很容易地掌握算法的思想,然后借助于一些交互功能較強的軟件,可以實現(xiàn)由用戶自己創(chuàng)建二叉搜索樹的過程。通過這一系列的演示過程,用戶可以很容易地學到二叉搜索樹的相關(guān)知識點。

以上所說,對于制作微課的人員來講,技術(shù)上的難度是存在的,制作者要求會錄制,編輯視頻,還要掌握一些交互式課件的制作軟件,以及聲音的錄制,多媒體合成等等,但教授數(shù)據(jù)結(jié)構(gòu)課程的教師,不同于其他專業(yè),本身就是從事計算機技術(shù)的,有著這方面的獨特優(yōu)勢,因此,只要根據(jù)需求稍加學習,就能很快地掌握這些技術(shù),這也是數(shù)據(jù)結(jié)構(gòu)課程可以微課化的一個優(yōu)勢條件。微課質(zhì)量的好壞,關(guān)鍵還在于設(shè)計,好的設(shè)計可以彌補技術(shù)上不足,因此千萬不要因為過于重注技術(shù)而忽略設(shè)計。

隨著移動互聯(lián)網(wǎng)技術(shù)的發(fā)展,通過網(wǎng)絡(luò)進行隨時隨地的學習已經(jīng)成為一種必然的方式,對于數(shù)據(jù)結(jié)構(gòu)中較難的知識點,傳統(tǒng)的課堂視頻錄制時間長、效果差,不便于學生利用碎片時間學習,通過巧妙的設(shè)計,利用多種形式,多種技術(shù)將其呈現(xiàn)為可視化的小視頻,可以大幅度提高學生的學習效果。通過微課這種新型的教學手段,可以讓類似數(shù)據(jù)結(jié)構(gòu)這種難度大、難理解的課程,更好地輔助學生完成知識點的回顧和難點的掌握,快速地完成復雜算法的學習,為后續(xù)課程的學習打下堅實的基礎(chǔ),對全面提升學習效率有著積極的意義。

篇5

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);Floyd最短路徑算法;醫(yī)院選址;C語言

中圖分類號:G642.41 文獻標志碼:A 文章編號:1674-9324(2014)36-0280-02

一、引言

《數(shù)據(jù)結(jié)構(gòu)》課程是計算機類、信息管理類、電子商務(wù)、經(jīng)濟類及相關(guān)專業(yè)的一門重要的專業(yè)基礎(chǔ)課程。早在1968年,美國一些學校的計算機系就開設(shè)《數(shù)據(jù)結(jié)構(gòu)》課程。20世紀70年代中后期,我國也開設(shè)《數(shù)據(jù)結(jié)構(gòu)》課程作為計算機專業(yè)的核心課程。開設(shè)該課程的目的在于讓學者了解數(shù)據(jù)的計算機外部邏輯結(jié)構(gòu)和計算機內(nèi)部的存儲結(jié)構(gòu)以及相關(guān)操作,它為后續(xù)的專業(yè)課程,如編譯原理、數(shù)據(jù)庫原理、操作系統(tǒng)、系統(tǒng)分析與設(shè)計等課程提供必要的知識和技能準備。本人認為數(shù)據(jù)結(jié)構(gòu)學習中的難點包括遞歸程序的閱讀、非線性結(jié)構(gòu)中圖和樹的相關(guān)算法,尤其是圖的最短路徑、拓撲排序、關(guān)鍵路徑的基本應(yīng)用,學習難點在于:圖的存儲結(jié)構(gòu)、圖中頂點的定位、圖中各個頂點的訪問方法等。本文試圖就圖的最短路徑算法的學習過程進行探討。在學習中,我們發(fā)現(xiàn):在圖形結(jié)構(gòu)中,節(jié)點之間的關(guān)系可以是任意的,圖中任意兩個元素之間都有可能相鄰,如果對圖進行操作或者遍歷的話,必須先確定圖中第一個訪問的頂點,才能對其他頂點進行訪問(操作),因此,圖是一種比線性表和樹更為復雜的非線性數(shù)據(jù)結(jié)構(gòu)。圖之所以仍然作為《數(shù)據(jù)結(jié)構(gòu)》課程的重要內(nèi)容出現(xiàn),是因為圖的存儲結(jié)構(gòu)容易定義和掌握,但是需要通過圖的形式化定義及其相關(guān)操作來實現(xiàn)具體問題的求解,這就是我們所說的在《數(shù)據(jù)結(jié)構(gòu)》的圖中需要掌握的重要知識點。圖的運算已經(jīng)成為人們解決實際問題的重要工具,比如通過Prim算法或Kruskal算法求最小生成樹以構(gòu)造最低價的通信網(wǎng);通過關(guān)鍵路徑求解確定一個工程中的“關(guān)鍵工程”;通過Dijkstra算法求某個源點到其余各個頂點的最短路徑,解決物流配送的最短路徑選擇;通過Floyd算法計算每一對頂點之間的最短路徑,用于確定設(shè)施的選址。本文重點討論Floyd算法在醫(yī)院選址問題中的應(yīng)用。

醫(yī)院是社會的重要基礎(chǔ)設(shè)施,醫(yī)院建設(shè)的選址必須本著以人為本、服務(wù)社會、經(jīng)濟效益的原則,如何使群眾就醫(yī)路徑較短,是醫(yī)院選址需要充分考慮的問題,本文以患者就醫(yī)路徑最短為切入點,選址問題轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)圖論中的求解最短路徑的問題,并采用Floyd算法對最短路徑問題進行求解,為醫(yī)院的選址問題提供定量分析。

二、Floyd算法基礎(chǔ)概念

1.圖:頂點和連線的集合,G=(V,VR),其中V是圖中頂點的有窮非空集合,VR是兩個頂點的關(guān)系的集合,即圖中連線的集合。若VR中頂點對是有序的,則為有向圖,否則為無向圖。

2.連通圖:在無向圖或者有向圖G=(V,VR)中,若任意兩個頂點v,w都能找到一條路徑連接v和w,G即為連通圖。

3.網(wǎng):帶權(quán)值的圖稱為網(wǎng)。

4.鄰接矩陣:表示頂點之間連接關(guān)系的矩陣。網(wǎng)的鄰接矩陣定義如下:

A[i,j]=w■,(v■,v■)或∈VR∞,其他

三、Floyd算法基本思想

最短路徑問題是數(shù)據(jù)結(jié)構(gòu)圖論中的一個典型問題,這里的最短路徑,不僅僅指的是距離的長短,還可以引申為經(jīng)濟費用、時間等廣義上的最短。在數(shù)據(jù)結(jié)構(gòu)中求解網(wǎng)絡(luò)中任意兩個頂點之間的最短路徑的典型算法是Floyd算法。

Floyd算法的基本思想是:從帶權(quán)鄰接矩陣出發(fā),若(vi,vj)存在,則存在路徑長度D[i][j],但該路徑不一定是最短路徑,需要進行n次試探。如果存在一個k,且D[i][k]+D[k][j]

四、實例應(yīng)用

(一)醫(yī)院選址問題建模

現(xiàn)假設(shè)給定n個村莊之間的交通圖,現(xiàn)在要從這n個村莊中選擇一個村莊建一所醫(yī)院,要求離醫(yī)院最遠的村莊到醫(yī)院的路程最短。

上述問題中,可將地理信息中的交通網(wǎng)絡(luò)抽象為數(shù)學模型,以頂點表示村莊,以連線表示村莊之間的道路,因此交通圖轉(zhuǎn)化為由有限頂點和有限條邊組成的無向圖,圖中頂點之間的關(guān)系由權(quán)值表示,定義權(quán)矩陣為前述網(wǎng)的帶權(quán)鄰接矩陣,wij的值為村莊之間的道路距離。這樣醫(yī)院選址問題就轉(zhuǎn)化為在全部頂點之間最短距離的最大值中尋找最小值的問題,按照Floyd算法進行運算。

(二)醫(yī)院選址算法示例

1.假設(shè)有6個村莊,村莊v0、v1之間道路距離為12,v0、v2為3,v0、v4為9,v0、v5為10,v1、v3為2,v1、v4為6,v2、v3為2,v2、v5為6,v3、v4為4,v3、v5為7,v4、v5為4。將6個村莊作為頂點,有直接道路的村莊之間連線,頂點之間的邊所對應(yīng)的權(quán)值為村莊之間的道路距離。

2.按照上文的算法,建立帶權(quán)鄰接矩陣D0。

3.第一次迭代,插入v0后計算最短路徑,即兩點之間可以有一個中間點的最短路徑,D1[i][j]=min{D0[i][j],D0[i]+D0[j]}。

4.第二次迭代,插入v1,D2[i][j]=min{D1[i][j],D1[i]+D1[j]},在D1的基礎(chǔ)上構(gòu)建D2。

5.第三次迭代,插入v2,D3[i][j]=min{D2[i][j],D2[i]+D2[j]},在D2的基礎(chǔ)上構(gòu)建D3。

6.第四次迭代,插入v3,D4[i][j]=min{D3[i][j],D3[i]+D3[j]},在D3的基礎(chǔ)上構(gòu)建D4。

7.第五次迭代,插入v4,D5[i][j]=min{D4[i][j],D4[i]+D4[j]},在D4的基礎(chǔ)上構(gòu)建D5。

8.第六次迭代,插入v5,D6[i][j]=min{D5[i][j],D5[i]+D5[j]},在D5的基礎(chǔ)上構(gòu)建D6,D6就是最后求得的最短距離矩陣。

9.以各個頂點為源點的最短距離的最大值maxdis={9,9,6,7,9,9},min{maxdis[i]}=6,對應(yīng)頂點為v2,因此本例的最終醫(yī)院選址為v2村莊。

(三)選址算法的C語言實現(xiàn)

1.圖的鄰接矩陣存儲結(jié)構(gòu)表示。

#define MAX_VERTEX_NUM 20 //最大頂點個數(shù)

#define INF 100000 //代替∞

vexs; //頂點向量,用于存儲頂點名稱

arcs; //鄰接矩陣

typedef int VRType;

typedef int VertexType;

//圖的鄰接矩陣存儲表示

typedef struct

{

VRType adj;

}AdjMatrix;

typedef struct

{

VertexType vexs; //頂點向量,用于存儲頂點的信息(名稱)

AdjMatrix arcs;

int vexnum,arcnum; //頂點數(shù)和弧數(shù)

}MGraph;

typedef int DistancMatrix; //距離矩陣

2.主要算法。

void shortesPath_Floyd(MGraph G, DistancMatrix * D)

{

?搖for(v=0;v

for(w=0;w

(*D)[v][w]=G.arcs[v][w].adj;

for(u=0;u

for(v=0;v

for(w=0;w

if((*D)[v][u]+(*D)[u][w]

?搖 ?搖?搖(*D)[v][w]=(*D)[v][u]+(*D)[u][w];//更新最短距離

}

void compare(MGraphG,DistancMatrixD)

{

?搖 for(i=0;i

?搖{

maxdis[i]=0;

for(j=0;j

if(maxdis[i]!=INF&&maxdis[i]

{

maxdis[i]=D[i][j];

maxi[i]=G.vexs[i];

}

}

for(i=0;i

if(maxdis[i]>maxdis[i+1]) //比較maxdis中的最小值,mini為醫(yī)院選址

{

min=maxdis[i+1];

mini=maxi[i+1];

}

}

五、結(jié)論

實際應(yīng)用中,醫(yī)院選址問題需要考慮眾多因素,可以設(shè)置權(quán)值為各項耗費總值。本文運用Floyd算法將醫(yī)院選址問題進行了量化,并采用C語言實現(xiàn),在實際的設(shè)施合理選擇中,具有一定的理論意義和實用價值。除了選址問題,物流配送的路線選擇、旅游中最短路線的設(shè)計等問題都可以通過建立數(shù)學模型進行算法設(shè)計。在數(shù)據(jù)結(jié)構(gòu)的學習過程中,我們更需要學會的是如何將實際問題抽象為合理的數(shù)學模型,然后設(shè)計一個解決該模型的算法,最后進行編程、測試得到最終解答。

參考文獻:

[1]陳燕,曹妍,賈紅雨.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:科學出版社,2014.

[2]王軍,王偉,公長春.基于多因素評價法下的社區(qū)醫(yī)院投資研究[J].中國全科醫(yī)學,2010,13(10A):3143-3144.

[3]嚴蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學出版社,2009.

[4]王曉東.算法設(shè)計與分析[M].北京:清華大學出版社,2011.

[5]趙麗娜,李慧.基于Floyd最短路徑算法的教材中心選址問題[J].中國教育技術(shù)裝備,2014,(4):40-42.

篇6

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

1引言

數(shù)據(jù)結(jié)構(gòu)作為計算機核心學科,其主要研究內(nèi)容:邏輯結(jié)構(gòu),物理存儲結(jié)構(gòu),操作(或算法)[1]。通常,算法的設(shè)計取決于數(shù)據(jù)的邏輯結(jié)構(gòu),算法的實現(xiàn)取決于數(shù)據(jù)的物理存儲結(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)、存儲結(jié)構(gòu)和操作運算等方面進行研究,是貫穿數(shù)據(jù)結(jié)構(gòu)研究始終的“紅線”,也是數(shù)據(jù)結(jié)構(gòu)研究的共同切入點,稱之為數(shù)據(jù)結(jié)構(gòu)的“橫向聯(lián)系”。從集合、線型結(jié)構(gòu)等基本數(shù)據(jù)結(jié)構(gòu)入手,以實現(xiàn)樹形結(jié)構(gòu)、圖或網(wǎng)狀結(jié)構(gòu)等較復雜結(jié)構(gòu)研究,實現(xiàn)數(shù)據(jù)元素間的關(guān)系從簡單到復雜探討,稱之為“縱向聯(lián)系”。

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

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

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

線型結(jié)構(gòu)是N個數(shù)據(jù)元素的有限序列,至于每一個數(shù)據(jù)元素的具體的含義在不同的情況下各不相同,其長度可根據(jù)需要增長或縮短,其邏輯結(jié)構(gòu)就是它的數(shù)據(jù)元素間的線形關(guān)系,即一個對一個,一個元素最多有一個前驅(qū),最多有一個后繼。它的存儲結(jié)構(gòu)的實現(xiàn)一般有順序存儲和鏈式存儲兩種方法。順序表是指用一組地址連續(xù)的存儲單元依次存儲線性結(jié)構(gòu)中的數(shù)據(jù)元素,這是一種隨機存取的存儲結(jié)構(gòu);鏈式存儲是數(shù)據(jù)元素之間的邏輯關(guān)系由結(jié)點中的指針來表示并且每一個結(jié)點有且只有一個指針域。線性結(jié)構(gòu)的操作中,最基本的操作是在線性結(jié)構(gòu)中插入、刪除數(shù)據(jù)元素。存儲結(jié)構(gòu)為順序存儲有線性順序表、數(shù)組、串等。存儲結(jié)構(gòu)為鏈式存儲結(jié)構(gòu)時有鏈表等。根據(jù)線性表的操作的不同便產(chǎn)生了兩種重要的數(shù)據(jù)結(jié)構(gòu)即棧和隊列,這兩種數(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)系,而在二叉樹中是一個根結(jié)點對應(yīng)左右兩個孩子的層次關(guān)系。存儲結(jié)構(gòu)的實現(xiàn)當采取順序存儲時用一組地址連續(xù)的存儲單元依上而下、自左向右存儲樹中的結(jié)點元素。在鏈式存儲結(jié)構(gòu)中可采用二叉鏈表表示法即鏈表中結(jié)點的兩個鏈域分別指向該結(jié)點的第一個孩子和下一個兄弟結(jié)點,樹形結(jié)構(gòu)的最基本的操作是遍歷,其它復雜的操作大部分就是遍歷操作的衍生與擴展。在樹型結(jié)構(gòu)中最有特色的一種數(shù)據(jù)結(jié)構(gòu)就是二叉樹,其獨特的邏輯結(jié)構(gòu)是每個結(jié)點至多有二棵子樹并且還有左右之分,這就決定著它獨特的鏈式存儲結(jié)構(gòu),每個數(shù)據(jù)元素有且只有兩個指針分別指向該結(jié)點的左右孩子。二叉樹的最基本的操作是遍歷二叉樹,對每個結(jié)點的訪問是對其它復雜操作的基礎(chǔ),例如統(tǒng)計結(jié)點個數(shù)、統(tǒng)計葉子結(jié)點數(shù)、交換二叉樹的左右孩子等一些復雜的操作運算均是遍歷二叉樹操作的擴展和衍生?;诙鏄涞倪f歸定義可得到遍歷二叉樹遞歸算法,前序遍歷、中序遍歷、后序遍歷二叉樹。

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

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

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

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

用棧實現(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;}

}}

用棧實現(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;}}

用棧來實現(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;}

}}}

用隊列實現(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);}

}

用隊列實現(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īng)用,靈活運用棧和隊列可實現(xiàn),并且算法描述比較直觀。線性結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)學科的基礎(chǔ),樹、圖的發(fā)展在線性結(jié)構(gòu)的基礎(chǔ)上而發(fā)展,因樹、圖發(fā)展促進著線性結(jié)構(gòu)中和一些算法的完善和改進,線型結(jié)構(gòu)、樹型結(jié)構(gòu)、圖狀結(jié)構(gòu)是緊密相聯(lián)的。

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

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

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

5結(jié)論

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

參考文獻

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

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

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

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

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

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

篇7

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

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

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

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

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

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

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

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

【算法1】

PROCEDURE INSERT(V,m,n,X)

//將值為X的數(shù)據(jù)元素插入到V數(shù)組中,(線性表順序存貯在V中)m為最多元素個數(shù),n為當前實際元素個數(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)點是簡單,便于理解,缺點是:

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

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

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

2.2 利用經(jīng)典算法學習算法設(shè)計

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

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

【算法4】

PROCEDURE INSERT(V,I,X)

//將值為X的數(shù)據(jù)元素插入到已有序的前I-1個數(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)典算法對于教好、學好《數(shù)據(jù)結(jié)構(gòu)》至關(guān)重要;經(jīng)典算法要有助于學生理解對應(yīng)的數(shù)據(jù)結(jié)構(gòu),經(jīng)典算法的分析要側(cè)重于程序設(shè)計能力的提高。

參考文獻

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

篇8

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

一、課程的重要性

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

二、教學中存在的問題

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

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

2.實踐機會少,動手能力差。

3.缺乏課外輔導,學生自學時障礙重重。

三、解決方法

鑒于以上幾點,可以從這幾方面進行教學改革:

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

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

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

四、改革成果

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

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

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

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

五、結(jié)束語

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

參考文獻:

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

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

篇9

關(guān)鍵詞 數(shù)據(jù)結(jié)構(gòu)課程;MOOC教學模式;教學設(shè)計

中圖分類號:G642.3 文獻標識碼:B

文章編號:1671-489X(2017)01-0037-03

1 引言

隨著互聯(lián)網(wǎng)時代的到來,涌現(xiàn)出來一種大規(guī)模開放在線課程(MOOC)教育模式。那么什么是MOOC呢?MOOC一詞是由加拿大學者Dave Cormier和Bryan Alexander提出的[1]。MOOC(Massive Open Online Course)是指大規(guī)模的免費網(wǎng)絡(luò)開放課程。參與MOOC學習的人數(shù)規(guī)模龐大,全球各地的參與者都可以免費注冊使用MOOC,參與信息提供、評價過程[2]。MOOC的核心是教學設(shè)計的改變以及參與者的互動性。

2012年,MOOC在美取得空前成功,Coursera、edX、

Udacity三大課程提供商的興起,給更多學生提供了系統(tǒng)學習的可能[3]。國內(nèi)的知名大學如北京大學、清華大學、浙江大學等紛紛MOOC課程。MOOC的到來為高等教育帶來新的機遇,可以促進優(yōu)質(zhì)教育資源共享和教育公平[4]。

高等教育的傳統(tǒng)教學方式作為主流的教學模式[5-8]不會被替代,但MOOC將導致現(xiàn)有教學體系的全面革新,幾千年來低效率的課堂教學將在今后若干年內(nèi)有根本性的改變[9]。

在MOOC框架下如何利用一些新技術(shù)和新手段提高課程的教學質(zhì)量?數(shù)據(jù)結(jié)構(gòu)課程是計算機相關(guān)專業(yè)的核心專業(yè)課程,是一門實用性很強又抽象程度比較高的課程,課程內(nèi)容抽象、復雜,涉及很多概念和算法技術(shù),學習起來較困難。長期以來,傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)課程通過以教師為主體、學生被動學習的模式開展教學,使得學生的學習困難增加,學習興趣得不到激發(fā),教學效果并不理想。本文通過探討數(shù)據(jù)結(jié)構(gòu)課程的MOOC教學模式,希望通過MOOC提供給學生一種與傳統(tǒng)課堂教學和網(wǎng)絡(luò)公開課不同的學習渠道,激發(fā)學生的學習興趣,引導學生探索知識,更好地掌握數(shù)據(jù)結(jié)構(gòu)這門課程。

2 傳統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程教學存在的問題

通過長期的數(shù)據(jù)結(jié)構(gòu)一線崗位的實踐摸索和對學生學習情況的調(diào)查分析,總結(jié)數(shù)據(jù)結(jié)構(gòu)課程教學過程中主要存在的幾點問題。

學生學習難度大,學習興趣低 數(shù)據(jù)結(jié)構(gòu)課程主要是培養(yǎng)學生分析解決問題能力,但由于該課程抽象程度高,對學生的抽象思維和邏輯思維能力要求較高,學生學習起來難度較大。如果教學過程中運用生動形象的教學方法,讓學生自發(fā)參與學習,不僅教師能夠取得較好的教學效果,提高教學質(zhì)量,學生也不再是為了考試而死記硬背知識點,而是能真正把所學的知識點與實際應(yīng)用相結(jié)合

傳統(tǒng)教學模式不能滿足教學需求 一直以來,數(shù)據(jù)結(jié)構(gòu)課程的傳統(tǒng)教學模式都是把教師作為主體,用講授式的教學方法把相關(guān)知識點大量傳輸給學生。然而數(shù)據(jù)結(jié)構(gòu)課程涉及繁多的概念和算法,傳統(tǒng)的教學模式顯然已不能滿足這門邏輯思維能力要求很高的課程,否則教學目的、教學效果都會和預期相差甚大。另外,傳統(tǒng)的教學方式主要是運用黑板和PPT,但PPT很多時候只是代替黑板和粉筆,演示數(shù)據(jù)結(jié)構(gòu)的算法得到改進,直觀性更強,而學生對數(shù)據(jù)之間的繁雜關(guān)系還是很難想象。并且信息量更大后,難以一直吸引學生的注意力,互動及延續(xù)性不能得到很好的改進,教學效果也受到很大影響。

3 數(shù)據(jù)結(jié)構(gòu)課程MOOC教學模式設(shè)計

數(shù)據(jù)結(jié)構(gòu)課程MOOC制作流程 在進行MOOC課程規(guī)劃設(shè)計時,要充分了解MOOC教學模式的特點,以期能夠有針對性地對課題進行規(guī)劃。數(shù)據(jù)結(jié)構(gòu)課程的MOOC制作流程如圖1所示。

MOOC課程制作要想做得引人入勝,容易學習消化,需要專業(yè)技術(shù)團隊的配合,經(jīng)過專業(yè)技術(shù)團隊的錄制和后期制作,內(nèi)容質(zhì)量和視覺風格都會得到很好的提升,使得課程脫穎而出,取得理想的傳播影響力。

數(shù)據(jù)結(jié)構(gòu)課程的MOOC教學內(nèi)容必須合理碎片化 傳統(tǒng)教學是教師把學生召集到指定教室一起學習,這種強有力的組織性形成外在驅(qū)動力。在這個驅(qū)動力下,學生雖然學習動力低,也會從枯燥的教學內(nèi)容和呆板的教學方式中學到部分知識點。另外,傳統(tǒng)教學的教學對象是年齡相仿、教育基礎(chǔ)相仿的學生,教師的教學內(nèi)容容易組織準備。然而,MOOC的學習對象有不同學習目的,來自不同的地方,有著不同的年齡,教育基礎(chǔ)也不相同,因此,MOOC教學模式與傳統(tǒng)教學模式相比,挑戰(zhàn)性更大。開展MOOC教學模式要想增加吸引力,教師要在自己的課程內(nèi)容設(shè)計上下功夫,增強吸引力,推動學生向前走。

在數(shù)據(jù)結(jié)構(gòu)傳統(tǒng)50分鐘課堂上,一般教師會講授至少30分鐘抽象復雜的知識點。各種心理學研究顯示,人類的注意力最有效的集中時間段是6~10分鐘,超過這段時間就會下降,接受信息的能力也會隨之降低,因此,信息獲取的趨勢必須是碎片化,如此才能被人類更好地接收。MOOC課程教學設(shè)計的一個重要內(nèi)容就是把系統(tǒng)化的知識轉(zhuǎn)化為碎片化的信息。在數(shù)據(jù)結(jié)構(gòu)的MOOC教學設(shè)計中要把傳統(tǒng)課堂50分鐘教學內(nèi)容,切分為多個10分鐘的小視頻,把整個課程精確地切分轉(zhuǎn)化成多個獨立的小視頻講授。這樣不同學習目標的學生可以選擇需要的小視頻學習,每個學生還可以根據(jù)自己的業(yè)余時間隨時隨地學習,在注意力最集中的時間里學到相關(guān)知識點。

碎片的內(nèi)容要緊扣主題,切割碎片時,內(nèi)容不可以太長。比如堆排序,如果切割成一個視頻,必然要至少20分鐘,就要把內(nèi)容進一步碎化,但又要使切割后的內(nèi)容各成一主題。因此,如何使得內(nèi)容切割的碎片更合理,使得邏輯組織更清晰,需要在PPT制作部分就考慮這個問題。

數(shù)據(jù)結(jié)構(gòu)課程MOOC教學小視頻制作要有吸引力和實效 視線引導是吸引學生注意力的一種方式。在傳統(tǒng)課堂上,學生的視線跟隨教師多樣的肢體語言和教鞭等教學工具的指引發(fā)生變化,視線也會跟著講臺上教師位置的移動發(fā)生變化,增強了對學生的吸引力,讓學生的思路跟隨教師的節(jié)奏。在MOOC小視頻制作中,可以通過講授者的動作、動畫播放、PPT放映中文字或者圖片的層次進入以及視頻編輯軟件提供的高亮、筆畫等功能達到同樣的效果。至于講授者和課件是穿插出現(xiàn)的,出現(xiàn)的比例、頻率到底應(yīng)該多少為宜,并沒有具體的標準,關(guān)鍵是保持屏幕上要盡量變化,并且變而不亂、引人入勝。像靜止的畫面,或者充滿文字的畫面,在視頻中不能持續(xù)較長時間。

思路引導較視線引導更為重要。課件設(shè)計風格應(yīng)該是簡單的,對所有課件中動畫的設(shè)計,原則上是對思考過程的展示,所有無助于此的元素都不必出現(xiàn)。例如:在展示一個復雜算法的偽代碼時,并不是一次性將全部偽代碼放映出來,再逐行講解其功能――這是計算機執(zhí)行的過程,并不是人類思考的過程;應(yīng)從整體思路入手,先根據(jù)算法流程展示出代碼框架,再逐步演示框架內(nèi)各個模塊的細化過程,必要時輔以實例的動畫演示。

數(shù)據(jù)結(jié)構(gòu)課程MOOC教學模式的互動性 傳統(tǒng)課堂上教師習慣于通過提問、設(shè)問的方式進行互動,在MOOC教學過程中可以通過在視頻炔迦胩崳?、灾o悠導湎恫迦氬庋櫚姆絞澆行師生互動,有助于增強教學效果。

在MOOC視頻內(nèi)插入提問,等同于傳統(tǒng)課堂上教師提出一個簡單問題,用來吸引學生的注意力,避免學生的思維懈怠。在傳統(tǒng)課堂上,教師提出問題后,懈怠的學生可能不會思考,只是等其他學生的回答。但在MOOC教學過程中,看視頻的所有學生必須對插入的問題做出思考及回答,才能繼續(xù)觀看視頻。

在MOOC視頻之間插入測驗,是在一個小視頻播放結(jié)束后,插入前一段小視頻的相關(guān)測驗,學生給出回答結(jié)果,MOOC系統(tǒng)會自動判題,立即給出測驗結(jié)果。這樣學生盡快發(fā)現(xiàn)問題,掌握自己對知識點的理解程度,對于不明白的還可以再次觀看前一段視頻。然而傳統(tǒng)課堂測驗會對教學進度造成影響,而且教師課后批改測驗的工作量會增加,學生存在的問題也不能及時反饋。因此,在師生互動方面,MOOC比傳統(tǒng)課堂的互動效果要更好。

MOOC的互動性優(yōu)點,除了師生互動,還有生生互動。學生提交的作業(yè)是需要交流和分享的,并且還有學生的互評,這是MOOC的一個創(chuàng)新。通過互相之間的分享、觀摩,可以提高學生的學習積極性,端正學習態(tài)度,這是傳統(tǒng)的教學互動層次做不到的。

4 總結(jié)

數(shù)據(jù)結(jié)構(gòu)課程重在培養(yǎng)學生的實踐能力,在教學過程中希望通過教學手段如互動式學習等方式來激發(fā)學生的學習動力。在設(shè)計和實施數(shù)據(jù)結(jié)構(gòu)課程MOOC教學時,重點要考慮如何組織教學內(nèi)容,使得碎片化后的內(nèi)容組織更合理,以滿足不同對象的學習需求,以及如何制作更有吸引力的視頻、動畫或數(shù)字特效等,能突出算法的設(shè)計、清晰問題的求解思路以及不同方法之間的特點。

參考文獻

[1]王文禮.MOOC的發(fā)展及其對高等教育的影響[J].江蘇高教,2013(2):53-57.

[2]楊丹.MOOC(慕課)初探[J].教育教學論壇,2014(12):

105-106.

[3]張銘,奚春燕,彭遠紅.微課:唱響中國MOOC的前奏[J].計算機教育,2013(20):11-13.

[4]蘇小紅,趙玲玲,張彥航,等.MOOC浪潮下,我們該做些什么[J].計算機教育,2015(7):64-68.

[5]邢立峰,邢立群,張曉燕.翻轉(zhuǎn)課堂模式在計算機基礎(chǔ)課程中的應(yīng)用研究[J].計算機光盤軟件與應(yīng)用,2014(24):

231-232.

[6]劉華敏.“翻轉(zhuǎn)課堂”教學模式的探討:以《數(shù)據(jù)結(jié)構(gòu)》課程教學為例[J].廣東技術(shù)師范學院學報,2016(5):70-72.

[7]張小剛.CDIO理念下的“數(shù)據(jù)結(jié)構(gòu)”課程實踐教學改進探索[J].赤峰學院學報:自然科學版,2016(10)20-21.

篇10

【中圖分類號】G642 【文獻標識碼】A 【文章編號】2095-3089(2014)04-0147-01

1.引言

隨著計算機處理數(shù)據(jù)量的劇增,數(shù)據(jù)之間的關(guān)系也越來越復雜?!皵?shù)據(jù)結(jié)構(gòu)”的前期基礎(chǔ)課程有高等數(shù)學、離散數(shù)學和C語言程序設(shè)計等課程;同時又是專業(yè)課程操作系統(tǒng)、數(shù)據(jù)庫原理、圖像處理等課程的基礎(chǔ),具有承上啟下的作用。由于該門課程實驗性很強,內(nèi)容抽象不易理解,所以近年來圍繞如何上好該門課程,學校實施了一系列的課程改革,培養(yǎng)學生運用各種算法編寫程序的能力,并初步取得了不錯的效果。

實驗課程是理論課程的檢驗者和發(fā)揮者,通過實驗,學生不僅可以驗證一些理論知識的正確性,同時還可以通過靈活多樣性的實驗題目提高上機編程能力,進一步提高軟件設(shè)計能力、提高學習的積極性和能動性,并逐漸形成科學的思維方法和嚴謹?shù)目茖W態(tài)度。

2.“數(shù)據(jù)結(jié)構(gòu)”實驗教學的措施

數(shù)據(jù)結(jié)構(gòu)實驗課程的改革是以課堂教學為基礎(chǔ),以實驗課為中心,以學生為主體的模式,重在培養(yǎng)學生獨立自主、創(chuàng)新動手能力,因此實驗課之前的準備工作很重要。實驗課程改革實施過程主要有以下幾個方面構(gòu)成:

2.1 修訂實驗大綱和實驗指導書

進行實驗教學改革,首先對原來的實驗大綱和實驗指導書進行重新修訂,應(yīng)該遵循培養(yǎng)學生實際動手能力的的特點,體現(xiàn)以理論為基礎(chǔ),以實驗為檢驗手段的學科特色。通過實驗課程的教學,讓學生明白理論課程中的哪些內(nèi)容是基礎(chǔ)點,哪些內(nèi)容是難點和重點,并讓學生有針對性的進行實驗鍛煉。在2011年的數(shù)據(jù)結(jié)構(gòu)理論和實驗教學中,課題組成員老師按照理論教學大綱,幾次討論研究,從而形成了新的實驗大綱和實驗指導書。2011年新的實驗大綱和實驗指導書開始實施,效果比較良好。

2.2 合理設(shè)計實驗題目

對于實驗題目,按照內(nèi)容和難易程度共分為三個層次,即驗證型、綜合型和設(shè)計型題目。按照循序漸進的順序進行,最開始的幾個題目由于理論知識講授較少,讓學生做的是驗證型的題目;隨著所學知識的增加,開始讓學生解決綜合性的實驗題目,這部分題目需要學生融會貫通前后的知識點才可以完成;最后,在課程的收尾階段,為了檢驗學生掌握該門課程的情況,老師提出實驗?zāi)康暮鸵?,學生自行設(shè)計,完成實驗內(nèi)容。設(shè)計型的題目一般安排在課后進行,學生可以根據(jù)要求去圖書館查閱資料,不僅豐富了學生的第二課堂,而且大大培養(yǎng)了學生動手解決實際問題的能力。

實驗內(nèi)容上去掉了部分抽象性比較強的題目,增加了幾個競賽內(nèi)容題目。這部分內(nèi)容的增加不僅提高了學生的興趣,并為以后參加程序設(shè)計大賽打下了堅實的基礎(chǔ)。

2.3 內(nèi)容講解和上機實驗

實驗課一般先安排老師進行實驗理論知識的大致介紹和實驗內(nèi)容的詳細講解,時間大致掌握在二十分鐘左右,剩下時間是學生進行驗證和自行編程時間。在這個時間如果個別學生有疑問,實驗老師可以進行有針對性的講解,同時逐步引導學生排除錯誤。另一方面,學生在老師講解完畢后要對實驗內(nèi)容進行全面分析,對驗證型實驗內(nèi)容要在實驗完畢后鞏固所學理論知識;對于綜合型實驗內(nèi)容要聯(lián)系各個知識環(huán)節(jié),綜合解決復雜問題。

為了及時解答學生在做實驗中遇到的問題,教師可以不時在學生中巡回一下,以便幫助學生排憂解難,確保學生的問題可以及時有效的解決。另外,在實驗結(jié)束后必須要撰寫實驗報告,提交實驗結(jié)果。

2.4 內(nèi)容考核

為了驗證學生掌握實驗的情況,必須進行實驗課程考核。按照數(shù)據(jù)結(jié)構(gòu)大綱要求,平時成績、實驗成績和理論課程考試比例為1:4:5。同時針對實驗成績,又分為平時成績占30%,實驗考核成績占70%,這樣可以有效的避免學生最后單憑考試成績一錘定音的情況。

對完成的實驗內(nèi)容進行驗收時,盡量做到公平、公正??梢苑譃槎鄠€考核指標,分別進行實物驗收和答辯情況打分。老師根據(jù)每個同學的演示、匯報、提問回答情況給出一個綜合成績,再結(jié)合該同學平時的實驗課表現(xiàn)情況,給出一個綜合的實驗成績。

3.實施效果

數(shù)據(jù)結(jié)構(gòu)實驗課程改革,從修訂實驗大綱到制定合適的實驗題目,最后到考核環(huán)節(jié),每一階段都是以提高學生的學習興趣、加強學生的掌握力度和培養(yǎng)學生的實際能力為主要導向。實驗課程的改革在這實施的兩年中,根據(jù)觀察和實驗考核情況,有效提高了學生遇到問題、分析問題和解決問題的能力。

經(jīng)過實驗教學的改革和實踐,我們?nèi)〉昧嗣黠@效果,在2012年的廣西大學生程序設(shè)計競賽中,學院選派的代表對,分別取得了一、二、三等獎的好成績。實踐證明,通過實驗課程的改革,學生的編程能力有了明顯提高,為日后工作打下良好基礎(chǔ)。

4.結(jié)束語

從進行數(shù)據(jù)結(jié)構(gòu)課程改革以來,我們一直致力于這門課程的建設(shè),從修訂大綱、選用教材、師資隊伍、課程教學、實驗教學等各個環(huán)節(jié)進行了不斷的探索和實踐。在這2年多的實踐教學中,取得了比較滿意的教學效果。通過課程實踐,學生不僅深入理解了數(shù)據(jù)結(jié)構(gòu)的基本原理和基礎(chǔ)知識。同時,學生普遍感覺自己的動手能力得到提高,遇到問題、分析問題和解決問題的能力得到了鍛煉。

參考文獻:

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

[2]汪沁. 基于“數(shù)據(jù)結(jié)構(gòu)”實驗的探討和研究[J]. 中國教育信息化,2007.(1):17-19

[3]徐大華. 程序設(shè)計語言教學方法探討[J]. 高等理科教育,2007(1):36-38