公務(wù)員期刊網(wǎng) 精選范文 數(shù)據(jù)結(jié)構(gòu)與算法范文

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

前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的數(shù)據(jù)結(jié)構(gòu)與算法主題范文,僅供參考,歡迎閱讀并收藏。

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

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

關(guān)鍵詞 算法與數(shù)據(jù)結(jié)構(gòu) 理論教學(xué) 教學(xué)技巧

中圖分類號:G424 文獻(xiàn)標(biāo)識碼:A

Discussion on Algorithms and Data Structures Theory Teaching Skills

ZHOU Zhanglan

(College of Computer Science, Yangtze University, Jingzhou, Hubei 434023)

Abstract In the "Algorithms and Data Structures" course, theoretical teaching is very important. In order to obtain a limited teaching good teaching effect is not easy. This understanding of knowledge points respectively, classroom inspiration, knowledge and consolidation of four aspects of the introduction of certain teaching techniques introduced in order to achieve the full content of classroom teaching, active classroom atmosphere, enhance students' interest in learning.

Key words Algorithms and Data Structures; theory teaching; teaching skills

算法與數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)專業(yè)重要的核心課程之一。該門課程中涉及眾多復(fù)雜而抽象的概念、算法,多數(shù)學(xué)生表示學(xué)習(xí)起來感覺較為枯燥。對主講教師來說,如何讓學(xué)生在有限的理論課堂教學(xué)中掌握所有知識并靈活應(yīng)用是不容易的。當(dāng)然,現(xiàn)在有很多教學(xué)手段可以達(dá)到增強(qiáng)教學(xué)效果、吸引學(xué)生注意力的目的。比如,在教學(xué)過程中引入精美的PPT課件、動態(tài)教學(xué)演示系統(tǒng)等。但是,這些手段都只能起到輔助教學(xué)的作用。教師在充分利用這些教學(xué)工具時(shí),更應(yīng)該發(fā)揮操控者靈活處理問題并解決問題的能力,以達(dá)到更加完美的教學(xué)效果。本文就課堂教學(xué)中的幾點(diǎn)經(jīng)驗(yàn)進(jìn)行總結(jié),以供探討。

1 生動的語言,形象的比喻——知識點(diǎn)的理解

算法與數(shù)據(jù)結(jié)構(gòu)課程中的知識點(diǎn),尤其是每章涉及的重要概念和算法對于初學(xué)的學(xué)生而言不太容易接受。為了使學(xué)生能在課堂教學(xué)中盡快地理解和掌握這些知識,教師在教學(xué)中運(yùn)用生動的語言和形象的比喻往往能夠起到較好的作用。首先,關(guān)于上課的語言問題。作為一門專業(yè)課程,特別是計(jì)算機(jī)專業(yè)的核心課程,教師的授課過程總體來說應(yīng)該是嚴(yán)謹(jǐn)?shù)?。專業(yè)課教師是不可能把授課對象當(dāng)成小學(xué)生,然后用活潑的語氣配合可愛的動作來講解的。因此,這里提到的“生動的語言”包含兩方面的內(nèi)容。一方面指教師授課的語氣,不要讓整堂課總是一板一眼像作報(bào)告一樣,在重點(diǎn)需要強(qiáng)調(diào)的地方適當(dāng)加重語氣,或者停頓后再次強(qiáng)調(diào),抑揚(yáng)頓挫的語氣更能使學(xué)生提高注意力和關(guān)注度。另一方面是教師的肢體語言,在加強(qiáng)語氣的同時(shí)配合相應(yīng)的手勢等肢體動作。當(dāng)然,這方面與教師的個(gè)人授課風(fēng)格有很大關(guān)系。

其次,形象的比喻。本課程在學(xué)習(xí)中涉及的知識點(diǎn)較多,學(xué)生首先要在對概念的充分理解的基礎(chǔ)上,才能進(jìn)一步學(xué)會靈活應(yīng)用。為幫助學(xué)生更好地理解有關(guān)概念,可以引入生活中常見的問題做比喻。下面以在課堂上講解鏈?zhǔn)酱鎯Y(jié)構(gòu)與順序存儲結(jié)構(gòu)的區(qū)別為例,說明引入適當(dāng)?shù)谋扔饔兄趯W(xué)生對兩者的理解。由于鏈?zhǔn)浇Y(jié)構(gòu)不需要預(yù)先指定存儲空間的大小。因此,插入和刪除等操作都較為容易,特別是插入操作不存在擴(kuò)容問題。而順序結(jié)構(gòu)則需在初始化階段申請指定大小的存儲空間,只有在申請成功之后才能進(jìn)行其它操作。在進(jìn)行插入或刪除操作時(shí)都可能要移動其它元素的位置,而且當(dāng)進(jìn)行插入操作時(shí),若初始空間不足還會出現(xiàn)需要擴(kuò)容的問題。為了幫助學(xué)生理解這兩種存儲結(jié)構(gòu)的特點(diǎn),可以引入這樣的比喻:順序存儲就像上課之前需要申請教室,有多少個(gè)學(xué)生就需要有一個(gè)能容下所有學(xué)生的教室。當(dāng)然,在進(jìn)行具體配置時(shí)要求教室的空間只能大而不能小。比如,上課的實(shí)際學(xué)生人數(shù)為60人,分配的教室為100座,而且一個(gè)學(xué)生對應(yīng)一個(gè)固定的座位。當(dāng)加入的聽課人數(shù)超過100人時(shí)教室里的座位顯然就不夠用了,為了滿足需求需要更換一個(gè)更大的教室。函數(shù)realloc能將已分配內(nèi)存區(qū)的大小改為指定大小,①可以用來實(shí)現(xiàn)這一擴(kuò)容操作。鏈?zhǔn)浇Y(jié)構(gòu)則不然,在進(jìn)行具體配置時(shí)其空間就像是一個(gè)露天會場。進(jìn)入會場的每一個(gè)人都自帶一個(gè)小板凳,當(dāng)人走時(shí)小板凳也被同時(shí)帶走。只要不存在會場空間不夠(相當(dāng)于內(nèi)存分配單個(gè)結(jié)點(diǎn)空間失?。┑那闆r,容納的人數(shù)是沒有固定限制的?,F(xiàn)在再來分析一下兩種存儲結(jié)構(gòu)在操作上的不同。順序存儲的空間分配是固定的,就像教室里的固定座位。當(dāng)有一個(gè)同學(xué)需要插到某一個(gè)位置坐下時(shí),若此位置已坐人,其他同學(xué)則需要通過陸續(xù)移動為他騰空一個(gè)座位;而鏈?zhǔn)浇Y(jié)構(gòu)則不同,由于每個(gè)人都自帶小板凳,只要會場有空間就能容納新來的人。新來的人只需要把要插入的位置告訴排在其前面的人就可以了。當(dāng)然,不是所有的重要知識點(diǎn)都能找到合適的比喻,這需要教師在備課時(shí)多思考,并在教學(xué)中靈活運(yùn)用。

2 恰當(dāng)?shù)奶釂枴n堂啟發(fā)

在授課過程中,活躍的課堂氣氛需要教師和學(xué)生之間的良性互動,而提問是一個(gè)很好的實(shí)現(xiàn)互動的方法。但是以什么方式提問、怎樣提問還是有一定講究的。首先,關(guān)于提問的方式。對于大學(xué)課堂來說,點(diǎn)名回答或自愿回答都可能會出現(xiàn)學(xué)生不配合的情況,畢竟大學(xué)生和中、小學(xué)生是不同的。因此,教師需要預(yù)先做好自問自答的準(zhǔn)備。提出問題后,要留給學(xué)生一定的思考時(shí)間。若在這之后有學(xué)生能主動給出較好的解決方案,則應(yīng)給予及時(shí)的鼓勵(lì)和贊揚(yáng);反之,教師需要自己給出一個(gè)粗略的解決思路,將疑問留給學(xué)生并促使學(xué)生繼續(xù)思考。其次,關(guān)于提問的內(nèi)容。提問需要占用課堂教學(xué)時(shí)間,因此提出的問題應(yīng)當(dāng)是最重要、最具有啟發(fā)性的。比如,以單鏈表基本操作插入算法②為例:

Status ListInsert_L(LinkList &L,int i, ElemType e){

p=L; j=0;

while(p&&jnext;++j;}

if(!p||j>i-1) return ERROR;

s=(LinkList)malloc(sizeof(LNode));

s->data=e; s->next=p->next;

p->next=s;

return OK;

}

對于算法中“if(!p||j>i-1) return ERROR;”這條語句的作用很多同學(xué)在初學(xué)時(shí)并沒有真正了解,只是在具體實(shí)現(xiàn)時(shí)生搬硬套。為了引起學(xué)生的注意,教師可以在上課時(shí)現(xiàn)場運(yùn)行此算法,并在去掉此語句后輸入數(shù)據(jù)進(jìn)行驗(yàn)證。例如,給i賦一個(gè)不超出線性表長度的合法的值,這樣不影響輸出結(jié)果,提出這句是不是可有可無的問題,然后留下疑問讓學(xué)生去思考。當(dāng)然,在下次解答時(shí)要對這類問題進(jìn)行總結(jié),強(qiáng)調(diào)錯(cuò)誤處理在編程中的重要性。

3 有趣的例子——知識點(diǎn)的引入

在專業(yè)課程的教學(xué)中就其知識點(diǎn)來說是較為枯燥的,為了讓學(xué)生在剛開始學(xué)習(xí)新內(nèi)容時(shí)就能激發(fā)出學(xué)習(xí)的興趣,可以通過引入具體實(shí)例來達(dá)到目的。例如,以循環(huán)鏈表的使用為例。在講授什么是循環(huán)鏈表之前,先給出一個(gè)“約瑟夫問題”游戲的例子,通過這個(gè)游戲提出問題:若使用已經(jīng)學(xué)過的單鏈表是否合適。如果不合適,具體在什么地方不合適。然后引入循環(huán)鏈表的概念,并以此例子來說明循環(huán)鏈表的意義和具體的操作方法。另外一個(gè)比較典型的例子是用鐵路調(diào)度站表示“?!眴栴},這也是一個(gè)很好的利用生活中的實(shí)例來引入知識點(diǎn)從而引起學(xué)生興趣的例子。尤其是在對“?!钡南冗M(jìn)后出特性講解時(shí)具有很好的效果。當(dāng)然,例子的引入要恰如其分才能起到正面作用,過于簡單或不合適的引用反倒會引起學(xué)生的反感,甚至成為笑話。

4 編程演示——知識點(diǎn)的鞏固

在算法與數(shù)據(jù)結(jié)構(gòu)課程中涉及到了大量的經(jīng)典算法,比如最短路徑、關(guān)鍵路徑等。對于學(xué)生來說掌握其原理就可以知其應(yīng)用。但是,對有些需要靈活使用的知識點(diǎn)僅講解原理是不夠的。為了能讓學(xué)生深刻理解并熟練掌握,可以在課堂上編程逐步演示其實(shí)現(xiàn)過程。比如,“樹”這一章的內(nèi)容涉及的概念較多,它又是學(xué)生學(xué)到的第一種非線性結(jié)構(gòu),相比之前的線性表實(shí)現(xiàn)起來更復(fù)雜。因此,教師在初次講解時(shí)很有必要在課堂上將二叉樹的創(chuàng)建過程動態(tài)地演示給學(xué)生,這其中包括順序存儲和鏈?zhǔn)酱鎯Α.?dāng)然,演示過程最好不是已經(jīng)寫好的完整的程序或演示系統(tǒng)成品,而是采用邊講解邊書寫的方式,使學(xué)生更容易了解編程的過程。為了節(jié)省課堂時(shí)間,可以先寫好程序框架,比如程序包含的頭文件、所需結(jié)構(gòu)體類型、主函數(shù)、輸出函數(shù)等在講解過程中簡單帶過,而重要函數(shù)的核心代碼則邊講邊寫。這樣不僅可以增強(qiáng)學(xué)生的學(xué)習(xí)興趣,促使學(xué)生自己去編程實(shí)踐,更重要的是可以讓學(xué)生非常清楚地了解實(shí)現(xiàn)的過程。當(dāng)然,這很考驗(yàn)教師的編程能力,因?yàn)樵谡n堂上臨時(shí)寫很有可能因?yàn)橐粫r(shí)大意使得程序運(yùn)行出錯(cuò)而陷入尷尬的境地,從而影響課堂教學(xué)的完整性和完美性。但教學(xué)的目的不是讓教師去展示個(gè)人風(fēng)采,而是講授知識。從另一方面來講,學(xué)生也是寬容的。教師偶爾的一次失誤不僅不會影響其權(quán)威性,反而更能讓學(xué)生感受到親切而真實(shí)。

算法與數(shù)據(jù)結(jié)構(gòu)作為一門重要的專業(yè)課程,要想取得良好的教學(xué)效果還需要多方面的配合。當(dāng)然,作為主講人的任課教師對課程的教學(xué)起到了決定性的作用。除了依據(jù)授課對象的特點(diǎn)合理安排教學(xué)計(jì)劃、教學(xué)內(nèi)容外,把握好有限的理論課堂教學(xué),利用各種方法和手段將理論知識講解清楚,使得教學(xué)內(nèi)容生動、課堂氣氛活躍、學(xué)生學(xué)習(xí)興趣濃厚是很重要的。這不僅能幫助學(xué)生更好地掌握本門課程的理論知識,更能為學(xué)生在后續(xù)學(xué)習(xí)中進(jìn)行具體實(shí)踐打下良好的基礎(chǔ)。

注釋

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

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);算法;教學(xué)改革;實(shí)踐

中圖分類號:G424 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)32-7677-02

Abstract: Data Structure and Algorithm is the core course of computer specialty, and plays a decisive role in the employment of students. This paper analyzes the teaching situation of the course at present, and summarizes some urgent problems to be resolved. The reform measures response to the problems above are described and practiced. This paper has certain reference meaning to teaching of Data Structure and Algorithm and the associated computer courses.

Key words: data structure; algorithm; teaching reform; practice

“數(shù)據(jù)結(jié)構(gòu)和算法”課程涉及數(shù)據(jù)在計(jì)算機(jī)中的表示、組織與處理,以及相應(yīng)的算法設(shè)計(jì)和算法性能分析,為計(jì)算機(jī)軟件開發(fā)人員提供必要的專業(yè)基礎(chǔ)知識和技能訓(xùn)練,同時(shí)也是計(jì)算機(jī)應(yīng)用相關(guān)學(xué)科所必須掌握的課程。通過本課程的學(xué)習(xí),使學(xué)生熟練掌握計(jì)算機(jī)程序設(shè)計(jì)中常見的各種數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)及相應(yīng)的運(yùn)算,初步掌握算法的時(shí)間分析和空間分析的技術(shù),并能根據(jù)計(jì)算機(jī)加工的數(shù)據(jù)特性運(yùn)用數(shù)據(jù)結(jié)構(gòu)的知識和技巧設(shè)計(jì)出更好的算法和程序,培養(yǎng)了大家數(shù)據(jù)抽象能力、算法構(gòu)造性思維方法能力及邏輯思維能力,并進(jìn)一步培養(yǎng)基本的良好的程序設(shè)計(jì)能力。其中的知識與方法,無論對學(xué)生進(jìn)一步學(xué)習(xí)計(jì)算機(jī)領(lǐng)域的其他課程,還是對今后從事研究、應(yīng)用開發(fā)及技術(shù)管理工作都發(fā)揮著重要的作用。但本課程理論性強(qiáng),算法抽象,理解困難,不易掌握。該文針對高職的實(shí)際情況,對“數(shù)據(jù)結(jié)構(gòu)和算法”課程教學(xué)改革進(jìn)行了探索和實(shí)踐。

1 教學(xué)現(xiàn)狀分析

“數(shù)據(jù)結(jié)構(gòu)和算法”課程歷來被看作是計(jì)算機(jī)專業(yè)的教學(xué)難點(diǎn)。多年來,學(xué)生普遍感覺此課程學(xué)習(xí)困難、難以理解、不好掌握。主要有如下幾個(gè)原因:1) 學(xué)生文化基礎(chǔ)普遍偏差、參差不齊。學(xué)生入學(xué)成績分?jǐn)?shù)相對較低并且相差懸殊,對問題的分析能力、邏輯思維能力較弱,缺乏正確的學(xué)習(xí)方法。2) 自我管理和自我約束能力不強(qiáng)、缺乏學(xué)習(xí)的積極性和主動性。大學(xué)學(xué)習(xí)給予同學(xué)們的自學(xué)空間較大,管理方面也不如中學(xué)那樣嚴(yán)格,從而導(dǎo)致學(xué)生上課聽不懂、下課不愿學(xué)。3) 沒有端正的學(xué)習(xí)態(tài)度。高職學(xué)生受到高中時(shí)個(gè)別老師的誤導(dǎo),以為上大學(xué)玩玩也可以順利畢業(yè),找到工作。同時(shí)也受到大學(xué)期間個(gè)別老師的誤導(dǎo),以為期末劃劃重點(diǎn),最后突擊,背背題目就可以過關(guān)。課上上網(wǎng)、玩手機(jī)、打游戲等等,課下不投入精力。4) 學(xué)生的計(jì)算機(jī)科學(xué)理論有所欠缺,對理論化的教學(xué)方法感到吃力。高職計(jì)算機(jī)課程主要以實(shí)用為主,課上理論講授較少或幾乎沒有,學(xué)生對理論內(nèi)容有畏難情緒,難以接受。5) 學(xué)生的前導(dǎo)課程基礎(chǔ)不牢。學(xué)生普遍程序設(shè)計(jì)課程掌握的不好,沒有養(yǎng)成獨(dú)立的思維和良好的學(xué)習(xí)習(xí)慣,缺乏實(shí)際動手能力或動手能力不強(qiáng)。6) 實(shí)驗(yàn)內(nèi)容設(shè)置不合理。實(shí)驗(yàn)大部分是驗(yàn)證性的,學(xué)生不需要自己去考慮各種可能的解決方案并找到最合適的方法,上機(jī)編程變成了簡單的文字輸人。7) 教師現(xiàn)場指導(dǎo)顧此失彼。由于學(xué)生人數(shù)相對較多,程序代碼開發(fā)過程中學(xué)生問題各異,在課程有限的時(shí)間里輔導(dǎo)不能及時(shí)到位。8) 考核機(jī)制不完善,課程成績主要是根據(jù)學(xué)生上機(jī)的出勤和提交的實(shí)驗(yàn)報(bào)告情況,再與期末考試結(jié)合給出,平時(shí)激勵(lì)不到位,考核不合理。

2 教學(xué)改革與實(shí)踐

通過上面對目前教學(xué)中存在問題的分析,我們明確了傳統(tǒng)的課程教學(xué)已經(jīng)不適應(yīng)新形勢的要求,實(shí)踐動手能力欠缺,思維僵化和編程能力不強(qiáng)的學(xué)生,沒有就業(yè)競爭力。這就要求數(shù)據(jù)結(jié)構(gòu)和算法課程教師結(jié)合高職的實(shí)際情況,從數(shù)據(jù)結(jié)構(gòu)的教學(xué)特點(diǎn)出發(fā),明確教學(xué)目的,制訂合理教學(xué)方案,強(qiáng)化學(xué)生解決問題的思維能力和實(shí)際動手能力,提高學(xué)生的編程能力,真正提高教學(xué)效果,最終提升學(xué)生的就業(yè)競爭力。針對以上問題,該文給出了如下的教學(xué)對策:

1) 針對高職學(xué)生文化基礎(chǔ)普遍較差,學(xué)習(xí)習(xí)慣不好,自我管理和自我約束能力不強(qiáng),缺乏學(xué)習(xí)的主動性等特點(diǎn),我們在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)過程中引入了趣味教學(xué),并加強(qiáng)教師與學(xué)生間的溝通。趣味教學(xué)旨在改變傳統(tǒng)的教學(xué)方法和教學(xué)手段#活躍課堂氣氛,把枯燥、抽象的知識通過某種有趣的、學(xué)生易于接受的方式表現(xiàn)出來,從而達(dá)到提高學(xué)生學(xué)習(xí)效率和教學(xué)質(zhì)量的目的,它適合于任何形式的教學(xué)過程,特別適用于高職教育教學(xué)[1]。堆棧,是僅能在一端添加、刪除對象的數(shù)據(jù)結(jié)構(gòu),我們可以以自助餐廳里的彈簧托盤舉例,如圖1所示。先來分析托盤的原理,在彈簧托盤上新增托盤后,整疊托盤重量增加,導(dǎo)致下面的職稱彈簧被壓縮,而整疊托盤的高度仍保持在一個(gè)固定的位置。拿托盤正好與此相反。之后讓大家分析思考使用Java語言如何實(shí)現(xiàn)這樣一個(gè)彈簧托盤。由于這個(gè)例子貼近生活,學(xué)生往往會有想法,課堂氣氛活躍起來,能夠開動腦筋,動起手來編碼。實(shí)現(xiàn)了基本的彈簧托盤后,在引導(dǎo)學(xué)生一起實(shí)現(xiàn)一個(gè)自動彈簧托盤,讓它能夠給出目前的使用狀態(tài),比如有多少個(gè)托盤,托盤太多超過負(fù)荷或者沒有托盤了要自動提示警告信息,讓托盤變得只能起來,也就是實(shí)現(xiàn)我們講授的堆棧。通過這樣帶有趣味性和貼近生活的例子,來調(diào)動課堂的活躍氣氛,激發(fā)了學(xué)生的學(xué)習(xí)興趣,提高學(xué)生學(xué)習(xí)的積極性和主動性,學(xué)生能夠積極的預(yù)習(xí)、復(fù)習(xí)相關(guān)知識,逐漸養(yǎng)成良好的學(xué)習(xí)習(xí)慣。教學(xué)是一個(gè)雙向互動的過程,教師在教學(xué)的過程中要從學(xué)生的實(shí)際情況出發(fā),采用學(xué)生容易接受的教學(xué)方法講授教學(xué)內(nèi)容,才能形成良好的師生關(guān)系。教師課前備課準(zhǔn)備好“問題”,課上通過問題引導(dǎo)學(xué)生積極思考,踴躍發(fā)言,將傳統(tǒng)的“一言堂”編程“群英會”,激發(fā)學(xué)生學(xué)習(xí)的興趣,鼓勵(lì)學(xué)生之間的交流與溝通,營造融洽的課題氣氛。只有這樣學(xué)生對課程知識才更容易接受和掌握,才會取得良好的教學(xué)效果。

2) 針對學(xué)生沒有端正的學(xué)習(xí)態(tài)度和對理論題目有畏難情緒的問題,在課堂上直接引入往屆學(xué)生面試的試題或從《Java面試寶典》等書籍中挑選合適的例題來給學(xué)生講解或讓學(xué)生獨(dú)立完成,比如圖2中所示的題目。這個(gè)題目對高職學(xué)生有一定的難度,由于畏難情緒,大部分學(xué)生不愿意思考解答,對這種題目很是反感。但當(dāng)你和學(xué)生們講清是以后找工作的面試題時(shí),他們明顯產(chǎn)生興趣,注意力一下集中起來,再加上老師在黑板上上畫圖分步講解,能收到很好的教學(xué)效果。如果能將往屆學(xué)生請入課堂現(xiàn)身說法,再加上平時(shí)課堂上對相關(guān)公司對需求人才的知識結(jié)構(gòu)的宣傳講解,整個(gè)教學(xué)就能產(chǎn)生比較理想的效果。通過這樣找工作面試直接相關(guān)的例子,來吸引學(xué)生課堂的注意力,激發(fā)學(xué)習(xí)興趣,提高學(xué)生學(xué)習(xí)的積極性和主動性,讓學(xué)生自發(fā)的產(chǎn)生學(xué)習(xí)的動力。

[在一個(gè)單鏈表中,若刪除p所指結(jié)點(diǎn)的后續(xù)結(jié)點(diǎn),則執(zhí)行____。

3) 針對學(xué)生的前導(dǎo)課程基礎(chǔ)不牢問題,加強(qiáng)對Java語言課程內(nèi)容的復(fù)習(xí)和邏輯思維能力的訓(xùn)練。數(shù)據(jù)結(jié)構(gòu)與算法課程的學(xué)習(xí)是一個(gè)承前啟后的過程,如果沒有學(xué)好Java課程,本課程的學(xué)習(xí)效果必將大打折扣。數(shù)據(jù)結(jié)構(gòu)的算法中大量使用Java語言中的字符串、程序結(jié)構(gòu)知識和集合類等編程基礎(chǔ)知識,數(shù)據(jù)結(jié)構(gòu)課程學(xué)習(xí)過程中主要就是運(yùn)用這些知識點(diǎn)以及相關(guān)的邏輯思維能力來分析、解決問題。對于大部分剛學(xué)完Java語言的學(xué)生來說,在Java語言的運(yùn)用和邏輯思維能力還不強(qiáng)的情況下直接切入主題,他們就會感到茫然。為了解決這個(gè)問題,在開課之初,利用一、兩次課的時(shí)間來復(fù)習(xí)Java語言的相關(guān)知識,并引導(dǎo)學(xué)生訓(xùn)練課程中使用到的基本技巧和思維方式。這樣才能為數(shù)據(jù)結(jié)構(gòu)與算法課程的學(xué)習(xí)打下良好的基礎(chǔ)。

4) 針對課程的實(shí)驗(yàn)內(nèi)容設(shè)置問題,教學(xué)中要努力做到讓實(shí)驗(yàn)內(nèi)容盡量與工程實(shí)際緊密結(jié)合。數(shù)據(jù)結(jié)構(gòu)是一門緊密結(jié)合實(shí)踐,解決現(xiàn)實(shí)世界問題的課程,因此合理設(shè)汁實(shí)驗(yàn)對于學(xué)生解決實(shí)際問題的能力的提高有很大幫助[2]。教師在教學(xué)過程中一定要注重課程內(nèi)容的實(shí)用性,并強(qiáng)調(diào)數(shù)據(jù)結(jié)構(gòu)和相關(guān)算法的靈活應(yīng)用。本人在教學(xué)過程中棧結(jié)構(gòu)應(yīng)用選取了迷宮問題作為教學(xué)考核案例,隊(duì)列結(jié)構(gòu)應(yīng)用選取銀行排隊(duì)仿真系統(tǒng)作為考核案例,串處理應(yīng)用選取文本編輯器作為考核案例,圖結(jié)構(gòu)的實(shí)現(xiàn)和應(yīng)用選取旅游線路安排系統(tǒng)作為考核案例。通過貼近實(shí)際的案例,學(xué)生學(xué)到實(shí)用開發(fā)技能,并訓(xùn)練了將理論結(jié)合到實(shí)際項(xiàng)目開發(fā)中去的實(shí)用技能,才能取得較好效果。

5) 針對教師現(xiàn)場指導(dǎo)不到位的問題,我們采用分組教學(xué)模式。有學(xué)生組成4-6人為一組的學(xué)習(xí)小組,針對學(xué)生對所學(xué)內(nèi)容不同的掌握程度,對學(xué)生區(qū)別對待,選撥知識掌握較好并有一定組織能力的優(yōu)秀學(xué)生作為組長,讓組長輔導(dǎo)組員,讓優(yōu)秀學(xué)生在幫助

別人解決問題的同時(shí)提高自己的能力,讓他們帶領(lǐng)組員共同開發(fā),當(dāng)組長不能解決時(shí),再由老師解答。這樣往往由于進(jìn)取心和好勝心的趨勢,作為組長的同學(xué)更能認(rèn)真、踏實(shí)的學(xué)習(xí),進(jìn)步明顯。而對與學(xué)習(xí)稍差一些的學(xué)生適當(dāng)降低要求,并且讓組長及時(shí)指導(dǎo),增強(qiáng)他們學(xué)習(xí)的信心,他們也能迅速跟上。這樣就照顧到了全班學(xué)生的不同學(xué)習(xí)情況,能讓所有同學(xué)都能穩(wěn)步提高。

6) 針對課程考核不完善的問題,我們采用多樣化的考核方法。在數(shù)據(jù)結(jié)構(gòu)與算法課程教學(xué)過程中實(shí)用了全方位、多角度的考核方式。我們把職業(yè)素養(yǎng)、實(shí)際操作、技能比賽相結(jié)合,把學(xué)院期中、期末考核與認(rèn)證考試考核相結(jié)合,強(qiáng)調(diào)項(xiàng)目實(shí)踐能力??己藭r(shí)間由期中、期末這樣的點(diǎn)拉長為過程考核的線,過程性考核與結(jié)果性考核相結(jié)合??己酥黧w由個(gè)人變?yōu)閭€(gè)人與小組考核相結(jié)合,并且自評、互評與教師評價(jià)相結(jié)合。多樣化的考核讓學(xué)生更充分的利用了在校時(shí)間,促進(jìn)了學(xué)生的學(xué)習(xí)。

3 結(jié)束語

數(shù)據(jù)結(jié)構(gòu)這門課程不論對學(xué)生學(xué)習(xí)還是教師教學(xué)都有一定難度,優(yōu)秀的教學(xué)方法和高效的實(shí)施方案值得我們?nèi)パ芯?。教學(xué)改革不是目標(biāo),而是一個(gè)過程,需要在教學(xué)過程中通過不斷地探索、總結(jié),形成一個(gè)集教學(xué)內(nèi)容、教學(xué)方法、教學(xué)手段和考核方式等完整的教學(xué)體系,提高學(xué)生運(yùn)用數(shù)據(jù)結(jié)構(gòu)的知識分析問題、運(yùn)用相應(yīng)的算法動手編程解決問題的能力,努力提升課程的教學(xué)效果。該文分析了目前數(shù)據(jù)結(jié)構(gòu)與算法課程存在的問題并給出了教學(xué)改革的舉措并進(jìn)行了實(shí)踐,取得了一定的效果,下一步我們將本文的教學(xué)改革成果應(yīng)用于移動教學(xué)平臺上,期待能發(fā)揮更大的作用。

參考文獻(xiàn):

[1] 王劍, 鐘元生, 羅成, 等. 高職數(shù)據(jù)結(jié)構(gòu)課程趣味教學(xué)的實(shí)踐[J]. 職教論壇, 2010(17):31-32.

[2] 申華, 肖瑩瑩. 數(shù)椐結(jié)構(gòu)課程的實(shí)踐性教學(xué)模式[J]. 計(jì)算機(jī)教育, 20l2(4):103-105.

[3] 唐玉媛. 高職院校數(shù)據(jù)結(jié)構(gòu)課程教學(xué)研究[J]河北師范大學(xué)學(xué)報(bào):教育科學(xué)版, 2009,11(04):127-129.

[4] 蔡紅. 高職數(shù)據(jù)結(jié)構(gòu)課程教學(xué)改革探索[J]. 中國職業(yè)技術(shù)教育, 2011(14):87-89.

[5] 陳廣. 高職“數(shù)據(jù)結(jié)構(gòu)”課程教學(xué)改革研究[J]. 教育與職業(yè), 2011(27):35-36.

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

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu)與算法;項(xiàng)目導(dǎo)向;教學(xué);研究;實(shí)踐

學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法的過程就是訓(xùn)練算法的設(shè)計(jì)技巧和能力的過程,在建設(shè)性思維能力培養(yǎng)的過程中,注重培養(yǎng)學(xué)生的數(shù)據(jù)抽象、設(shè)計(jì)算法和開發(fā)軟件的能力。在學(xué)習(xí)了這門課程之后,讓學(xué)生獲得正確的讀、寫結(jié)構(gòu)以及使用軟件工程的理論、技能和能力,讓學(xué)生初步具備分析問題和解決問題的能力,具備的設(shè)計(jì)風(fēng)格趨于良好,給學(xué)生外來的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ),以便于學(xué)生在該領(lǐng)域可以繼續(xù)學(xué)習(xí)和研究。要想培養(yǎng)更多的計(jì)算機(jī)專業(yè)應(yīng)用型人才,就需要讓他們具有找到問題并具備從概念層、抽象層中剝離并對其進(jìn)行計(jì)算機(jī)系統(tǒng)的綜合設(shè)計(jì)的能力,為了讓這些問題得到解決,把項(xiàng)目導(dǎo)向的方法引入課堂教學(xué)與實(shí)踐中就顯得尤為重要。

一、數(shù)據(jù)結(jié)構(gòu)與算法課程的問題分析

1.課程難度大,學(xué)生難以適應(yīng)

數(shù)據(jù)結(jié)構(gòu)和算法課程不僅邏輯性較強(qiáng),同時(shí)其實(shí)踐性也很強(qiáng),在過去進(jìn)行教學(xué)的時(shí)候,由于該課程比較抽象,同時(shí)概念比較多而且算法也比較復(fù)雜,對教師來講該課程教學(xué)難度比較大,同時(shí)學(xué)生也對該課程產(chǎn)生了畏懼感,在學(xué)習(xí)的過程中沒有學(xué)以致用的體驗(yàn),讓學(xué)生對其的學(xué)習(xí)失去積極性,最終培養(yǎng)的學(xué)生在這方面實(shí)踐能力不高,動手能力較差,教學(xué)質(zhì)量的提高也無從談起,這和推進(jìn)素質(zhì)教育的今天嚴(yán)重不符。

2.課程理論與實(shí)踐脫節(jié)

本課程注重學(xué)生的理論和抽象思維的理解,目前要想讓學(xué)生不經(jīng)過實(shí)踐就對課程理論很好地理解是很不現(xiàn)實(shí)的。以前的授課模式多多少少都存在輕視實(shí)踐、重視理論的講解,教師感覺課程授課難度大,學(xué)生覺得似乎理解了所學(xué)的知識,但是在解決實(shí)際問題的時(shí)候又不會聯(lián)想使用所學(xué)的知識,一個(gè)很重要的原因是在理論教學(xué)的過程中,學(xué)生對抽象數(shù)據(jù)的概念沒有很好地了解,即使在課堂上聽懂了也不會內(nèi)化為自身的能力,也就意味著不能遷移到實(shí)際問題的解決過程中。隨著時(shí)間的推移,一些學(xué)生慢慢地失去了學(xué)習(xí)的興趣,對學(xué)生專業(yè)素質(zhì)、應(yīng)用能力和創(chuàng)新能力的提高是影響最大的因素。

3.學(xué)生在學(xué)習(xí)過程中處于被動地位

教師對知識進(jìn)行強(qiáng)行的灌輸,對學(xué)生進(jìn)行“填鴨式”的教學(xué)是傳統(tǒng)的教學(xué)模式,在這個(gè)模式中,學(xué)生學(xué)習(xí)的比較被動,對于現(xiàn)代大學(xué)生構(gòu)造知識體系來講是非常不利的。也就是說,學(xué)生不能在解決問題的時(shí)候?qū)W到知識,同時(shí)在遇到實(shí)際問題需要去解決的時(shí)候,感覺自己無能為力,對于自己所學(xué)到的知識不會遷移和應(yīng)用。隨著時(shí)間的推移,因?yàn)閷W(xué)生不能積極參與教學(xué)活動和及時(shí)對知識體系進(jìn)行建構(gòu),對學(xué)習(xí)效果產(chǎn)生了極大的影響。為了對這種教學(xué)模式進(jìn)行改變,讓學(xué)生在學(xué)習(xí)過程中真正地掌握到知識,讓自身的專業(yè)素質(zhì)進(jìn)一步提高,在教學(xué)實(shí)踐中我們不難看出,對數(shù)據(jù)結(jié)構(gòu)與算法課程使用項(xiàng)目導(dǎo)向的教學(xué)方式是比較好的。這不僅有利于學(xué)生知識體系的構(gòu)建,還有利于提升學(xué)生的實(shí)踐能力,讓知識來源于生活和應(yīng)用于生活,突出知識的實(shí)用性和有效性,增強(qiáng)學(xué)生學(xué)習(xí)的動力和積極性。

二、基于項(xiàng)目導(dǎo)向的數(shù)據(jù)結(jié)構(gòu)與算法課程的教學(xué)改革

1.課程內(nèi)容的設(shè)計(jì)

(1)理論與實(shí)踐相結(jié)合,讓課程的應(yīng)用性進(jìn)一步提升

在設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)與算法課程內(nèi)容的時(shí)候,應(yīng)把知識的接受融入完成任務(wù)的過程中。比如,在“學(xué)生信息管理系統(tǒng)”的設(shè)計(jì)時(shí),必須有搜索、排序和學(xué)生名字有關(guān)的統(tǒng)計(jì)等操作。把知識點(diǎn)等引入這些具體的操作之中,這樣可以讓具體的操作代替原本抽象的理論,這樣可以給學(xué)生一種比較真實(shí)的感覺,不僅有助于對知識點(diǎn)的理解,而且還把困難的知識變得通俗易懂。在主數(shù)據(jù)存儲操作的同時(shí),與此相關(guān)和有聯(lián)系的算法或應(yīng)用,讓學(xué)生嘗試著去學(xué)習(xí)和掌握,這樣漸漸地一個(gè)有效的知識體系就會被建立起來。

(2)教學(xué)內(nèi)容的組織以職業(yè)能力目標(biāo)為依據(jù)

課程剛開始的時(shí)候,首先教師要對該課程進(jìn)行概述,在講解基本概念的時(shí)候要引入案例,如數(shù)據(jù)、記錄、邏輯結(jié)構(gòu)和物理結(jié)構(gòu)等,這樣學(xué)生就會了解到數(shù)據(jù)結(jié)構(gòu)與算法課程和專業(yè)的關(guān)系以及對該課程的研究內(nèi)涵和輪廓有一個(gè)基本的了解,為項(xiàng)目教學(xué)打下良好的基礎(chǔ)。然后以實(shí)際的任務(wù)為教學(xué)的主線,按照行動導(dǎo)向,“教學(xué)、學(xué)習(xí)和實(shí)踐”一體化教學(xué)模式,完成八個(gè)學(xué)習(xí)的情境,這樣專業(yè)的技能和方法學(xué)生就會掌握。與此同時(shí),也要兼顧學(xué)生的可持續(xù)發(fā)展,他們不僅學(xué)習(xí)崗位上的數(shù)據(jù)結(jié)構(gòu)類型,也要讓他們能夠在全局上掌握工作。教師對課本的知識進(jìn)行總結(jié)后傳授給學(xué)生,提高學(xué)生項(xiàng)目開發(fā)的能力。

2.教學(xué)模式和教學(xué)方法設(shè)計(jì)

(1)課程以項(xiàng)目為驅(qū)動、知識點(diǎn)為串行,開展“教學(xué)、學(xué)習(xí)、實(shí)踐”一體化的教學(xué)模式

根據(jù)學(xué)生的實(shí)際情況進(jìn)行知識的建構(gòu),同時(shí)將其引入工作的過程中,在學(xué)習(xí)過程中解決問題,在解決問題的過程中對知識進(jìn)行鞏固。

(2)以項(xiàng)目驅(qū)動、工作任務(wù)步驟為主線,組織實(shí)施教學(xué)

不管是選擇課程內(nèi)容,還是組織教學(xué)能容,都要以實(shí)際項(xiàng)目工作的內(nèi)容為中心,把實(shí)際工作的流程為教學(xué)內(nèi)容和教學(xué)順序,把數(shù)據(jù)結(jié)構(gòu)和方法進(jìn)行重組后,融化在實(shí)際工作中。這樣不僅可以讓學(xué)生對學(xué)習(xí)的知識進(jìn)行應(yīng)用,也讓他們更清晰地了解項(xiàng)目開發(fā)工作的整體框架。實(shí)訓(xùn)的課程來自于學(xué)生的日常生活,學(xué)生要完成的項(xiàng)目任務(wù),需用戶的需求、數(shù)據(jù)流分析、數(shù)據(jù)存儲的表示到算法、功能的實(shí)現(xiàn)和提交各階段實(shí)用的計(jì)算機(jī)專業(yè)組產(chǎn)品的實(shí)際情況和公共職位的實(shí)際情況完全相同。因此,在對任務(wù)完成的過程中,學(xué)生就可以對相關(guān)的知識、方法、技巧進(jìn)行掌握,讓計(jì)算機(jī)類專業(yè)群公共工作崗位能力的需求清楚地顯示。

(3)參與企業(yè)生產(chǎn),企業(yè)專家在生產(chǎn)中參與指導(dǎo)

數(shù)據(jù)結(jié)構(gòu)與算法課程對軟件開發(fā)行業(yè)來講是一門基礎(chǔ)課,也是必修課。在開發(fā)軟件的過程中,如果沒有把數(shù)據(jù)結(jié)構(gòu)所謂知識進(jìn)行貫穿,那么這個(gè)項(xiàng)目就缺少指引,也就意味著它是一個(gè)失敗的項(xiàng)目。所以,學(xué)生參與到實(shí)習(xí)基地中的生產(chǎn)中的時(shí)候,其必要條件就是對數(shù)據(jù)結(jié)構(gòu)與算法進(jìn)行學(xué)習(xí)和使用,在教學(xué)的過程中要具有雙向的選擇。進(jìn)入企業(yè)的都是優(yōu)秀的學(xué)生,在企業(yè)中從事具體的工作,實(shí)現(xiàn)“課堂與企業(yè)”的完美結(jié)合,同時(shí)還要把工作過程與學(xué)習(xí)過程緊密地聯(lián)系在一起,這樣教學(xué)效果就會大幅度提升。

以項(xiàng)目為導(dǎo)向的數(shù)據(jù)結(jié)構(gòu)與算法課程,要求在教學(xué)的過程中,圍繞學(xué)生這個(gè)中心,對學(xué)生的技術(shù)和個(gè)人專業(yè)素質(zhì)進(jìn)行全方位的培養(yǎng),同時(shí)兼顧人際等多個(gè)方面的培養(yǎng),我們的目標(biāo)就在本科層次培養(yǎng)出終身學(xué)習(xí)型的高質(zhì)量計(jì)算機(jī)應(yīng)用和開發(fā)人才,并最終讓每一個(gè)學(xué)生能夠勝任他們未來的工作。同時(shí),作為授課教師,我們要了解學(xué)生的實(shí)際需求,新一代的大學(xué)生在性格、認(rèn)識等上都發(fā)生了很大的變化,我們要對其進(jìn)行深入的研究和探索,按照他們的認(rèn)知方式進(jìn)行課程的教學(xué),同時(shí)也要兼顧他們的認(rèn)知水平,相信經(jīng)過這樣循序漸進(jìn)的課程學(xué)習(xí),一定會給社會培養(yǎng)更多的、需要的人才,讓社會對計(jì)算機(jī)方面的人才需求得到滿足。

參考文獻(xiàn):

[1]劉曉靜,王曉英,薛媛媛,等.讓趣味教學(xué)進(jìn)駐數(shù)據(jù)結(jié)構(gòu)與算法課堂[J].青海大學(xué)學(xué)報(bào),2011,29(05):95-97.

[2]熊岳山,錢程東,徐凱.數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中的數(shù)據(jù)抽象能力培養(yǎng)體會[J].計(jì)算機(jī)工程與科學(xué),2014,36(04):27-30.

[3]李和平,龔波林,劉萬毅.深化實(shí)驗(yàn)教學(xué)改革,強(qiáng)化技能型人才培養(yǎng)[J].實(shí)驗(yàn)技術(shù)與管理,2013,30(02):159-161.

[4]王曉英,靳力,王曉青,等.基于序列匹配的作業(yè)相似度檢測系統(tǒng)[J].計(jì)算機(jī)工程,2012,38(24):53-61.

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

關(guān)鍵詞: “數(shù)據(jù)結(jié)構(gòu)與算法分析” 課程群 分層實(shí)踐 分段管控 

課程群是對教學(xué)計(jì)劃中有相互影響、互動、有序、相互間可構(gòu)成完整的教學(xué)內(nèi)容體系的相關(guān)幾門課程組成一個(gè)課程間相互連接、相互配合、相互照應(yīng)的課程群體[1]。2014年提出建設(shè)程序開發(fā)類課程群,包括C語言程序設(shè)計(jì)、C++程序設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)與算法分析、JAVA程序設(shè)計(jì)、web程序設(shè)計(jì)、組件開發(fā)技術(shù)、軟件設(shè)計(jì)模式七門課程。其中“數(shù)據(jù)結(jié)構(gòu)與算法分析”課程在整個(gè)課程群具有承上啟下、舉足輕重的地位,決定程序開發(fā)類課程群的成效。 

一、“數(shù)據(jù)結(jié)構(gòu)與算法分析”課程的現(xiàn)狀 

1.課程理論性強(qiáng),難度大。 

調(diào)研發(fā)現(xiàn):非計(jì)算機(jī)專業(yè)近80%的學(xué)生都感覺課程難,即使計(jì)算機(jī)專業(yè)的有近50%的學(xué)生,感覺該課程難學(xué),這種畏懼思想影響學(xué)習(xí)興趣。 

2.先導(dǎo)課程掌握不扎實(shí),課程推進(jìn)困難。 

教學(xué)計(jì)劃中C++程序設(shè)計(jì)、實(shí)踐和該課程分別安排在第2和第3個(gè)學(xué)期。暑假將兩門課割裂了,造成是否介紹先導(dǎo)課的困境。 

3.學(xué)生動手水平參差不齊,單一的實(shí)踐安排難以滿足不同的需求。 

目前,課程的實(shí)踐安排對所有的學(xué)生相同,對于動手強(qiáng)的學(xué)生可能在寢室就完成題目,而對編程能力不強(qiáng)的學(xué)生可能根本不知該如何下手,久而久之學(xué)生就失去開發(fā)熱情。 

4.課程管控不足,課程考核不能反映學(xué)生的真實(shí)水平。 

目前課程的評定以卷面成績?yōu)橹?,?shí)踐證明有些學(xué)生根本不會寫代碼但他卻能拿到很高的分?jǐn)?shù)。 

二、教學(xué)改革措施 

1.課程群中相關(guān)課程開課時(shí)間的精細(xì)化安排。 

(1)開課時(shí)間安排。 

C++程序設(shè)計(jì)包括64上課課時(shí)和16實(shí)踐課時(shí),將C++課程實(shí)踐調(diào)整到第3學(xué)期第1周上,而數(shù)據(jù)結(jié)構(gòu)與算法分析課程從第2周以后開始上,這樣就將兩門課緊密地銜接起來。這種一門課程一分為二的方法促進(jìn)了C++課程,同時(shí)也保證“數(shù)據(jù)結(jié)構(gòu)與算法分析”課程的順利進(jìn)行。 

(2)教學(xué)內(nèi)容及學(xué)時(shí)分配。 

為呼應(yīng)課程群中的后續(xù)課程,該課程內(nèi)容是貫穿程序設(shè)計(jì)、軟件設(shè)計(jì)模式的思想和觀點(diǎn)。該課程采用面向?qū)ο蠛统橄髷?shù)據(jù)類型觀點(diǎn)介紹數(shù)據(jù)結(jié)構(gòu),集中體現(xiàn)分解、抽象和信息隱蔽的基本原則,抽象數(shù)據(jù)類型是中樞,展示信息結(jié)構(gòu)轉(zhuǎn)換的三個(gè)重要階段:數(shù)學(xué)模型、抽象數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)與算法。其理論教學(xué)環(huán)節(jié)的安排為:數(shù)據(jù)結(jié)構(gòu)的基本概念(2),表、棧和隊(duì)列(6),樹(8),散列(4),優(yōu)先隊(duì)列(7),排序(12),不相交集(4),圖論算法(7),算法設(shè)計(jì)技巧(4),攤還分析(4),高級數(shù)據(jù)結(jié)構(gòu)(6);課內(nèi)實(shí)踐的安排:棧和隊(duì)列(2),表達(dá)式樹(2),散列、優(yōu)先隊(duì)列(2),排序(2),不相交集(2),深度優(yōu)先搜索應(yīng)用(2),貪心、分治算法(2),AA樹、treap數(shù)(2)。 

2.課堂教學(xué)模式改革 

(1)注重啟發(fā)式教學(xué),建立自主學(xué)習(xí)、合作學(xué)習(xí)相結(jié)合的教學(xué)模式。 

為強(qiáng)調(diào)思維訓(xùn)練,采用講、做穿插的授課方式,教師采用示例案例授課時(shí)學(xué)生采用自主學(xué)習(xí)模式,是教-做-答疑的互動、有反饋方式。它強(qiáng)調(diào)教中實(shí)踐、實(shí)踐中思考、交流中提升;自主學(xué)習(xí)完后各小組通過“以強(qiáng)帶弱、以老帶新”的方式合作完成綜合實(shí)踐作業(yè)。 

具體講解時(shí),(1)首先引入案例,然后給出C++實(shí)現(xiàn)的方法,最后詳細(xì)展開相應(yīng)數(shù)據(jù)結(jié)構(gòu)及操作實(shí)現(xiàn);(2)一題多解、一題多語,如對同一問題采用不同的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)方法,對比講解,多語言實(shí)現(xiàn)為拓展作業(yè);(3)難點(diǎn)分散,如將棧與非遞歸處理技術(shù)分別在棧、二叉樹非遞歸算法、快速排序與歸并排序的非遞歸算法等多處講解;(4)圖示講解和動畫展示相結(jié)合。 

(2)標(biāo)準(zhǔn)化教學(xué)與微課程教學(xué)模式相結(jié)合。 

為了確保課程的可持續(xù)發(fā)展,課程采用項(xiàng)目組集體備課、集體討論、分頭準(zhǔn)備的方式。課程組骨干教師經(jīng)過多次討論后修訂了課程教學(xué)大綱,形成了標(biāo)準(zhǔn)教案、PPT及算法演示視頻。為充分利用學(xué)生的課余時(shí)間,采用課程微課程化,微課視頻一般10分鐘左右[2],選擇與生活比較貼近的數(shù)據(jù)結(jié)構(gòu)(比如棧、隊(duì)列等)和基礎(chǔ)實(shí)踐內(nèi)容微課化。 

3.項(xiàng)目驅(qū)動的分層實(shí)踐教學(xué)模式研究。 

教育心理學(xué)家發(fā)現(xiàn):學(xué)習(xí)是累積性的,較復(fù)雜、較高級的學(xué)習(xí)是建立在基礎(chǔ)性的學(xué)習(xí)基礎(chǔ)之上的[3]。因此,課程的實(shí)踐教學(xué)以貫穿課程群的項(xiàng)目進(jìn)行驅(qū)動,提出“注重基礎(chǔ)、綜合應(yīng)用、提高創(chuàng)新”的三層次實(shí)驗(yàn)教學(xué)模式,以基礎(chǔ)、設(shè)計(jì)、綜合三個(gè)方面的實(shí)踐能力培養(yǎng)為中心,全方位地培養(yǎng)學(xué)生的動手能力和創(chuàng)新能力。 

基礎(chǔ)類實(shí)踐通常是對教材上所涉及的數(shù)據(jù)結(jié)構(gòu)及相關(guān)操作進(jìn)行上機(jī)驗(yàn)證,要求學(xué)生掌握相關(guān)數(shù)據(jù)結(jié)構(gòu),提高學(xué)生的軟件設(shè)計(jì)規(guī)范化能力。這類實(shí)踐通常在介紹完相關(guān)知識后以課程作業(yè)的方式發(fā)放,要求學(xué)生在規(guī)定時(shí)間內(nèi)完成,教師以晚自習(xí)的形式進(jìn)行個(gè)別指導(dǎo);設(shè)計(jì)類實(shí)踐要求學(xué)生對給定的題目進(jìn)行數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)及算法實(shí)現(xiàn),題目是從貫穿課程群中的項(xiàng)目案例中切割出來的。實(shí)踐中我們鼓勵(lì)學(xué)生一題多解,并分析不同解的時(shí)、空代價(jià)。這類實(shí)驗(yàn)通常是課程內(nèi)實(shí)驗(yàn)題目,要求每個(gè)學(xué)生獨(dú)自完成,教師全程指導(dǎo)、重點(diǎn)考核;綜合類實(shí)踐是對C++實(shí)踐課程中學(xué)生已完成題目的重新設(shè)計(jì),以小組為完成單位,人員分組原則上是C++實(shí)踐的人員分組。該類實(shí)踐培養(yǎng)學(xué)生分析、設(shè)計(jì)實(shí)際項(xiàng)目的能力和創(chuàng)新能力。教師對有強(qiáng)烈要求的學(xué)生通過答疑的方式進(jìn)行指導(dǎo)。各小組完成后需要進(jìn)行結(jié)題答辯,答辯中教師會對完成情況進(jìn)行評價(jià),從而引出后續(xù)課程。 

4.課程考核與過程控制。 

我們采用分段控制的多元化實(shí)踐考核方式:期末機(jī)考30%+基礎(chǔ)實(shí)踐20%(程序代碼+報(bào)告+隨機(jī)面試)+設(shè)計(jì)實(shí)踐40%(課前準(zhǔn)備材料+完成代碼+報(bào)告)+綜合實(shí)踐10%(報(bào)告+答辯)??己朔绞綇?qiáng)調(diào)對課程的過程監(jiān)控,基礎(chǔ)實(shí)踐的每一次完成情況能夠給教師提供重點(diǎn)監(jiān)控的學(xué)生名單,通過晚自習(xí)的重點(diǎn)指導(dǎo)確保學(xué)生弄懂相關(guān)知識點(diǎn)、順利進(jìn)行實(shí)踐課任務(wù),為保證設(shè)計(jì)實(shí)踐課的完成質(zhì)量,要求學(xué)生在課前精心準(zhǔn)備并提交準(zhǔn)備材料。綜合實(shí)踐強(qiáng)調(diào)以強(qiáng)帶弱,最后通過總結(jié)引出下一門課程,從而保持學(xué)生長久的學(xué)習(xí)動力。 

三、結(jié)語 

數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)是程序開發(fā)類課程群中最重要的一門課程,其成敗直接決定整個(gè)課程群的成敗。在不影響其他課程下的課程群開課時(shí)間微調(diào)保證課程的順利進(jìn)行;創(chuàng)新的教學(xué)課堂模式激發(fā)學(xué)生自主式、探索式學(xué)習(xí);項(xiàng)目驅(qū)動的實(shí)踐模式將課程群中的課程更緊密地結(jié)合起來;分層的實(shí)踐教學(xué)滿足不同層次學(xué)生的需求;教學(xué)過程的管控進(jìn)一步確保教學(xué)的順利推進(jìn)。該課程改革對課程群中其他課程改革有積極的作用。 

參考文獻(xiàn): 

[1]馬賽,李方能,吳正國,卜樂平.《信號與系統(tǒng)》課程群的建設(shè)與教學(xué)改革探索[J].高等教育研究學(xué)報(bào),2010.3. 

[2]梁樂明,曹俏俏,張寶輝.微課程設(shè)計(jì)模式研究—基于國內(nèi)外微課程的對比分析[J].開放教育研究,2013,19(1). 

[3]哈斯.《數(shù)據(jù)結(jié)構(gòu)》課程中使用逐步演示法進(jìn)行算法教學(xué)的實(shí)驗(yàn)研究[D].呼和浩特:內(nèi)蒙古師范大學(xué),2007. 

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

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);物理結(jié)構(gòu);算法

中圖分類號:TP3-4 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9599 (2011) 23-0000-01

Learning Methods of "Data Structure"

Guo Mingjie,Cheng Xiugui,Zheng Jialin

(Heilongjiang Mechanical and Electrical Engineering School,Suihua 152300,China)

Abstract:"Data Structure" in computer science is a very important comprehensive basic course,the content-rich,wide-ranging,but there it is difficult to apply theoretical knowledge to practical difficulties,a lot of people completing the data structure,the very loss,therefore,we need to explore,what is the data structure,data structure and how to learn.

Keywords:Data structure;Physical structure;Algorithm

《數(shù)據(jù)結(jié)構(gòu)》作為一門獨(dú)立的課程最早是1968年在美國的一些大學(xué)開設(shè)的;自1978年美籍華裔學(xué)者冀中田在國內(nèi)首開這門課程以來,經(jīng)過20余年的發(fā)展,在我國這門課程已經(jīng)成為各大學(xué)計(jì)算機(jī)專業(yè)的本科主干課程,也成為非計(jì)算機(jī)類學(xué)生和研究生學(xué)習(xí)計(jì)算機(jī)的必修課程。

數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)科學(xué)界至今沒有標(biāo)準(zhǔn)的定義。每個(gè)人根據(jù)各自的理解的不同而有不同的表述方法:

Sartaj Sahni在他的《數(shù)據(jù)結(jié)構(gòu)、算法與應(yīng)用》一書中將將數(shù)據(jù)對象(data object)定義為“一個(gè)數(shù)據(jù)對象是實(shí)例或值的集合”。而Clifford A.Shaffer在《數(shù)據(jù)結(jié)構(gòu)與算法分析》一書中將數(shù)據(jù)結(jié)構(gòu)定義為:“數(shù)據(jù)結(jié)構(gòu)是ADT的物理實(shí)現(xiàn)?!?/p>

大多數(shù)學(xué)者認(rèn)為數(shù)據(jù)結(jié)構(gòu)具體指同一類數(shù)據(jù)元素中,各元素之間的相互關(guān)系,包括三個(gè)組成成分,數(shù)據(jù)的邏輯結(jié)構(gòu),數(shù)據(jù)的存儲結(jié)構(gòu)和數(shù)據(jù)運(yùn)算結(jié)構(gòu)。

眾所周知,計(jì)算機(jī)的程序是對信息進(jìn)行加工處理。在大多數(shù)情況下,這些信息并不是沒有組織,信息之間往往具有重要的結(jié)構(gòu)關(guān)系,這就是數(shù)據(jù)結(jié)構(gòu)的內(nèi)容。數(shù)據(jù)的結(jié)構(gòu),直接影響算法的選擇和效率。數(shù)學(xué)算法與數(shù)據(jù)的結(jié)構(gòu)密切相關(guān),算法無不依附于具體的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)直接關(guān)系到算法的選擇和效率。也就是說,數(shù)據(jù)結(jié)構(gòu)還需要給出每種結(jié)構(gòu)類型所定義的各種運(yùn)算的算法。

因此,要想更好地運(yùn)用計(jì)算機(jī)來解決實(shí)際問題,僅掌握幾種計(jì)算機(jī)程序設(shè)計(jì)語言是難以應(yīng)付當(dāng)前眾多的復(fù)雜的課題。要想有效的使用計(jì)算機(jī),充分發(fā)揮計(jì)算機(jī)的性能,就必須學(xué)好和掌握好數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識。所以,打好“數(shù)據(jù)結(jié)構(gòu)”的扎實(shí)基礎(chǔ),對于學(xué)習(xí)計(jì)算機(jī)其他專業(yè)知識,如操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)、人工智能、等都是十分有益的。

雖然數(shù)據(jù)結(jié)構(gòu)這門課程對于計(jì)算機(jī)專業(yè)的學(xué)者來說極其重要,但普遍反映這門課程難學(xué),不易理解。但我們只要掌握以下幾點(diǎn),就一定會學(xué)好數(shù)據(jù)結(jié)構(gòu)。

一、邏輯結(jié)構(gòu)是基礎(chǔ)

將要處理的數(shù)據(jù)及其關(guān)系抽象成用圖形和文字描述的數(shù)學(xué)模型,這就是邏輯結(jié)構(gòu)。數(shù)據(jù)的邏輯結(jié)構(gòu)主要是描述數(shù)據(jù)之間的邏輯關(guān)系,而不只是數(shù)據(jù)本身。之所以稱為邏輯結(jié)構(gòu),是因?yàn)樗匀皇仟?dú)立于計(jì)算機(jī)而客觀存在的。在邏輯結(jié)構(gòu)中,我們主要學(xué)習(xí)每種結(jié)構(gòu)的整體特征和結(jié)構(gòu)內(nèi)部的各數(shù)據(jù)元素之間的邏輯關(guān)系。首先是最簡單的直接邏輯關(guān)系,主要有兩種:有序相鄰和無序相鄰。其次是間接的關(guān)系,樹結(jié)構(gòu)中的祖先和子孫的關(guān)系,圖中的連通子圖等等。越是復(fù)雜的邏輯結(jié)構(gòu),其關(guān)系種類越多,既有簡單的直接關(guān)系,也有復(fù)雜的間接關(guān)系。在對邏輯結(jié)構(gòu)有了全面清晰的認(rèn)識之后,就應(yīng)該考慮這些算法的邏輯實(shí)現(xiàn)過程。

二、存儲結(jié)構(gòu)是關(guān)鍵

存儲結(jié)構(gòu)即物理結(jié)構(gòu),是邏輯結(jié)構(gòu)在計(jì)算機(jī)中實(shí)實(shí)在在的表示,包括數(shù)據(jù)的表示和數(shù)據(jù)之間所有邏輯關(guān)系的表示。在對邏輯結(jié)構(gòu)的特點(diǎn)和各種邏輯關(guān)系都十分熟悉以后,進(jìn)一步就是要學(xué)習(xí)邏輯結(jié)構(gòu)所對應(yīng)的物理存儲結(jié)構(gòu)。一般來說,每一種邏輯結(jié)構(gòu)所對應(yīng)的存儲結(jié)構(gòu)都有兩大類:順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu),這是因?yàn)樵谟?jì)算機(jī)存儲器中可以用內(nèi)存單元的相鄰關(guān)系和地址間的指向關(guān)系來表示邏輯結(jié)構(gòu)中的序關(guān)系對于順序存儲結(jié)構(gòu),主要是用物理上相鄰的存儲單元來存儲邏輯上相鄰的數(shù)據(jù)元素;而鏈?zhǔn)酱鎯φ孟喾?,邏輯上相鄰的?shù)據(jù)元素在內(nèi)存中不一定相鄰,但邏輯上相鄰的元素之間有地址映象關(guān)系。一個(gè)數(shù)據(jù)元素有相鄰關(guān)系的元素越多,其鏈?zhǔn)浇Y(jié)構(gòu)就越復(fù)雜,鏈中的結(jié)點(diǎn)的指針域也越多。

三、算法實(shí)現(xiàn)是目標(biāo)

我們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的目的是掌握這些常用結(jié)構(gòu)的特征,以便在這些結(jié)構(gòu)上實(shí)現(xiàn)各種基本操作,即算法。所謂算法,是指解決問題的辦法,是用計(jì)算機(jī)語言來描述計(jì)算機(jī)的解題過程。怎樣學(xué)習(xí)算法呢?這是程序設(shè)計(jì)領(lǐng)域一個(gè)包含很廣的問題,在這里我們只討論常見數(shù)據(jù)結(jié)構(gòu)上的算法。

歸根到底,要想掌是在于對結(jié)構(gòu)特征的理解,包括邏輯結(jié)構(gòu)和物理結(jié)構(gòu)。邏輯結(jié)構(gòu)是基礎(chǔ),物理結(jié)構(gòu)是關(guān)鍵,在某種意義講,是數(shù)據(jù)結(jié)例如棧是一種運(yùn)算受限的線性表,它的邏輯結(jié)構(gòu)特性是先進(jìn)后出,所以它的插入和刪除運(yùn)算就和一般意義上的線性表不同,只能在端點(diǎn)處操作,稱為入棧和出棧操作。在《數(shù)據(jù)結(jié)構(gòu)》教材中提到的算法,主要有兩大類:一類是建立在特定的某種數(shù)據(jù)結(jié)構(gòu)之上的;另一類是可用于多種結(jié)構(gòu)的在實(shí)際應(yīng)用中大量使用的算法。不管是哪種算法,我們都要學(xué)會其算法思想,并能初步進(jìn)行最壞情形下的時(shí)間復(fù)雜度分析,對于簡單的算法,還要求能求出其平均時(shí)間復(fù)雜度握數(shù)據(jù)結(jié)構(gòu)上算法的實(shí)現(xiàn).

以上闡述了沿著數(shù)據(jù)及其關(guān)系的不斷抽象過程來學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)及其算法的方法。由于數(shù)據(jù)結(jié)構(gòu)專業(yè)性很強(qiáng),除了對知識基本概念的掌握和理解之外,還需要培養(yǎng)一定的抽象思維能力和程序設(shè)計(jì)能力,并且理論聯(lián)系實(shí)踐,多運(yùn)行程序,將算法用于實(shí)際,這樣才能真正學(xué)好數(shù)據(jù)結(jié)構(gòu)。

參考文獻(xiàn):

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

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

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);算法;程序設(shè)計(jì)語言;程序設(shè)計(jì)方法;教材

一、前言

1946年2月14日,世界上第一臺電子數(shù)字計(jì)算機(jī)ENIAC在美國賓夕法尼亞大學(xué)誕生。早期計(jì)算機(jī)主要用于數(shù)值計(jì)算,處理的對象是“無結(jié)構(gòu)”的數(shù)據(jù)(例如整數(shù)和浮點(diǎn)數(shù)),它們和處理這些數(shù)據(jù)的程序(根據(jù)計(jì)算機(jī)指令系統(tǒng)編寫的代碼)都采用二進(jìn)制表示形式存儲在計(jì)算機(jī)的存儲器中。20世紀(jì)50年代開始的“程序設(shè)計(jì)語言”研究,改變了原始的使用機(jī)器語言編程的方式,語言的“使用手冊”給計(jì)算機(jī)的使用者提供了一個(gè)非常高級的“虛擬機(jī)”,使得程序員可以方便快捷地描述需要的數(shù)據(jù)和處理數(shù)據(jù)的程序;然后通過語言的“編譯器”把它們成功地轉(zhuǎn)換為計(jì)算機(jī)內(nèi)部的二進(jìn)制代碼。高級語言的研究成果,打破了計(jì)算機(jī)只能進(jìn)行科學(xué)計(jì)算的限制?!罢Z言編譯系統(tǒng)”通過計(jì)算機(jī)成功地完成從高級語言的模型到計(jì)算機(jī)硬件語言模型的轉(zhuǎn)換,打開了計(jì)算機(jī)系統(tǒng)軟件研究的大門;同時(shí)也提出許多相對比較復(fù)雜的結(jié)構(gòu)化數(shù)據(jù)的需求(例如棧、散列表和二叉樹等),促進(jìn)了數(shù)據(jù)結(jié)構(gòu)的研究和發(fā)展。

“數(shù)據(jù)結(jié)構(gòu)”的概念最早是由C. A. R. Hoare和N. Wirth在1966年提出。大量關(guān)于程序設(shè)計(jì)理論的研究表明:為了系統(tǒng)而科學(xué)地構(gòu)造大型復(fù)雜的程序,必須對這些程序中所包含的數(shù)據(jù)結(jié)構(gòu)進(jìn)行深入的研究。

1968年,美國教授D.E.Knuth在他的名著《計(jì)算機(jī)程序設(shè)計(jì)技巧》(第1卷 基本算法 第二章信息結(jié)構(gòu))中首次系統(tǒng)地研究并整理了當(dāng)時(shí)經(jīng)常使用的主要數(shù)據(jù)結(jié)構(gòu)與相關(guān)的算法,為數(shù)據(jù)結(jié)構(gòu)課程的開設(shè)提供了豐富的素材(他本人也因此書的成就,在1974年獲得計(jì)算機(jī)界最高科學(xué)成就獎(jiǎng)“圖靈獎(jiǎng)”)。

自20世紀(jì)70年代起,“數(shù)據(jù)結(jié)構(gòu)”在西方國家的大學(xué)中,被普遍列為計(jì)算機(jī)本科的必修課程。

二、不同時(shí)期的教材

1978年著者已有10年從事系統(tǒng)軟件開發(fā)的豐富經(jīng)驗(yàn),參加了北京大學(xué)計(jì)算機(jī)系的籌備和創(chuàng)建。在擔(dān)任數(shù)據(jù)庫教研組組長期間,按系主任張士龍教授的安排,負(fù)責(zé)“數(shù)據(jù)結(jié)構(gòu)”等新課的建設(shè)。從此圍繞數(shù)據(jù)結(jié)構(gòu)開展的工作,包括學(xué)習(xí)與研究、講課與編寫教材等,三十多年一直沒有停息。其中花費(fèi)時(shí)間和精力最多的是根據(jù)教學(xué)和科研的需要編寫了下面4本教材(以8種不同版本出版)。

1.第一本教材:《數(shù)據(jù)結(jié)構(gòu)》

1979年教育部在南京大學(xué)召開了第一次全國計(jì)算機(jī)系教學(xué)大綱研討會,著者帶著起草的“數(shù)據(jù)結(jié)構(gòu)教學(xué)大綱”和“數(shù)據(jù)庫教學(xué)大綱”與系主任一起參加了會議。會上充分肯定了我們的工作,并建議我們分工負(fù)責(zé)編寫數(shù)據(jù)結(jié)構(gòu)教材。根據(jù)這個(gè)大綱的修改稿,著者組織教研組內(nèi)的老師共同編寫了第一本《數(shù)據(jù)結(jié)構(gòu)》講義。1980年起,這本講義在校內(nèi)外(包括南京大學(xué)、中山大學(xué)等國內(nèi)著名高校)廣泛試用,三易其稿。1987年由高等教育出版社正式出版(此書1992年獲國家教委頒發(fā)的全國優(yōu)秀教材獎(jiǎng))。

2.第二本教材:《數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)》

1985年,“北京市自學(xué)考試委員會”開設(shè)計(jì)算機(jī)專業(yè)。作為數(shù)據(jù)結(jié)構(gòu)課程的考試委員,著者邀請楊冬青和邵維忠兩位老師共同編寫了這本自學(xué)考試教材。1991年由北京大學(xué)出版社出版,第二年臺灣儒林出版公司用繁體字出版。

3.第三本教材:《數(shù)據(jù)結(jié)構(gòu)——C++與面向?qū)ο蟮耐緩健?/p>

20世紀(jì)90年代,面向?qū)ο蟮恼Z言和方法開始流行。

根據(jù)教學(xué)和科研的需要,著者與裘宗燕老師合作編寫了該教材。1998年作為國家“九五”重點(diǎn)教材由高等教育出版社出版,2001年出修訂版。

4.第四本教材:《算法與數(shù)據(jù)結(jié)構(gòu)》

1998年,著者由北京大學(xué)校長聘任,主持全校理科主干基礎(chǔ)課“算法與數(shù)據(jù)結(jié)構(gòu)”,考慮到不同專業(yè)的需要,組織理科教師共同編寫了一本適合理科各專業(yè)通用的新教材。該書列為“面向21世紀(jì)教材”,2002年由高等教育出版社出版,獲評“北京市高等教育精品教材”;2006年出第二版,列為“十一五”國家級規(guī)劃教材,獲評教育部“普通高等教育精品教材”;2012年再次修改并附著者教學(xué)光盤,出第三版。

回顧三十多年來圍繞數(shù)據(jù)結(jié)構(gòu)教學(xué)方面的工作,深深體會到與時(shí)俱進(jìn)、精益求精地編寫教材是提高教學(xué)水平的基礎(chǔ)和關(guān)鍵。

三、數(shù)據(jù)結(jié)構(gòu)教材需要與時(shí)俱進(jìn)

計(jì)算機(jī)科學(xué)是一門高速發(fā)展的新興科學(xué),它的研究內(nèi)容和研究方法都在不斷發(fā)展?!敖Y(jié)構(gòu)”可以解釋為:(1)把某些成分(成員、元素、原子等)按一定的規(guī)律或方式組織在一起的實(shí)體;或(2)把某些成分組織在一起的方式。 “數(shù)據(jù)結(jié)構(gòu)”從字面上可以理解為就是以數(shù)據(jù)為成員的結(jié)構(gòu)。在早期關(guān)于數(shù)據(jù)結(jié)構(gòu)的論文中,一個(gè)數(shù)據(jù)結(jié)構(gòu)多數(shù)情況下是指一個(gè)“實(shí)體”,而不是指“方式”。用通俗的程序語言的術(shù)語來講,一個(gè)數(shù)據(jù)結(jié)構(gòu)就可以看成一個(gè)結(jié)構(gòu)化的數(shù)據(jù)。然而,計(jì)算機(jī)科學(xué)研究數(shù)據(jù)結(jié)構(gòu)的目的是為了在計(jì)算機(jī)中有效地表示和處理客觀世界的各種不同對象。所以我們關(guān)心的是這些數(shù)據(jù)結(jié)構(gòu)如何存儲在計(jì)算機(jī)中,并且能有效地完成各種需要的操作。隨著計(jì)算機(jī)科學(xué)的發(fā)展,對于數(shù)據(jù)結(jié)構(gòu)的教學(xué)與研究也逐步從“實(shí)體”,提高到“方式”,直到“抽象數(shù)據(jù)類型的實(shí)現(xiàn)”。

1.教材應(yīng)該正確反映計(jì)算機(jī)科學(xué)的發(fā)展水平

前面提到的第一本教材,基本反映了20世紀(jì)70年代的認(rèn)識水平。當(dāng)時(shí)數(shù)據(jù)結(jié)構(gòu)的許多概念還十分模糊,即使像“?!焙汀瓣?duì)列”這些最基本的結(jié)構(gòu),它們的操作定義都不完全統(tǒng)一。許多教材對于什么是“數(shù)據(jù)結(jié)構(gòu)”都沒有解釋。我們考察了20世紀(jì)70年代有影響的幾本著作。其中H. A. Maurer用一個(gè)二元組B=〈K,R〉來形式地定義一個(gè)數(shù)據(jù)結(jié)構(gòu)B,其中K是結(jié)點(diǎn)有限集合,而R是K上的關(guān)系的有限集合。C. C. Gotlieb和L. R. Gotlieb則將數(shù)據(jù)結(jié)構(gòu)的定義擴(kuò)充成一個(gè)五元組:〈V,O,G,M,S〉。其中V是所討論的結(jié)構(gòu)中成員取值的集合,O是結(jié)構(gòu)中成員可執(zhí)行的運(yùn)算的集合,G是兩個(gè)構(gòu)成名字的文法,M是結(jié)構(gòu)中各成員存放位置的集合,S是L(G) M的映射。

根據(jù)數(shù)據(jù)結(jié)構(gòu)研究的目的和應(yīng)用的需要,我們認(rèn)為提到一種數(shù)據(jù)結(jié)構(gòu)離不開以下三個(gè)方面:(1)構(gòu)成數(shù)據(jù)結(jié)構(gòu)的成員之間固有的邏輯關(guān)系;(2)將數(shù)據(jù)存儲在計(jì)算機(jī)中的表示方法;(3)在計(jì)算機(jī)中對數(shù)據(jù)結(jié)構(gòu)進(jìn)行的運(yùn)算或處理。將這三方面分別簡稱為數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)和運(yùn)算,所以在第一本教材中我們明確采用這三者的統(tǒng)一(三位一體)來非形式地定義“數(shù)據(jù)結(jié)構(gòu)”的概念。

第二本《數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)》以上一本教材內(nèi)容為基礎(chǔ),根據(jù)N. Wirth教授提出的“算法+數(shù)據(jù)結(jié)構(gòu)=程序”關(guān)系,把程序理解為在數(shù)據(jù)的某些特定的結(jié)構(gòu)和表示的基礎(chǔ)上對于算法的描述。算法與數(shù)據(jù)結(jié)構(gòu)是程序設(shè)計(jì)中相輔相成、不可分割的兩個(gè)方面。為了適合于自學(xué)考試大綱的要求,參考了A. V. Aho教授20世紀(jì)80年代的教材,采用以數(shù)據(jù)結(jié)構(gòu)為主線、算法為輔線的結(jié)構(gòu)編寫,使得內(nèi)容更加緊湊、重點(diǎn)更加突出。

第三本教材《數(shù)據(jù)結(jié)構(gòu)——C++與面向?qū)ο蟮耐緩健肥窃诿嫦驅(qū)ο蟮恼Z言和方法開始流行的20世紀(jì)90年代,采用面向?qū)ο蟮脑O(shè)計(jì)方法講解數(shù)據(jù)結(jié)構(gòu)的內(nèi)容。參考Budd的工作,由簡到繁、從易到難,系統(tǒng)地引入各種抽象數(shù)據(jù)類型的概念和實(shí)現(xiàn),并在全書最后,用類圖方式總結(jié)了各種經(jīng)典的抽象數(shù)據(jù)類型在教材中的相互關(guān)系。

最后一本《算法與數(shù)據(jù)結(jié)構(gòu)》參考了Kurt Mehlhorn等人的觀點(diǎn),把“數(shù)據(jù)結(jié)構(gòu)”定義為“抽象數(shù)據(jù)類型的物理實(shí)現(xiàn)”。提出“物理實(shí)現(xiàn)”的意圖是強(qiáng)調(diào)本課程關(guān)心的“實(shí)現(xiàn)”應(yīng)具體到可以用計(jì)算機(jī)的兩個(gè)最重要的物理量(主機(jī)的運(yùn)行時(shí)間和內(nèi)存的存儲空間)來權(quán)衡。這一觀點(diǎn)突出了抽象數(shù)據(jù)類型在數(shù)據(jù)結(jié)構(gòu)教學(xué)中的地位,包含了數(shù)據(jù)結(jié)構(gòu)與面向?qū)ο蠹夹g(shù)的內(nèi)在聯(lián)系。使讀者可以從更高的層次理解數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系,也容易解釋數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)與運(yùn)算的三者關(guān)系。

后兩本教材都反映了20世紀(jì)90年代的理解水平。其共同之處是:都強(qiáng)調(diào)了數(shù)據(jù)結(jié)構(gòu)是“抽象數(shù)據(jù)類型的實(shí)現(xiàn)”,前一本使用的是面向?qū)ο蟮膶?shí)現(xiàn)方法,而后一本為了突出講解實(shí)現(xiàn)的物理效率,沒有采用面向?qū)ο蟮姆椒ā?/p>

2.教材內(nèi)容既要相對穩(wěn)定又要逐步更新

需要指出的是,盡管計(jì)算機(jī)科學(xué)的發(fā)展使得數(shù)據(jù)結(jié)構(gòu)的地位和作用產(chǎn)生了許多變化,但是數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)的目的并沒有大的改變。所以教材的內(nèi)容是基本穩(wěn)定的。

第一本教材按“邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)、運(yùn)算和應(yīng)用”四個(gè)層次的結(jié)構(gòu)組建架構(gòu)。全書共18章,除第一章概論外分為四大部分:第一部分是線性結(jié)構(gòu),包括順序表、鏈表與動態(tài)存儲管理、串、內(nèi)排序和線性表的檢索等五章;第二部分是樹形結(jié)構(gòu),包括樹形結(jié)構(gòu)的概念、樹形結(jié)構(gòu)的存儲、二叉樹周游算法、樹目錄和樹形結(jié)構(gòu)的其他應(yīng)用等五章;第三部分是復(fù)雜結(jié)構(gòu),包括圖和多維數(shù)組與廣義表兩章;第四部分是文件結(jié)構(gòu),包括順序文件、散列文件、索引順序文件、倒排文件和外排序等五章。全書概念清楚、內(nèi)容豐富、體系完整。

第二本作為自學(xué)考試教材,內(nèi)容在第一本的基礎(chǔ)上加以精簡,并增加集合與字典結(jié)構(gòu),把檢索歸入集合的基本運(yùn)算。在結(jié)構(gòu)上更加強(qiáng)調(diào)基礎(chǔ)、突出重點(diǎn)、適合自學(xué)。全書共分8章。第一章通過分析一個(gè)實(shí)際問題的求解過程,引入抽象數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)和算法等重要概念作為全書的引論;第二章到第五章分別討論了表、樹、集合和圖等常見的各種數(shù)據(jù)結(jié)構(gòu),一般均以抽象數(shù)據(jù)類型引路,重點(diǎn)討論抽象數(shù)據(jù)類型在計(jì)算機(jī)中各種不同的實(shí)現(xiàn)方法;第六章對鏈接表示所需要的動態(tài)存儲管理問題作了系統(tǒng)的闡述;第七章綜述了外存上數(shù)據(jù)結(jié)構(gòu)的各種組織方式;第八章給出內(nèi)排序和外排序的各種算法。

第三本由于采用了面向?qū)ο蟮姆椒?,在?nèi)容上做了較大調(diào)整。增加了面向?qū)ο蟮姆椒ㄈ腴T和優(yōu)先隊(duì)列。全書共分12章:第一章,緒論;第二章,C++與面向?qū)ο蟪醪?;第三章,字符串,本章定義了一種更安全可靠的字符串類型,同時(shí)也以字符串做例子,討論數(shù)據(jù)抽象和封裝的有關(guān)問題;第四章,向量,本章建立了一種安全可靠的向量數(shù)據(jù)類型,還給出了幾個(gè)主要的向量排序算法;第五章,動態(tài)數(shù)據(jù)結(jié)構(gòu)——鏈表,主要討論了各種常用的鏈表結(jié)構(gòu)及其實(shí)現(xiàn)方法;第六章,棧和隊(duì)列,介紹了棧和隊(duì)列的抽象概念、具體實(shí)現(xiàn)及其應(yīng)用;第七章,樹和二叉樹,介紹了樹和二叉樹的概念,重點(diǎn)介紹二叉樹的實(shí)現(xiàn)及樹結(jié)構(gòu)用于快速檢索的一些技術(shù);第八章,優(yōu)先隊(duì)列,主要介紹了堆和斜堆的概念以及通過它們實(shí)現(xiàn)優(yōu)先隊(duì)列的方法;第九章,集合和字典;第十章,散列表;第十一章,圖;第十二章,文件。在附錄中用類圖方式給出本書介紹的主要抽象數(shù)據(jù)類型及其相互關(guān)系圖。

第四本書作為北京大學(xué)主干課“算法與數(shù)據(jù)結(jié)構(gòu)”的通用教材。全書共分以下10章。第一章緒論;第二章線性表;第三章字符串;第四章棧與隊(duì)列;第五章二叉樹與樹;第六章集合與字典;第七章高級字典結(jié)構(gòu);第八章排序,第九章圖;第十章算法分析與設(shè)計(jì),主要給讀者概括地介紹算法的分析和設(shè)計(jì)的主要技術(shù)。本書在編寫中注意到知識模塊的獨(dú)立性和相關(guān)性,不同專業(yè)的學(xué)生可以根據(jù)不同的需要進(jìn)行組合使用。

在我們后編寫的兩本教材中,都大幅度減少了存儲管理和文件系統(tǒng)的內(nèi)容,其主要原因是它們應(yīng)該分別屬于“操作系統(tǒng)”和“數(shù)據(jù)庫”的教學(xué)范圍。“文件系統(tǒng)”又稱“物理數(shù)據(jù)庫”,主要講解數(shù)據(jù)庫的物理實(shí)現(xiàn)。在我們新編的教材中,只給出了與“字典類型”緊密相關(guān)的“索引文件”及“散列文件”介紹,也沒有給出實(shí)現(xiàn)代碼。

3.算法描述語言要配合教學(xué)的需要

數(shù)據(jù)結(jié)構(gòu)的教學(xué)內(nèi)容原本獨(dú)立于任何一種特定的程序設(shè)計(jì)語言,但是這門課程的教與學(xué)又離不開程序設(shè)計(jì)語言的支持。在這里語言是一種教學(xué)的工具。工具的選擇應(yīng)該有利于表達(dá)數(shù)據(jù)結(jié)構(gòu)的基本思想與算法的設(shè)計(jì)方法,有利于算法的分析與設(shè)計(jì),并且簡單明了,便于老師講學(xué)和學(xué)生理解。前面講的四本教材,因?yàn)樵诓煌臅r(shí)期創(chuàng)作,根據(jù)不同的學(xué)術(shù)觀點(diǎn),針對不同的讀者,所以也選擇了不同的算法描述語言。

在編寫第一本教材時(shí),由于國內(nèi)當(dāng)時(shí)主要流行的程序設(shè)計(jì)語言是Basic、Fortran和Algol60,它們不合適于描述數(shù)據(jù)結(jié)構(gòu)中的許多算法,為此我們在書的附錄中給出“關(guān)于書寫算法的若干規(guī)定”,除了過程語言允許的基本的控制語句外,還為描述鏈表操作和存儲管理引進(jìn)了一些專用過程,以便于描述動態(tài)的存儲分配和內(nèi)存空間的管理功能。

第二本教材根據(jù)“算法+數(shù)據(jù)結(jié)構(gòu)=程序”的觀點(diǎn)編寫,當(dāng)時(shí)N. Wirth教授提出的Pascal語言已經(jīng)在國內(nèi)流行。它的指針可以方便地描述鏈表的操作,但是在描述存儲管理時(shí)顯得不夠靈活。所以該書對其進(jìn)行了簡單的擴(kuò)充并加入漢字的注釋,稱為偽Pascal語言。

第三本教材采用面向?qū)ο蟮脑O(shè)計(jì)方法講解數(shù)據(jù)結(jié)構(gòu)的內(nèi)容。所以首選當(dāng)前國內(nèi)最流行的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言C++來描述。學(xué)生在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的同時(shí),又加深了對于面向?qū)ο蠓椒ǖ睦斫?,提高了使用C++語言編程的能力。

使用了良好的面向?qū)ο蟮腃++描述,程序表面的可讀性很好,但內(nèi)涵十分豐富,例如各種構(gòu)造函數(shù)和析構(gòu)函數(shù)的自動選擇和運(yùn)行,各種繼承和多態(tài)功能的動態(tài)處理等,所以要具體分析一個(gè)獨(dú)立算法的時(shí)間和空間的代價(jià)往往比較困難。而這些內(nèi)容恰恰是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的一個(gè)重要目標(biāo),也是許多專業(yè)學(xué)生學(xué)習(xí)計(jì)算機(jī)的主要因素。加上教學(xué)計(jì)劃安排的課程順序、學(xué)時(shí)要求等因素,所以我們在編寫第四本教材時(shí)選擇了C語言描述。

C語言雖然是一個(gè)小語言,但具有豐富的表達(dá)能力,這使它簡單、易學(xué),又能滿足基本的教學(xué)需求。另外,C語言是一個(gè)過程語言,用它描述的算法語義清晰、確定可行。特別重要的是,C比較低級,使用C描述的算法,其時(shí)間和空間代價(jià)分析最直觀、準(zhǔn)確。

四、精品教材應(yīng)該精益求精

如前所述,我們希望所編的教材與時(shí)俱進(jìn),跟上計(jì)算機(jī)科學(xué)的發(fā)展步伐,使得每本教材獨(dú)具特色、體系完整、結(jié)構(gòu)合理。與此同時(shí),著者對教材的每個(gè)重要環(huán)節(jié),包括概念的定義、思想的陳述、難點(diǎn)的分解、算法的設(shè)計(jì)與分析方法以及教學(xué)的方法甚至?xí)媾虐娴母袷降龋冀?jīng)過認(rèn)真的考慮和細(xì)心的安排。下面舉幾個(gè)簡單的例子,從中可見一斑。

1.概念準(zhǔn)確,語言流暢

對于基礎(chǔ)課的教材,概念準(zhǔn)確是十分重要的。然而由于計(jì)算機(jī)科學(xué)十分年輕,發(fā)展又快,使得許多概念在文獻(xiàn)中沒有統(tǒng)一的定義。例如“文件”和“記錄”這兩個(gè)概念在外存的討論和內(nèi)排序中都使用,但是意義不同;另外關(guān)于二叉樹的“高度”和“深度”的定義,不同的數(shù)據(jù)結(jié)構(gòu)教材可能不同;關(guān)于“滿二叉樹”的定義,不同教材的差別可能很大,等等。

為了盡可能給出所有概念的準(zhǔn)確定義,我們花費(fèi)了大量時(shí)間,反復(fù)查閱了多種不同的文獻(xiàn),包括數(shù)據(jù)結(jié)構(gòu)和離散數(shù)學(xué)的各種教材,經(jīng)過認(rèn)真分析、比較,給出我們的理解,在教材最后整理了所有名詞的索引。并且在第一次出現(xiàn)的位置注釋出可能不同的定義。

語言流暢是提高教材可讀性的基礎(chǔ)。我們的幾本教材多數(shù)都是從校內(nèi)試用講義開始,反復(fù)修改,出版后也再版甚至三版,對于局部小修改有的就利用加印的機(jī)會進(jìn)行。其中修改最多的是語言文字,包括標(biāo)點(diǎn)符號的修改,通過潤色使其更加準(zhǔn)確、流暢。應(yīng)該承認(rèn),廣大學(xué)生的參與為本書文字的加工作出了很大的貢獻(xiàn)。

2.重點(diǎn)突出,難點(diǎn)講透

數(shù)據(jù)結(jié)構(gòu)的內(nèi)容十分豐富,難度也比較大。著者的主要工作是準(zhǔn)確講解該講的內(nèi)容,把重點(diǎn)要講透徹,把難點(diǎn)加以分解,使得讀者容易學(xué)習(xí)和理解。數(shù)據(jù)結(jié)構(gòu)教學(xué)的重點(diǎn)是講解經(jīng)典抽象數(shù)據(jù)類型的各種實(shí)現(xiàn)方法;難點(diǎn)則是算法的設(shè)計(jì)、實(shí)現(xiàn)和分析比較。

為此,我們在教材中每章的最后都編寫了“小結(jié)”,明確指出本章的難點(diǎn)和重點(diǎn)。為了便于教學(xué),我們的教材特別注意將講解知識和培養(yǎng)能力并行:不但講解一個(gè)抽象數(shù)據(jù)類型可以采取的常用表示形式,同時(shí)還指出不同表示的特點(diǎn)和各種表示使用的環(huán)境;不但講解如何在選定的存儲表示上正確實(shí)現(xiàn)抽象數(shù)據(jù)類型要求的各種操作,同時(shí)還強(qiáng)調(diào)不同存儲表示對算法效率的影響;不但講解單個(gè)算法的設(shè)計(jì)和實(shí)現(xiàn)方法,同時(shí)也強(qiáng)調(diào)同類算法之間的共性,并且在教材最后對學(xué)到的主要算法進(jìn)行總結(jié),以提高學(xué)生利用學(xué)到的知識去解決實(shí)際問題的能力。

3.算法逐步求精,程序簡明可讀

設(shè)計(jì)一個(gè)算法時(shí),如何從思想出發(fā),逐步細(xì)化直到變成程序語言的代碼?閱讀一個(gè)程序代碼時(shí),如何分解一個(gè)算法程序,正確理解這個(gè)程序完成的算法功能?這是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程的學(xué)生的共同問題,也是一般數(shù)據(jù)結(jié)構(gòu)教材難以書寫清楚、教師難以講解明白的問題。

為了幫助老師和學(xué)生解決上述問題,我們在教材的第一章,都用一個(gè)實(shí)際問題生動地介紹了使用計(jì)算機(jī)求解的全過程,還增加了從算法思想到代碼實(shí)現(xiàn)逐步求精的具體例子。對于教材中比較難理解的算法,一般都是先提出問題,然后對實(shí)例進(jìn)行分析,給出解決的方法,再整理出算法的思路,最后通過逐步求精得到程序代碼;而在講解這個(gè)程序代碼時(shí),利用電子課件的靈活方式,結(jié)合算法的思想,自頂向下進(jìn)行分解。為此,我們對教材的代碼的結(jié)構(gòu)如何與算法思想更加一致,語句(特別是存在多種不同循環(huán)語句時(shí))的選擇盡可能簡單明了,如何引進(jìn)局部變量使得程序更為簡短等,都進(jìn)行反復(fù)改進(jìn)。力求書中提供的程序具有高度的簡明性和可讀性。

我們知道程序是沒有“標(biāo)準(zhǔn)答案”的,但是高水平的程序員能夠根據(jù)語言的風(fēng)格和編程的藝術(shù),編寫出更美、更能體現(xiàn)算法魅力的藝術(shù)珍品。我們?yōu)榇吮M力而為。

4.利用多種方式,提高學(xué)習(xí)興趣和教學(xué)質(zhì)量

除了上述的工作以外,著者還編寫出版了《數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)輔導(dǎo)及習(xí)題詳解》和《算法與數(shù)據(jù)結(jié)構(gòu)(第2版)學(xué)習(xí)指導(dǎo)與習(xí)題解析》;作為《算法與數(shù)據(jù)結(jié)構(gòu)——C語言描述(第三版)》的附件,整理并出版了《“算法與數(shù)據(jù)結(jié)構(gòu)”課程錄像》的完整光盤和全部課件;還完成了一個(gè)《數(shù)據(jù)結(jié)構(gòu)、算法和問題求解》三維的網(wǎng)絡(luò)課件;設(shè)計(jì)了一個(gè)《數(shù)據(jù)結(jié)構(gòu)中算法的可視化演示》軟件框架等。

在從事數(shù)據(jù)結(jié)構(gòu)教學(xué)的同時(shí),著者還發(fā)表了十多篇與數(shù)據(jù)結(jié)構(gòu)相關(guān)的研究論文,其中關(guān)于“三叉樹結(jié)構(gòu)的設(shè)計(jì)和實(shí)現(xiàn)” 研究成果獲得國家專利。指導(dǎo)學(xué)生提出一種基于對象的數(shù)據(jù)結(jié)構(gòu)教學(xué)小語言——ALL,設(shè)計(jì)了數(shù)據(jù)結(jié)構(gòu)中主要算法的ALL語言程序,并且實(shí)現(xiàn)了ALL語言程序到目前流行語言(JAVA、C++、C等)的自動轉(zhuǎn)換。

為幫助學(xué)生深入理解算法與數(shù)據(jù)結(jié)構(gòu)的精髓、提高學(xué)生的學(xué)習(xí)興趣,我們還在北京大學(xué)教學(xué)網(wǎng)上開辟專欄,引導(dǎo)學(xué)生進(jìn)行廣泛討論,受到學(xué)生的熱烈歡迎。通過這些討論,大大豐富了學(xué)生的知識范圍,激發(fā)了學(xué)生自主學(xué)習(xí)的熱情,也彌補(bǔ)了書面作業(yè)和上機(jī)作業(yè)的局限。

光陰似箭,日月如梭,著者圍繞“數(shù)據(jù)結(jié)構(gòu)”教學(xué)和研究的三十多年正是數(shù)據(jù)結(jié)構(gòu)在我國從引介到發(fā)展的三十多年。在此前,著者曾有十年“系統(tǒng)軟件”開發(fā)經(jīng)驗(yàn),因而一接觸“數(shù)據(jù)結(jié)構(gòu)”就產(chǎn)生了極大興趣,能夠很快體會到其中的真諦;加上個(gè)人長期從事“程序設(shè)計(jì)語言”和“軟件理論”的研究,教學(xué)與科研相輔相成、互相促進(jìn)。在辛勤耕耘的同時(shí),個(gè)人也享受著授業(yè)解惑的快樂,體會到人生的價(jià)值。

參考文獻(xiàn):

[1] 許卓群,張乃孝,楊冬青等. 數(shù)據(jù)結(jié)構(gòu)[M]. 北京:高等教育出版社,1987.

[2] 張乃孝等. 數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)[M]. 北京:北京大學(xué)出版社,1991;臺灣儒林出版公司(繁體版),1992.

[3] 張乃孝,裘宗燕. 數(shù)據(jù)結(jié)構(gòu)——C++與面向?qū)ο蟮耐緩絒M]. 北京:高等教育出版社,1998第一版,2001修訂版.

[4] 張乃孝等. 算法與數(shù)據(jù)結(jié)構(gòu)——C語言描述[M]. 北京:高等教育出版社,2002第一版,2006第二版,2012第三版(附教學(xué)光盤).

[5] 張乃孝. 算法與數(shù)據(jù)結(jié)構(gòu)(第2版)學(xué)習(xí)指導(dǎo)與習(xí)題解析[M]. 北京:高等教育出版社,2009.

[6] Knuth D E. The Art of Computer Programming[M]. Addison Wesley Publishing Company, 1973.

[7] Horowitz E, Sahni S. 數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)[M]. 程惟寧譯. 北京:國防工業(yè)出版社,1983.

[8] Wirth N. Algorithms + Data Structures = Programs[M]. Prentice Hall, 1976.

[9] Maurer H. A. Data Structures and Programming Techniques[M]. Prentice Hall, 1977.

[10] Gotlieb C C, Gotlieb L R. Data Types and Structures[M]. Prentice Hall,1978.

[11] Aho A V, Hopcroft J E, Ullman J D. Data Structures and Algorithms[M]. Addison Wesley Publishing Company, 1983.

[12] Mehlhorn K, Tsakalidis A. Data Structures .Handbook of Theoretical Computer Science [M]. Elsevier, 1990.

[13] Budd T A. Classic Data Structures in C++[M]. Addison Wesley Publishing Company, 1994.

[14] 張乃孝,于曉迪. 有關(guān)C語法形式化中若干問題的探討[J].計(jì)算機(jī)工程與應(yīng)用,1985(2):1-5.

[15] 張乃孝. 數(shù)據(jù)結(jié)構(gòu)體系分析[J]. 計(jì)算機(jī)研究與發(fā)展,1988,25(5):36-40.

[16] 張乃孝. 知識結(jié)構(gòu)的三叉樹表示及邏輯推理的實(shí)現(xiàn)[J]. 計(jì)算機(jī)學(xué)報(bào),1990,13(1):32-41.

[17] 張乃孝. 三叉樹結(jié)構(gòu)及其實(shí)現(xiàn)[J]. 計(jì)算機(jī)研究與發(fā)展,1993,30(1):50-54.

[18] 張乃孝,蔣凌霄. ALL———算法與數(shù)據(jù)結(jié)構(gòu)教學(xué)小語言[J]. 計(jì)算機(jī)科學(xué),2003,30(11):178-180.

[19] 孫玉方,張乃孝. 實(shí)用C 語言程序設(shè)計(jì)[M]. 北京:北京大學(xué)出版社,1989;臺灣儒林出版公司(繁體版),1992.

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

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);教學(xué)改革;應(yīng)用

中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2009)36-10155-02

The Teaching Reform and Exploration of the Course of Data Structure in High Vocational Education

WANG Yong-hong

(Jiangsu Animal Husbandry & Veterinary College,Taizhou 25300, China)

Abstract: Data structure is an important course, but it is difficult for students to learn it in high vocational education. Through the exploration of teaching reform, this text analyses the Data structure teaching contents and status of vocational education, proposes the idea that the character of vocational education decide application about Data StructureTeaching Reform.

Key words: Data Structures; Teaching Reform; application

《數(shù)據(jù)結(jié)構(gòu)》是計(jì)算機(jī)應(yīng)用技術(shù)、軟件技術(shù)、網(wǎng)絡(luò)技術(shù)等專業(yè)的重要專業(yè)基礎(chǔ)課,是計(jì)算機(jī)科學(xué)的算法理論基礎(chǔ)和軟件設(shè)計(jì)的技術(shù)基礎(chǔ),也是我校計(jì)算機(jī)大類專業(yè)教學(xué)改革的重點(diǎn)課程之一。

《數(shù)據(jù)結(jié)構(gòu)》研究的對象是數(shù)據(jù)之間的邏輯結(jié)構(gòu),以及如何把它們存儲起來并便于訪問和處理[1]。組織數(shù)據(jù)時(shí),數(shù)據(jù)之間有四種邏輯結(jié)構(gòu)(集合、線性結(jié)構(gòu)、層次結(jié)構(gòu)和網(wǎng)狀結(jié)構(gòu))。存儲數(shù)據(jù)時(shí),也有四種存儲結(jié)構(gòu)(順序結(jié)構(gòu)、鏈接結(jié)構(gòu)、索引結(jié)構(gòu)和散列結(jié)構(gòu)),它們的組合可以構(gòu)成更復(fù)雜的存儲結(jié)構(gòu)[2-3]。對數(shù)據(jù)進(jìn)行處理通常包括輸入、輸出、查找、更新、排序、插入和刪除等運(yùn)算。當(dāng)數(shù)據(jù)的存儲結(jié)構(gòu)不同時(shí),相應(yīng)運(yùn)算的實(shí)現(xiàn)算法也不同。

在高職《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革中,如何更好地進(jìn)行教學(xué),取得好的教學(xué)效果,是我們一直探索的問題。

1 《數(shù)據(jù)結(jié)構(gòu)》學(xué)習(xí)中的問題

1.1 高職的性質(zhì)和特征

我們《數(shù)據(jù)結(jié)構(gòu)》教學(xué)的對象是高職學(xué)生,而高職教育就是就業(yè)教育。計(jì)算機(jī)專業(yè),如軟件專業(yè),其出口是符合企業(yè)崗位入門需求,具有相當(dāng)于一年軟件開發(fā)經(jīng)驗(yàn)的軟件開發(fā)工程師(資格證書)[4]。就業(yè)教育的特征是以就業(yè)為導(dǎo)向,以就業(yè)崗位的需求為基礎(chǔ),明確培養(yǎng)目標(biāo)和教學(xué)的程度。以實(shí)用技能為核心,選擇課程內(nèi)容,學(xué)以致用。以動手能力為突破點(diǎn),培養(yǎng)自學(xué)能力、解決問題能力。以項(xiàng)目經(jīng)驗(yàn)為學(xué)習(xí)目標(biāo),了解行業(yè)規(guī)則。《數(shù)據(jù)結(jié)構(gòu)》也應(yīng)緊緊圍繞這一特征展開教學(xué)。

1.2 《數(shù)據(jù)結(jié)構(gòu)》教學(xué)的狀況

從以往《數(shù)據(jù)結(jié)構(gòu)》教學(xué)的情況看,效果沒有完全達(dá)到,高職學(xué)生的來源、現(xiàn)狀、特點(diǎn),如學(xué)生理論應(yīng)用能力欠缺,不能正確認(rèn)識課程的作用,學(xué)習(xí)積極性不高等,影響了課程的教學(xué)[5]。在《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革中,我們從課程本身入手,分析存在的問題,課程理論偏多,使得高職學(xué)生掌握困難,實(shí)踐課程難度偏大,起不到應(yīng)有作用,應(yīng)用不具體,缺乏應(yīng)用示例。我們提出,高職《數(shù)據(jù)結(jié)構(gòu)》課程的改革不宜理論太抽象,而應(yīng)重在應(yīng)用。

2 《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革重在應(yīng)用

2.1 《數(shù)據(jù)結(jié)構(gòu)》教學(xué)理解

數(shù)據(jù)結(jié)構(gòu)是指數(shù)據(jù)間的相互關(guān)系。具體到計(jì)算機(jī)環(huán)境,一種結(jié)構(gòu)自然地聯(lián)系著作用在這種類型的數(shù)據(jù)上的運(yùn)算,為了執(zhí)行運(yùn)算,必須把數(shù)據(jù)以某種方式存儲在計(jì)算機(jī)中。因此,我們認(rèn)為,數(shù)據(jù)結(jié)構(gòu)就是由某種邏輯關(guān)系組織起來的一批數(shù)據(jù),按一定的存儲方法被存儲于計(jì)算機(jī)中,并在這些數(shù)據(jù)上定義一個(gè)運(yùn)算的集合[6]。

通常,算法的設(shè)計(jì)取決于數(shù)據(jù)的邏輯結(jié)構(gòu),算法的實(shí)現(xiàn)取決于數(shù)據(jù)的存儲結(jié)構(gòu)。每種數(shù)據(jù)結(jié)構(gòu)從邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)和操作運(yùn)算等方面進(jìn)行教學(xué),全篇從集合、線性結(jié)構(gòu)等基本數(shù)據(jù)結(jié)構(gòu)入手,實(shí)現(xiàn)層次結(jié)構(gòu)和網(wǎng)狀結(jié)構(gòu)等較復(fù)雜結(jié)構(gòu)教學(xué),這是《數(shù)據(jù)結(jié)構(gòu)》教學(xué)的共同切入點(diǎn)[7]。

2.2 高職《數(shù)據(jù)結(jié)構(gòu)》教學(xué)應(yīng)發(fā)生變化

在《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革中,我們研究認(rèn)為,由于高職自身的特點(diǎn)和辦學(xué)的現(xiàn)狀,作為高職《數(shù)據(jù)結(jié)構(gòu)》的教學(xué),其內(nèi)容和要求應(yīng)有所變化,側(cè)重點(diǎn)適當(dāng)改變,理論的教學(xué)在內(nèi)容和課時(shí)上應(yīng)減少,課程的重點(diǎn)應(yīng)轉(zhuǎn)移到數(shù)據(jù)結(jié)構(gòu)的應(yīng)用上。最終的目的是學(xué)生應(yīng)能夠把基本的數(shù)據(jù)結(jié)構(gòu)作為對象來看待,能夠把常用的數(shù)據(jù)結(jié)構(gòu)與面向?qū)ο蟮某绦蛟O(shè)計(jì)方法聯(lián)系起來,進(jìn)而掌握常用的線性表、堆棧、隊(duì)列、二叉樹、向量等數(shù)據(jù)結(jié)構(gòu)及各種排序、查找算法應(yīng)用[8],達(dá)到高職學(xué)生學(xué)了《數(shù)據(jù)結(jié)構(gòu)》能夠在系統(tǒng)開發(fā)中應(yīng)用數(shù)據(jù)結(jié)構(gòu)的目的。

具體地說,通過課程的教學(xué),學(xué)生能夠具備常用的基本數(shù)據(jù)結(jié)構(gòu)主要算法的應(yīng)用能力;具備常用的排序、檢索和索引算法應(yīng)用能力;具備在進(jìn)行程序設(shè)計(jì)、調(diào)試、測試的課程項(xiàng)目訓(xùn)練過程中,能夠合理地組織數(shù)據(jù)、有效地表示數(shù)據(jù)、有效地處理數(shù)據(jù),書寫的程序結(jié)構(gòu)清楚、正確易讀,提高程序設(shè)計(jì)的質(zhì)量等能力[6]。

所以,教學(xué)重點(diǎn)也應(yīng)隨著相應(yīng)改變?yōu)?基本數(shù)據(jù)結(jié)構(gòu)在解決實(shí)際問題中的應(yīng)用;基本的算法策略在解決實(shí)際問題的應(yīng)用;新興數(shù)據(jù)結(jié)構(gòu)的相關(guān)問題;新興算法的相關(guān)問題及實(shí)踐;經(jīng)典問題的經(jīng)典算法;典型系統(tǒng)的計(jì)算機(jī)模擬;需自行設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)和算法來解決的實(shí)際問題[9]。

算法描述語言采用廣為程序員所使用的面向?qū)ο蟮恼Z言,使得ADT (抽象數(shù)據(jù)類型)的概念得到更自然的體現(xiàn),更本質(zhì)地體現(xiàn)數(shù)據(jù)結(jié)構(gòu)的思想,而且所定義的數(shù)據(jù)結(jié)構(gòu)類能夠方便地被重用[6]。

3 《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革實(shí)踐

以線性表為例闡述《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革的思路?!稊?shù)據(jù)結(jié)構(gòu)》線性表在全篇中處于基礎(chǔ)、入門的地位。我們在教學(xué)改革中,按照先講清概念,再結(jié)合圖像、動畫理解邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),重點(diǎn)講解線性表的應(yīng)用的方式進(jìn)行教學(xué),有意識地弱化理論性,強(qiáng)調(diào)動手能力的培養(yǎng)。講解應(yīng)用時(shí),采用了Java語言作為描述語言,因?yàn)镴ava語言提供了許多預(yù)定義好的和已經(jīng)實(shí)現(xiàn)的標(biāo)準(zhǔn)庫,能夠直接全面支持?jǐn)?shù)據(jù)結(jié)構(gòu)原理[10]。

在講解線性表的概念時(shí),通過舉例,學(xué)生能夠理解具有相同屬性的數(shù)據(jù)元素的有限序列,邏輯結(jié)構(gòu)通過示意圖講解也能接收。但線性表如何實(shí)現(xiàn),就涉及到數(shù)據(jù)的存儲結(jié)構(gòu),存儲結(jié)構(gòu)有順序、鏈接、散列多種方式。我們講解兩種基本的存儲結(jié)構(gòu)。

在講解存儲結(jié)構(gòu)時(shí)采用圖像示意,加在其上的算法采用動畫演示,但算法的具體代碼描述已不再是重點(diǎn)。學(xué)生聽懂后,重點(diǎn)轉(zhuǎn)向數(shù)據(jù)結(jié)構(gòu)的應(yīng)用。就線性表而言,順序表采用ArrayList類實(shí)現(xiàn),鏈表采用LinkedList類實(shí)現(xiàn)。在Java語言中,與《數(shù)據(jù)結(jié)構(gòu)》一樣,ADT是一個(gè)僅保存數(shù)據(jù)類型和可能在這個(gè)數(shù)據(jù)類型上進(jìn)行的操作定義。開發(fā)者只能通過ADT的操作方法來訪問ADT的屬性,無需知道ADT內(nèi)部操作如何實(shí)現(xiàn)[11]。這就為我們《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革的重在應(yīng)用提供了可能性。

所以,線性表無論是采用何種存儲結(jié)構(gòu),對外的接口總是不變。ArrayList類、LinkedList類都是List接口的實(shí)現(xiàn)。List接口中void add(int index,Object element)在指定位置index上添加元素element,Object remove(int index)刪除指定位置上的元素,Object get(int index)返回List中指定位置的元素,int indexOf(Object o)返回第一個(gè)出現(xiàn)元素o的位置,如果沒有該元素則返回-1,int size(),List subList(fromIndex, toIndex)等方法,ArrayList類、LinkedList類同樣具有。LinkedList類增加特有的方法,如void addFirst(Object o),void addLast(Object o),Object getFirst( ),Object getLast( ),Object removeFirst( ),Object removeLast( )。

該處數(shù)據(jù)結(jié)構(gòu)應(yīng)用舉例為模擬撲克發(fā)牌。采用ArrayList實(shí)現(xiàn)。首先生成52張撲克牌,然后用Collections.shuffle( )方法打亂牌的順序,這個(gè)操作即模擬撲克洗牌操作,之后根據(jù)運(yùn)行參數(shù)進(jìn)行模擬撲克發(fā)牌。發(fā)牌方法dealHand(List deck,int n),參數(shù)n指明每人發(fā)牌張數(shù)。部分代碼如下:

public static List dealHand(List deck,int n){//發(fā)牌

int deckSize=deck.size();

List handView=deck.subList(deckSize-n,deckSize);

List hand=new ArrayList(handView);

handView.clear();

return hand;

}

再通過調(diào)用main()方法來調(diào)用dealHand(deck,cardsPerHand)。

int numHands=4;//發(fā)牌人數(shù)

int cardsPerHand=11;//每人發(fā)牌張數(shù)

String[]suit=new String[]{"spades","hearts","diamonds","clubs"};//四種花式

String[]rank=new String[]{"Ace","1","2","3","4","5","6","7","8","9","10","Jack","Queen","King"};//13張牌

List deck=new ArrayList();//

for(int i=0;i

for(int j=0;j

deck.add(rank[j]+" of "+suit[i]);

Collections.shuffle(deck);//打亂牌的順序,模擬洗牌操作

for(int i=0;i

System.out.println(dealHand(deck,cardsPerHand));//發(fā)牌

當(dāng)我們將

for(int i=0;i

System.out.println(dealHand(deck,cardsPerHand));//發(fā)牌

增加在

Collections.shuffle(deck);//打亂牌的順序,模擬洗牌操作

之前,可以對照洗牌前后的線性表的元素,順序發(fā)生了變化,加強(qiáng)了對有序概念的理解。

這樣的數(shù)據(jù)結(jié)構(gòu)講解,學(xué)生特別有興趣,在不知不覺中,理解了數(shù)據(jù)結(jié)構(gòu)的概念,學(xué)會了線性表的應(yīng)用,達(dá)到了《數(shù)據(jù)結(jié)構(gòu)》課程的教學(xué)目的。

4 結(jié)束語

《數(shù)據(jù)結(jié)構(gòu)》課程是我校的精品課程,通過多年教學(xué)改革,我們做了許多有益的探索,學(xué)生通過共享教學(xué)改革的成果,對《數(shù)據(jù)結(jié)構(gòu)》課程的學(xué)習(xí)收到了很好的效果。通過不斷努力探索,我們將《數(shù)據(jù)結(jié)構(gòu)》課程的教學(xué)從理論較重,改變?yōu)樽⒅貞?yīng)用,走出一條適合高職學(xué)生的教學(xué)之路。

參考文獻(xiàn):

[1] 馬秋菊.數(shù)據(jù)結(jié)構(gòu)[M].北京:中國水利水電出版社,2006.

[2] 唐策善,黃劉生.數(shù)據(jù)結(jié)構(gòu)[M].北京:高等教育出版社,2004.

[3] 嚴(yán)尉敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)[M].北京:清華大學(xué)出版社,2000.

[4] 全國高等院校計(jì)算機(jī)基礎(chǔ)教育研究會[M].高職院校計(jì)算機(jī)教育經(jīng)驗(yàn)匯編. 北京:中國鐵道出版社,2007.

[5] 劉建國.高職《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)方法改革探討[J].北京市經(jīng)濟(jì)管理干部學(xué)院學(xué)報(bào).2007.6:78-80.

[6] 張銘,等.數(shù)據(jù)結(jié)構(gòu)課程的知識體系和教學(xué)實(shí)踐[J].計(jì)算機(jī)教育.2004.3:89-91.

[7] 帥訓(xùn)波,等.數(shù)據(jù)結(jié)構(gòu)間的縱橫聯(lián)系,計(jì)算機(jī)與信息技術(shù)[J].2007.8:39-41.

[8] 王志華,等.高等職業(yè)教育中《數(shù)據(jù)結(jié)構(gòu)》課程建設(shè)研究[J].忻州師范學(xué)院學(xué)報(bào).2007.4:59-61.

[9] 李治軍,等.數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)教學(xué)模式的探討[J].計(jì)算機(jī)教育.2006.2:54-57.

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

[關(guān)鍵詞]數(shù)據(jù)結(jié)構(gòu);算法;數(shù)據(jù)元素;系統(tǒng)應(yīng)用

中圖分類號:TP311.52 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-914X(2017)22-0102-01

1 引言

隨著計(jì)算機(jī)技術(shù)日新月異的發(fā)展,程序可視化教學(xué)在教育和教學(xué)中已經(jīng)顯示了明顯的優(yōu)越性。所謂可視化教學(xué),是指在計(jì)算機(jī)軟件與多媒體技術(shù)的幫助下,將一些抽象、深?yuàn)W、復(fù)雜的事物以及發(fā)展過程,用仿真化、虛擬化、實(shí)體化的方式,在教學(xué)方法中顯現(xiàn)出來??梢暬虒W(xué)應(yīng)用方便,可以使計(jì)算機(jī)學(xué)習(xí)者直觀地觀察、體驗(yàn)并利用這些可視化的知識模型,從而使計(jì)算機(jī)學(xué)習(xí)者較為輕松地進(jìn)行課程的學(xué)習(xí),對計(jì)算機(jī)學(xué)習(xí)者的認(rèn)知能力與創(chuàng)新能力都會有較大的提升。

可視化教學(xué)應(yīng)用于數(shù)據(jù)結(jié)構(gòu)算法教學(xué)當(dāng)中,可以改變傳統(tǒng)教學(xué)方法中的枯燥乏味局面,吸引計(jì)算機(jī)學(xué)習(xí)者的注意力??梢詫⑽淖?、數(shù)據(jù)、圖片、源代碼等其它多媒體動態(tài)地融合在一起,豐富算法的執(zhí)行過程。可以讓計(jì)算機(jī)學(xué)習(xí)者體會在大量不同的數(shù)據(jù)結(jié)構(gòu)下,算法執(zhí)行效率的差異。計(jì)算機(jī)學(xué)習(xí)者也可以充分的利用自己的課余時(shí)間進(jìn)行自我學(xué)習(xí),通過可視化教學(xué)軟件研究算法的執(zhí)行過程,培養(yǎng)計(jì)算機(jī)學(xué)習(xí)者自主學(xué)習(xí)的能力。

2 數(shù)據(jù)結(jié)構(gòu)與算法系統(tǒng)的需求分析

傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)與算法教學(xué)方法中,有些算法的執(zhí)行過程比較抽象,教師為了講解一個(gè)算法往往需要輔助大量的圖形示例。常規(guī)的板書和一般的幻燈投影授課均難以有效地展示這種抽象性和動態(tài)性,容易造成教學(xué)的低效和學(xué)時(shí)膨脹。有一些學(xué)??吹搅吮锥耍发畴h聳據(jù)結(jié)構(gòu)教學(xué)網(wǎng)站供計(jì)算機(jī)學(xué)習(xí)者學(xué)習(xí)和交流;也有一些學(xué)校則開發(fā)出了可視化數(shù)據(jù)結(jié)構(gòu)教學(xué)演示系統(tǒng),將數(shù)據(jù)結(jié)構(gòu)中算法的執(zhí)行過程直觀展示在用戶面前。整體上看,這些系統(tǒng)在一定程度上促進(jìn)了用戶的學(xué)習(xí),但還存在著一些不足,如系統(tǒng)以“教”為中心而設(shè)計(jì),缺乏以用戶為中心的人機(jī)交互理論的指導(dǎo),學(xué)習(xí)者與軟件的交互機(jī)會少且單一。因此,一個(gè)供用戶自主設(shè)計(jì)算法,在實(shí)踐環(huán)節(jié)上進(jìn)行創(chuàng)新,提出自己的見解和設(shè)計(jì),并得以驗(yàn)證,從根本上和底層次上深化對數(shù)據(jù)結(jié)構(gòu)與算法的理解的學(xué)習(xí)平臺的苑⒂任重要,互聯(lián)網(wǎng)支撐的數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)系統(tǒng)將解決這個(gè)問題。系統(tǒng)能夠讓用戶熟悉數(shù)據(jù)結(jié)構(gòu)課程的核心理念,掌握相關(guān)算法內(nèi)部的運(yùn)行機(jī)制。本文在研究數(shù)據(jù)結(jié)構(gòu)模塊的基礎(chǔ)上,將開發(fā)一個(gè)數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)系統(tǒng),聯(lián)動演繹各數(shù)據(jù)結(jié)構(gòu)模塊是如何有機(jī)結(jié)合的,并為用戶提供自主設(shè)計(jì)算法的接口,這也是本系統(tǒng)區(qū)別于其他系統(tǒng)的一個(gè)創(chuàng)新點(diǎn)。

本文提出的數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)系統(tǒng)的設(shè)計(jì)目標(biāo)為:系統(tǒng)良好的交互界面,包含數(shù)據(jù)結(jié)構(gòu)各功能模塊的算法演示,各模塊詳細(xì)信息查看,利用計(jì)算機(jī)圖形界面技術(shù),提供良好的用戶界面。系統(tǒng)實(shí)現(xiàn)一系列數(shù)據(jù)結(jié)構(gòu)的算法,用戶能實(shí)時(shí)查看算法圖形動態(tài)演示過程,并提供各算法和數(shù)據(jù)結(jié)構(gòu)的詳細(xì)中間結(jié)果信息,幫助用戶進(jìn)一步理解算法的執(zhí)行過程和效率。系統(tǒng)不僅可以為用戶展示數(shù)據(jù)結(jié)構(gòu)算法的執(zhí)行過程和中間結(jié)果,還提供編程接口讓用戶實(shí)現(xiàn)自定義算法,并對該算法進(jìn)行測評,以圖形界面的方式展示在用戶面前。系統(tǒng)具備良好的穩(wěn)定性,采用了多種安全機(jī)制確保服務(wù)器的穩(wěn)定運(yùn)行,保證了系統(tǒng)的安全可靠。充分運(yùn)用面向?qū)ο蟮脑O(shè)計(jì)思想來設(shè)計(jì)系統(tǒng)模塊,使其具有良好的擴(kuò)展性,方便系統(tǒng)的后期維護(hù)和擴(kuò)展。

3 數(shù)據(jù)結(jié)構(gòu)的系統(tǒng)總體架構(gòu)

系統(tǒng)采用典型的三層架構(gòu)作為開發(fā)模型,本系統(tǒng)的三層架構(gòu)主要?jiǎng)澐譃榭蛻舳?、服?wù)器端和服務(wù)資源層。系統(tǒng)客戶端是一個(gè)瀏覽器,顯示用戶的使用界面,不同的用戶通過瀏覽器向服務(wù)器端發(fā)送請求,然后接收服務(wù)器的返回信息展示在用戶界面上。服務(wù)器層位于系統(tǒng)的服務(wù)器端,包含了數(shù)據(jù)庫服務(wù)器和應(yīng)用程序服務(wù)器,它提供了數(shù)據(jù)支持,實(shí)現(xiàn)了算法引擎和代碼測評,算法引擎提供了經(jīng)典算法的演示和用戶自定義算法演示,代碼測評負(fù)責(zé)對用戶提交的源代碼進(jìn)行測試,并生成y試數(shù)據(jù)。服務(wù)資源層位于系統(tǒng)的服務(wù)器,它提供用戶經(jīng)典算法庫和可視化類庫,經(jīng)典算法庫包含了相關(guān)的代碼以及算法演示的全過程,可視化類庫提供用戶的一些畫圖操作,讓圖形界面的演示更為美觀。

優(yōu)秀的系統(tǒng)必須能夠滿足系統(tǒng)的擴(kuò)展和維護(hù)需求,數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)系統(tǒng)三層架構(gòu)側(cè)重于設(shè)計(jì)的簡單化,簡化客戶端的功能,將復(fù)雜操作置于服務(wù)器端。系統(tǒng)的客戶端,也就是瀏覽器層,僅僅用來顯示用戶工作界面和執(zhí)行一些畫圖操作。系統(tǒng)的客戶端是前臺用戶瀏覽器,顯然,瀏覽器不會對測評系統(tǒng)產(chǎn)生任何影響,只要客戶端瀏覽器支持環(huán)境就可以運(yùn)行該系統(tǒng),而目前的瀏覽器都對其進(jìn)行了支持。不管客戶端有多少不同種類和數(shù)目,都不會影響系統(tǒng)的完善和后期維護(hù),這樣就減輕了系統(tǒng)開發(fā)和擴(kuò)展維護(hù)的難度。另一方面,系統(tǒng)服務(wù)器端承載了絕大多數(shù)的負(fù)載,基于此情況,服務(wù)器端的配置就必須要合理,后臺服務(wù)器的一個(gè)小小的錯(cuò)誤都有可能對系統(tǒng)測試服務(wù)造成不可預(yù)計(jì)的影響,因此,保證系統(tǒng)服務(wù)器端的安全穩(wěn)定運(yùn)行是十分關(guān)鍵的。

在本系統(tǒng)的三層架構(gòu)中,利用基于面向?qū)ο蟮姆椒ㄟM(jìn)行系統(tǒng)的苑,按照系統(tǒng)需求對服務(wù)器做了不同模塊的劃分,主要分為三個(gè)部分。分別是數(shù)據(jù)庫、算法引擎和代碼測評程序。數(shù)據(jù)庫為用戶提供數(shù)據(jù)支持,能夠滿足用戶對數(shù)據(jù)的增加、修改、刪除、更新等操作。算法引擎負(fù)責(zé)對算法進(jìn)行解釋,給用戶提供算法的演示功能,并能夠?qū)⒂脩舭凑障到y(tǒng)要求編寫的代碼轉(zhuǎn)變成圖形方式展示在用戶面前。代碼測評程序主要對用戶提交的源代碼進(jìn)行完整的測評,其中包括源代碼編譯,源代碼測試和程序監(jiān)控等。對于服務(wù)資源層,包括兩大部分,分別是經(jīng)典算法庫和可視化類庫。經(jīng)典算法庫包含了數(shù)據(jù)結(jié)構(gòu)九大章節(jié)的數(shù)據(jù)結(jié)構(gòu)模型和相關(guān)的算法,供算法引擎調(diào)用,在客戶端上展示出來??梢暬悗焯峁┝艘幌盗械臄?shù)據(jù)結(jié)構(gòu)畫圖操作,使算法的演示過程顯得生動形象。

服務(wù)器層用分離可縮放結(jié)構(gòu),算法引擎部分與代碼測評程序兩者沒有直接交互。本文設(shè)計(jì)的系統(tǒng)將算法引擎與代碼測評分離開來,測評模塊用多線程處理機(jī)制,極大的提高了系統(tǒng)的響應(yīng)速度,雙方通過數(shù)據(jù)庫進(jìn)行~合。這種結(jié)構(gòu)的設(shè)計(jì)也使得測評模塊的復(fù)雜性有所降低,首先,測評模塊易于維護(hù),不同模塊的修改不會對其他的模塊造成影響,其次,利于系統(tǒng)的負(fù)載均衡。如果算法引擎和代碼測評在同一臺服務(wù)器運(yùn)行,當(dāng)同時(shí)測試的用戶比較多的時(shí)候,非常消耗服務(wù)器資源,容易照成服務(wù)器負(fù)載過重。用了分離可縮放結(jié)構(gòu),代碼測評系統(tǒng)就可以單獨(dú)的放在另外一臺服務(wù)器上,專門負(fù)責(zé)源代碼的測評工作,甚至可以放在一個(gè)集群上,有效地提升系統(tǒng)的運(yùn)行效率。通過對系統(tǒng)進(jìn)行分層,能夠使得系統(tǒng)的各大模塊之間沒有強(qiáng)的Q合,彼此之間相互聯(lián)系卻不會相關(guān)干擾,使得開發(fā)過程方便快捷,對以后的維護(hù)和擴(kuò)展也有著極大的好處。

參考文獻(xiàn)

[1] 在線學(xué)習(xí)系統(tǒng)的設(shè)計(jì)與開發(fā)[J].李萍.電子世界.2013(13).

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

關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);理論教學(xué);實(shí)踐教學(xué);教學(xué)改革

中圖分類號:TP311.12-4 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9599?。?012) 17-0000-02

1 課程內(nèi)容

《數(shù)據(jù)結(jié)構(gòu)》是計(jì)算機(jī)科學(xué)中一門綜合性的專業(yè)基礎(chǔ)課,也是其它輔修計(jì)算機(jī)專業(yè)的必修課程。本課程討論了軟件設(shè)計(jì)中經(jīng)常遇到的線性表、堆棧、隊(duì)列、串、數(shù)組、樹和二叉樹、圖等典型數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)和操作的實(shí)現(xiàn)方法,以及遞歸算法設(shè)計(jì)方法和各種典型排序和查找算法的設(shè)計(jì)方法。并對算法進(jìn)行性能分析和比較,內(nèi)容非常豐富。數(shù)據(jù)結(jié)構(gòu)課程是一門理論和實(shí)踐相結(jié)合的課程。本課程包括講授和課內(nèi)上機(jī)實(shí)驗(yàn)兩部分教學(xué)內(nèi)容。課內(nèi)上機(jī)實(shí)驗(yàn)是為訓(xùn)練學(xué)生的實(shí)際程序設(shè)計(jì)能力安排的。

課程的目標(biāo)是使學(xué)生掌握數(shù)據(jù)基本的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)、一些典型的數(shù)據(jù)結(jié)構(gòu)算法及程序設(shè)計(jì)方法和技巧,要求學(xué)會分析數(shù)據(jù)對象特征,掌握數(shù)據(jù)組織方法和計(jì)算機(jī)的表示方法,為數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲結(jié)構(gòu)以及相應(yīng)的處理算法,要求具備算法分析的基本技術(shù)和能力,并培養(yǎng)良好的程序設(shè)計(jì)風(fēng)格,掌握開發(fā)復(fù)雜、高效程序的技能。

2 理論教學(xué)方法與手段的探索

遵循以學(xué)生為主體,以教師為主導(dǎo)的教育理念,針對理論教學(xué)和實(shí)踐教學(xué)的不同特點(diǎn),合理進(jìn)行教學(xué)設(shè)計(jì),推進(jìn)教學(xué)方法和教學(xué)手段改革。課堂上引入啟發(fā)式教學(xué),充分發(fā)揮學(xué)生的學(xué)習(xí)主動性,重視自學(xué)能力的培養(yǎng),引導(dǎo)學(xué)生積極思考,活躍課堂氣氛,適當(dāng)壓縮授課時(shí)數(shù), 留給學(xué)生更多的思維空間和自學(xué)空間,增加學(xué)生閱讀參考書、科技文獻(xiàn)和寫讀書報(bào)告的時(shí)間。數(shù)據(jù)結(jié)構(gòu)的教學(xué)策略:

(1)激發(fā)學(xué)生的學(xué)習(xí)興趣

興趣是最好的老師,只有激發(fā)了學(xué)生的學(xué)習(xí)興趣,才能事半功倍,取得更好的學(xué)習(xí)效果。在教學(xué)中通過具體的實(shí)例說明數(shù)據(jù)結(jié)構(gòu)在程序設(shè)計(jì)中的重要性,從而激發(fā)學(xué)生的求知欲,讓學(xué)生充分感受到數(shù)據(jù)結(jié)構(gòu)算法設(shè)計(jì)的魅力,調(diào)動學(xué)生思考的積極性。鼓勵(lì)學(xué)生對教學(xué)內(nèi)容提出疑問,師生共同討論,從而提高教學(xué)和學(xué)習(xí)水平。在課堂上隨時(shí)提出一些思考題,對一個(gè)結(jié)構(gòu)從不同角度討論。例如,對于線性結(jié)構(gòu),討論線性表、棧和隊(duì)列各自的操作特點(diǎn)。鼓勵(lì)學(xué)生在學(xué)習(xí)過程獨(dú)立思索,提出不同的算法,深化對問題的理解。例如在講解循環(huán)隊(duì)列時(shí),如何判斷隊(duì)空和隊(duì)滿,有的同學(xué)提出三種解決方法。對于這樣的同學(xué),我們及時(shí)給與表揚(yáng)和鼓勵(lì)。

(2)教學(xué)內(nèi)容的有機(jī)組合

在現(xiàn)有教學(xué)大綱的內(nèi)容的基礎(chǔ)上,不斷吸收新知識、新內(nèi)容,補(bǔ)充考研試題。對教學(xué)內(nèi)容的安排重新進(jìn)行拆分和重組,突出重點(diǎn)、細(xì)化難點(diǎn)。運(yùn)用面向?qū)ο蟮膶W(xué)習(xí)方法講解數(shù)據(jù)結(jié)構(gòu),每一種數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)方法都是相似的,重點(diǎn)介紹數(shù)據(jù)結(jié)構(gòu)的邏輯關(guān)系、基本操作和在不同存儲方式下基本操作的實(shí)現(xiàn),介紹數(shù)據(jù)的邏輯結(jié)構(gòu)和物理存儲之間的關(guān)系,及物理存儲在類C語言中的描述,數(shù)據(jù)結(jié)構(gòu)的主要內(nèi)容可用以下的體系結(jié)構(gòu)來表示。

學(xué)生在了解了數(shù)據(jù)結(jié)構(gòu)課程的核心內(nèi)容后,算法的實(shí)現(xiàn)就不難理解了。例如:我們在講授線性表的復(fù)雜操作有序表的合并時(shí),先從邏輯上看是如何實(shí)現(xiàn)的,介紹算法設(shè)計(jì)思想,然后講解兩種實(shí)現(xiàn)算法:順序存儲方式和鏈?zhǔn)酱鎯Ψ绞较碌乃惴?,讓學(xué)生自己比較兩種算法,加深理解。

(3)雙向互動式的教學(xué)

改變原來“填鴨式”的教學(xué)模式,變以教師為主的教學(xué)方式為以學(xué)生為中心的教學(xué)模式,教師只起畫龍點(diǎn)睛的作用。課堂上引入啟發(fā)式教學(xué),充分發(fā)揮學(xué)生的學(xué)習(xí)主動性,重視自學(xué)能力的培養(yǎng),引導(dǎo)學(xué)生積極思考,活躍課堂氣氛,適當(dāng)壓縮授課時(shí)數(shù),留給學(xué)生更多的思維空間和自學(xué)空間,增加學(xué)生閱讀參考書、科技文獻(xiàn)和寫讀書報(bào)告的時(shí)間。為了更方便和鼓勵(lì)學(xué)生自主學(xué)習(xí),我們建設(shè)了數(shù)據(jù)結(jié)構(gòu)精品課程網(wǎng)站,有授課視頻、教學(xué)課件、各章習(xí)題和考研輔導(dǎo)等學(xué)生內(nèi)容,教師還可以通過網(wǎng)站進(jìn)行網(wǎng)上答疑,與學(xué)生及時(shí)交流。

(4)注重各知識點(diǎn)的有機(jī)統(tǒng)一

若想讓學(xué)生做到融會貫通,舉一反三,在教學(xué)中就必須注重各知識點(diǎn)的有機(jī)統(tǒng)一。比如在講授內(nèi)部排序算法時(shí),綜合比較各種排序算法的時(shí)間復(fù)雜度、空間復(fù)雜度、穩(wěn)定性、最好及最差情況等。讓學(xué)生通過比較,提高解決問題的能力,會根據(jù)不同形式的待排序表選擇合適的存儲方式和排序方法。再就是講授鏈隊(duì)列時(shí),講完用一個(gè)帶有頭尾指針的單鏈表表示的隊(duì)列后,再讓學(xué)生思考如何用一個(gè)循環(huán)鏈表表示隊(duì)列,在給出啟示后讓學(xué)生自己寫成隊(duì)列的初始化、入隊(duì)和出隊(duì)算法,通過這種方式的教學(xué)不僅培養(yǎng)了學(xué)生的思維能力,而且有助于培養(yǎng)學(xué)生的創(chuàng)新能力,會綜合運(yùn)用所學(xué)知識,用計(jì)算機(jī)解決較復(fù)雜的問題。

(5)運(yùn)用現(xiàn)代化教學(xué)手段

重視現(xiàn)代教育方法、技術(shù)手段的運(yùn)用,采用多媒體教學(xué),加大課程信息量,提高教學(xué)效率。在采用多媒體技術(shù)講授本門課程的過程中,在深入研究多媒體教學(xué)的特點(diǎn)以及學(xué)生現(xiàn)有知識架構(gòu)的基礎(chǔ)上,重新組織、優(yōu)化、補(bǔ)充教材內(nèi)容,精心制作多媒體課件。在多媒體課堂上,通過教師有機(jī)地組織電子教案、演示課件等,使得學(xué)生能形象地領(lǐng)悟到算法的效果,教學(xué)變得豐富、有趣。在授課過程中,首先還原問題的本來面目——提出問題,引導(dǎo)同學(xué)積極參與——嘗試解決問題,在討論的基礎(chǔ)上給出結(jié)論——講授教學(xué)內(nèi)容,最后采用課件進(jìn)行算法的動態(tài)演示,加大了課堂信息量,提高了教學(xué)效率。

3 實(shí)踐教學(xué)的探索

實(shí)踐教學(xué)是數(shù)據(jù)結(jié)構(gòu)課程教學(xué)的一個(gè)重要組成部分,對本門課程的學(xué)習(xí)起著至關(guān)重要的決定。通過實(shí)踐教學(xué),讓學(xué)生能夠?qū)W會運(yùn)用書上學(xué)到的知識來解決實(shí)際問題,培養(yǎng)軟件工作所需要的動手能力。

實(shí)踐活動通過兩個(gè)環(huán)節(jié)來實(shí)現(xiàn),第一個(gè)環(huán)節(jié)課程實(shí)驗(yàn),較偏重于對課程內(nèi)容的理解。實(shí)驗(yàn)講義完備,開出率100%。保證了學(xué)生理解和掌握課程的基本理論和基本概念,又提高他們的動手能力。第二個(gè)環(huán)節(jié)課程設(shè)計(jì)實(shí)習(xí),讓學(xué)生有機(jī)會自己提出實(shí)驗(yàn)項(xiàng)目、實(shí)驗(yàn)方案,在教師指導(dǎo)下按其方案進(jìn)行實(shí)驗(yàn),最后讓學(xué)生自己得出應(yīng)有的結(jié)論,進(jìn)一步培養(yǎng)學(xué)生的學(xué)習(xí)興趣和實(shí)踐動手能力,從而激發(fā)創(chuàng)造力,也初步實(shí)現(xiàn)了對學(xué)生進(jìn)行一整套軟件工作規(guī)范的訓(xùn)練和科學(xué)作風(fēng)的培養(yǎng)。

(1)實(shí)驗(yàn)教學(xué)內(nèi)容

依據(jù)實(shí)驗(yàn)教學(xué)大綱,合理安排實(shí)驗(yàn)教學(xué)內(nèi)容。我在教學(xué)時(shí)把實(shí)驗(yàn)項(xiàng)目按照不同內(nèi)容和難度分成三種類型:基礎(chǔ)型實(shí)驗(yàn)項(xiàng)目、設(shè)計(jì)性實(shí)驗(yàn)項(xiàng)目、和綜合性和創(chuàng)新型實(shí)驗(yàn)項(xiàng)目,實(shí)現(xiàn)了實(shí)驗(yàn)教學(xué)內(nèi)容的創(chuàng)新?;A(chǔ)型實(shí)驗(yàn)項(xiàng)目安排在各個(gè)章節(jié)中,主要圍繞數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識內(nèi)容,目的是讓學(xué)生掌握各種基本數(shù)據(jù)結(jié)構(gòu)的邏輯關(guān)系和存儲方式,通過實(shí)驗(yàn)驗(yàn)證算法,理解數(shù)據(jù)結(jié)構(gòu)的基本操作的定義和實(shí)現(xiàn)。設(shè)計(jì)型實(shí)驗(yàn)項(xiàng)目是在基礎(chǔ)型實(shí)驗(yàn)項(xiàng)目的基礎(chǔ)上,讓學(xué)生自己設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)和算法,提高學(xué)生解決問題的能力和良好的編程能力。例如一元多項(xiàng)式求和,要求學(xué)生選擇合適的數(shù)據(jù)結(jié)構(gòu)自己編寫算法。綜合型實(shí)驗(yàn)項(xiàng)目涉及數(shù)據(jù)結(jié)構(gòu)中多個(gè)知識點(diǎn)的重點(diǎn)內(nèi)容,要求學(xué)生自己進(jìn)行設(shè)計(jì)和實(shí)現(xiàn),主要訓(xùn)練學(xué)生綜合運(yùn)用知識的能力,協(xié)作能力和創(chuàng)新實(shí)踐能力。

(2)考核方式探索

為了培養(yǎng)學(xué)生的創(chuàng)新意識和團(tuán)隊(duì)協(xié)作精神,促進(jìn)學(xué)生之間的交流和協(xié)作,使不同水平的學(xué)生都能在大型實(shí)驗(yàn)項(xiàng)目中擔(dān)負(fù)起相應(yīng)的工作,特別設(shè)計(jì)了一套針對綜合型實(shí)驗(yàn)和探索創(chuàng)新型實(shí)驗(yàn)的考核方式和考核方法。

根據(jù)不同的實(shí)驗(yàn)項(xiàng)目采取不同的考核方式,基礎(chǔ)型和設(shè)計(jì)型實(shí)驗(yàn)項(xiàng)目安排在平時(shí)每周的上機(jī)實(shí)驗(yàn)課進(jìn)行,根據(jù)學(xué)生提交的實(shí)驗(yàn)報(bào)告進(jìn)行考核。綜合型和創(chuàng)新型實(shí)驗(yàn)項(xiàng)目較大,需要學(xué)生分工合作,共同完成,一般對學(xué)生進(jìn)行分組,每組完成一個(gè)實(shí)驗(yàn)項(xiàng)目,在課程設(shè)計(jì)環(huán)節(jié)完成,一般有兩周時(shí)間,教師根據(jù)每個(gè)學(xué)生在組內(nèi)的表現(xiàn)給出一個(gè)考核成績,項(xiàng)目完成后,再根據(jù)各組提交的項(xiàng)目報(bào)告和項(xiàng)目的質(zhì)量給出合理考核成績。這樣既激發(fā)了學(xué)生的創(chuàng)新能力,又提高了學(xué)生的團(tuán)隊(duì)合作精神。

4 結(jié)論

在研究課程的教學(xué)方法時(shí),要因內(nèi)容制宜,因?qū)W生制宜,采取不同的教學(xué)方法。本人通過近十年對數(shù)據(jù)結(jié)構(gòu)教學(xué)的實(shí)踐與探索,取得了一定的教學(xué)效果,使得學(xué)生在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時(shí),不在感覺那么抽象,理解數(shù)據(jù)結(jié)構(gòu)和算法不再那么困難,讓學(xué)生真正理解了數(shù)據(jù)結(jié)構(gòu)的作用,會選擇和使用合適的數(shù)據(jù)結(jié)構(gòu)解決問題。為學(xué)生后繼課程的學(xué)習(xí)打下良好的基礎(chǔ),乃至對學(xué)生今后從事軟件方面的工作都會提供較大的幫助。

參考文獻(xiàn):

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

[2]李治軍,廖明宏,張巖.數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)教學(xué)模式的探討[J].計(jì)算機(jī)教育,2006(2).

[3]殷人昆,陶永雷,謝若陽,盛絢華.數(shù)據(jù)結(jié)構(gòu)(用面向?qū)ο蠓椒ㄅcC++描述)[M].北京:清華大學(xué)出版社,2002.

[4]李鋒,孫莉.任務(wù)驅(qū)動式方法在離散數(shù)學(xué)教學(xué)中的應(yīng)用[J].計(jì)算機(jī)教育,2006(3).

[5]王銳.基于網(wǎng)絡(luò)的《數(shù)據(jù)結(jié)構(gòu)》新型教學(xué)模式研究[J].中州大學(xué)學(xué)報(bào),2006(10).

[6]莫家慶.《數(shù)據(jù)結(jié)構(gòu)》程序教學(xué)模式探索[J].計(jì)算機(jī)教育,2008(9).