公務員期刊網 精選范文 數據結構與算法范文

數據結構與算法精選(九篇)

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

第1篇:數據結構與算法范文

關鍵詞 算法與數據結構 理論教學 教學技巧

中圖分類號:G424 文獻標識碼: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

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

1 生動的語言,形象的比喻——知識點的理解

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

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

2 恰當的提問——課堂啟發

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

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;”這條語句的作用很多同學在初學時并沒有真正了解,只是在具體實現時生搬硬套。為了引起學生的注意,教師可以在上課時現場運行此算法,并在去掉此語句后輸入數據進行驗證。例如,給i賦一個不超出線性表長度的合法的值,這樣不影響輸出結果,提出這句是不是可有可無的問題,然后留下疑問讓學生去思考。當然,在下次解答時要對這類問題進行總結,強調錯誤處理在編程中的重要性。

3 有趣的例子——知識點的引入

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

4 編程演示——知識點的鞏固

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

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

注釋

第2篇:數據結構與算法范文

關鍵詞:數據結構;算法;教學改革;實踐

中圖分類號:G424 文獻標識碼: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

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

1 教學現狀分析

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

2 教學改革與實踐

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

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

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

[在一個單鏈表中,若刪除p所指結點的后續結點,則執行____。

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

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

5) 針對教師現場指導不到位的問題,我們采用分組教學模式。有學生組成4-6人為一組的學習小組,針對學生對所學內容不同的掌握程度,對學生區別對待,選撥知識掌握較好并有一定組織能力的優秀學生作為組長,讓組長輔導組員,讓優秀學生在幫助

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

6) 針對課程考核不完善的問題,我們采用多樣化的考核方法。在數據結構與算法課程教學過程中實用了全方位、多角度的考核方式。我們把職業素養、實際操作、技能比賽相結合,把學院期中、期末考核與認證考試考核相結合,強調項目實踐能力。考核時間由期中、期末這樣的點拉長為過程考核的線,過程性考核與結果性考核相結合。考核主體由個人變為個人與小組考核相結合,并且自評、互評與教師評價相結合。多樣化的考核讓學生更充分的利用了在校時間,促進了學生的學習。

3 結束語

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

參考文獻:

[1] 王劍, 鐘元生, 羅成, 等. 高職數據結構課程趣味教學的實踐[J]. 職教論壇, 2010(17):31-32.

[2] 申華, 肖瑩瑩. 數椐結構課程的實踐性教學模式[J]. 計算機教育, 20l2(4):103-105.

[3] 唐玉媛. 高職院校數據結構課程教學研究[J]河北師范大學學報:教育科學版, 2009,11(04):127-129.

[4] 蔡紅. 高職數據結構課程教學改革探索[J]. 中國職業技術教育, 2011(14):87-89.

[5] 陳廣. 高職“數據結構”課程教學改革研究[J]. 教育與職業, 2011(27):35-36.

第3篇:數據結構與算法范文

關鍵詞:數據結構與算法;項目導向;教學;研究;實踐

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

一、數據結構與算法課程的問題分析

1.課程難度大,學生難以適應

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

2.課程理論與實踐脫節

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

3.學生在學習過程中處于被動地位

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

二、基于項目導向的數據結構與算法課程的教學改革

1.課程內容的設計

(1)理論與實踐相結合,讓課程的應用性進一步提升

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

(2)教學內容的組織以職業能力目標為依據

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

2.教學模式和教學方法設計

(1)課程以項目為驅動、知識點為串行,開展“教學、學習、實踐”一體化的教學模式

根據學生的實際情況進行知識的建構,同時將其引入工作的過程中,在學習過程中解決問題,在解決問題的過程中對知識進行鞏固。

(2)以項目驅動、工作任務步驟為主線,組織實施教學

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

(3)參與企業生產,企業專家在生產中參與指導

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

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

參考文獻:

[1]劉曉靜,王曉英,薛媛媛,等.讓趣味教學進駐數據結構與算法課堂[J].青海大學學報,2011,29(05):95-97.

[2]熊岳山,錢程東,徐凱.數據結構課程教學中的數據抽象能力培養體會[J].計算機工程與科學,2014,36(04):27-30.

[3]李和平,龔波林,劉萬毅.深化實驗教學改革,強化技能型人才培養[J].實驗技術與管理,2013,30(02):159-161.

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

第4篇:數據結構與算法范文

關鍵詞: “數據結構與算法分析” 課程群 分層實踐 分段管控 

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

一、“數據結構與算法分析”課程的現狀 

1.課程理論性強,難度大。 

調研發現:非計算機專業近80%的學生都感覺課程難,即使計算機專業的有近50%的學生,感覺該課程難學,這種畏懼思想影響學習興趣。 

2.先導課程掌握不扎實,課程推進困難。 

教學計劃中C++程序設計、實踐和該課程分別安排在第2和第3個學期。暑假將兩門課割裂了,造成是否介紹先導課的困境。 

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

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

4.課程管控不足,課程考核不能反映學生的真實水平。 

目前課程的評定以卷面成績為主,實踐證明有些學生根本不會寫代碼但他卻能拿到很高的分數。 

二、教學改革措施 

1.課程群中相關課程開課時間的精細化安排。 

(1)開課時間安排。 

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

(2)教學內容及學時分配。 

為呼應課程群中的后續課程,該課程內容是貫穿程序設計、軟件設計模式的思想和觀點。該課程采用面向對象和抽象數據類型觀點介紹數據結構,集中體現分解、抽象和信息隱蔽的基本原則,抽象數據類型是中樞,展示信息結構轉換的三個重要階段:數學模型、抽象數據類型、數據結構與算法。其理論教學環節的安排為:數據結構的基本概念(2),表、棧和隊列(6),樹(8),散列(4),優先隊列(7),排序(12),不相交集(4),圖論算法(7),算法設計技巧(4),攤還分析(4),高級數據結構(6);課內實踐的安排:棧和隊列(2),表達式樹(2),散列、優先隊列(2),排序(2),不相交集(2),深度優先搜索應用(2),貪心、分治算法(2),AA樹、treap數(2)。 

2.課堂教學模式改革 

(1)注重啟發式教學,建立自主學習、合作學習相結合的教學模式。 

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

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

(2)標準化教學與微課程教學模式相結合。 

為了確保課程的可持續發展,課程采用項目組集體備課、集體討論、分頭準備的方式。課程組骨干教師經過多次討論后修訂了課程教學大綱,形成了標準教案、PPT及算法演示視頻。為充分利用學生的課余時間,采用課程微課程化,微課視頻一般10分鐘左右[2],選擇與生活比較貼近的數據結構(比如棧、隊列等)和基礎實踐內容微課化。 

3.項目驅動的分層實踐教學模式研究。 

教育心理學家發現:學習是累積性的,較復雜、較高級的學習是建立在基礎性的學習基礎之上的[3]。因此,課程的實踐教學以貫穿課程群的項目進行驅動,提出“注重基礎、綜合應用、提高創新”的三層次實驗教學模式,以基礎、設計、綜合三個方面的實踐能力培養為中心,全方位地培養學生的動手能力和創新能力。 

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

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

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

三、結語 

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

參考文獻: 

[1]馬賽,李方能,吳正國,卜樂平.《信號與系統》課程群的建設與教學改革探索[J].高等教育研究學報,2010.3. 

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

[3]哈斯.《數據結構》課程中使用逐步演示法進行算法教學的實驗研究[D].呼和浩特:內蒙古師范大學,2007. 

第5篇:數據結構與算法范文

關鍵詞:數據結構;物理結構;算法

中圖分類號:TP3-4 文獻標識碼: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

《數據結構》作為一門獨立的課程最早是1968年在美國的一些大學開設的;自1978年美籍華裔學者冀中田在國內首開這門課程以來,經過20余年的發展,在我國這門課程已經成為各大學計算機專業的本科主干課程,也成為非計算機類學生和研究生學習計算機的必修課程。

數據結構在計算機科學界至今沒有標準的定義。每個人根據各自的理解的不同而有不同的表述方法:

Sartaj Sahni在他的《數據結構、算法與應用》一書中將將數據對象(data object)定義為“一個數據對象是實例或值的集合”。而Clifford A.Shaffer在《數據結構與算法分析》一書中將數據結構定義為:“數據結構是ADT的物理實現。”

大多數學者認為數據結構具體指同一類數據元素中,各元素之間的相互關系,包括三個組成成分,數據的邏輯結構,數據的存儲結構和數據運算結構。

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

因此,要想更好地運用計算機來解決實際問題,僅掌握幾種計算機程序設計語言是難以應付當前眾多的復雜的課題。要想有效的使用計算機,充分發揮計算機的性能,就必須學好和掌握好數據結構的相關知識。所以,打好“數據結構”的扎實基礎,對于學習計算機其他專業知識,如操作系統、數據庫管理系統、人工智能、等都是十分有益的。

雖然數據結構這門課程對于計算機專業的學者來說極其重要,但普遍反映這門課程難學,不易理解。但我們只要掌握以下幾點,就一定會學好數據結構。

一、邏輯結構是基礎

將要處理的數據及其關系抽象成用圖形和文字描述的數學模型,這就是邏輯結構。數據的邏輯結構主要是描述數據之間的邏輯關系,而不只是數據本身。之所以稱為邏輯結構,是因為它仍然是獨立于計算機而客觀存在的。在邏輯結構中,我們主要學習每種結構的整體特征和結構內部的各數據元素之間的邏輯關系。首先是最簡單的直接邏輯關系,主要有兩種:有序相鄰和無序相鄰。其次是間接的關系,樹結構中的祖先和子孫的關系,圖中的連通子圖等等。越是復雜的邏輯結構,其關系種類越多,既有簡單的直接關系,也有復雜的間接關系。在對邏輯結構有了全面清晰的認識之后,就應該考慮這些算法的邏輯實現過程。

二、存儲結構是關鍵

存儲結構即物理結構,是邏輯結構在計算機中實實在在的表示,包括數據的表示和數據之間所有邏輯關系的表示。在對邏輯結構的特點和各種邏輯關系都十分熟悉以后,進一步就是要學習邏輯結構所對應的物理存儲結構。一般來說,每一種邏輯結構所對應的存儲結構都有兩大類:順序存儲結構和鏈式存儲結構,這是因為在計算機存儲器中可以用內存單元的相鄰關系和地址間的指向關系來表示邏輯結構中的序關系對于順序存儲結構,主要是用物理上相鄰的存儲單元來存儲邏輯上相鄰的數據元素;而鏈式存儲正好相反,邏輯上相鄰的數據元素在內存中不一定相鄰,但邏輯上相鄰的元素之間有地址映象關系。一個數據元素有相鄰關系的元素越多,其鏈式結構就越復雜,鏈中的結點的指針域也越多。

三、算法實現是目標

我們學習數據結構的目的是掌握這些常用結構的特征,以便在這些結構上實現各種基本操作,即算法。所謂算法,是指解決問題的辦法,是用計算機語言來描述計算機的解題過程。怎樣學習算法呢?這是程序設計領域一個包含很廣的問題,在這里我們只討論常見數據結構上的算法。

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

以上闡述了沿著數據及其關系的不斷抽象過程來學習數據結構及其算法的方法。由于數據結構專業性很強,除了對知識基本概念的掌握和理解之外,還需要培養一定的抽象思維能力和程序設計能力,并且理論聯系實踐,多運行程序,將算法用于實際,這樣才能真正學好數據結構。

參考文獻:

[1]嚴蔚敏,吳偉民.數據結構(C語言版)[M].北京:清華大學出版社,2004

第6篇:數據結構與算法范文

關鍵詞:數據結構;算法;程序設計語言;程序設計方法;教材

一、前言

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

“數據結構”的概念最早是由C. A. R. Hoare和N. Wirth在1966年提出。大量關于程序設計理論的研究表明:為了系統而科學地構造大型復雜的程序,必須對這些程序中所包含的數據結構進行深入的研究。

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

自20世紀70年代起,“數據結構”在西方國家的大學中,被普遍列為計算機本科的必修課程。

二、不同時期的教材

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

1.第一本教材:《數據結構》

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

2.第二本教材:《數據結構基礎》

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

3.第三本教材:《數據結構——C++與面向對象的途徑》

20世紀90年代,面向對象的語言和方法開始流行。

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

4.第四本教材:《算法與數據結構》

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

回顧三十多年來圍繞數據結構教學方面的工作,深深體會到與時俱進、精益求精地編寫教材是提高教學水平的基礎和關鍵。

三、數據結構教材需要與時俱進

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

1.教材應該正確反映計算機科學的發展水平

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

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

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

第三本教材《數據結構——C++與面向對象的途徑》是在面向對象的語言和方法開始流行的20世紀90年代,采用面向對象的設計方法講解數據結構的內容。參考Budd的工作,由簡到繁、從易到難,系統地引入各種抽象數據類型的概念和實現,并在全書最后,用類圖方式總結了各種經典的抽象數據類型在教材中的相互關系。

最后一本《算法與數據結構》參考了Kurt Mehlhorn等人的觀點,把“數據結構”定義為“抽象數據類型的物理實現”。提出“物理實現”的意圖是強調本課程關心的“實現”應具體到可以用計算機的兩個最重要的物理量(主機的運行時間和內存的存儲空間)來權衡。這一觀點突出了抽象數據類型在數據結構教學中的地位,包含了數據結構與面向對象技術的內在聯系。使讀者可以從更高的層次理解數據結構與算法的關系,也容易解釋數據的邏輯結構、存儲結構與運算的三者關系。

后兩本教材都反映了20世紀90年代的理解水平。其共同之處是:都強調了數據結構是“抽象數據類型的實現”,前一本使用的是面向對象的實現方法,而后一本為了突出講解實現的物理效率,沒有采用面向對象的方法。

2.教材內容既要相對穩定又要逐步更新

需要指出的是,盡管計算機科學的發展使得數據結構的地位和作用產生了許多變化,但是數據結構學習的目的并沒有大的改變。所以教材的內容是基本穩定的。

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

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

第三本由于采用了面向對象的方法,在內容上做了較大調整。增加了面向對象的方法入門和優先隊列。全書共分12章:第一章,緒論;第二章,C++與面向對象初步;第三章,字符串,本章定義了一種更安全可靠的字符串類型,同時也以字符串做例子,討論數據抽象和封裝的有關問題;第四章,向量,本章建立了一種安全可靠的向量數據類型,還給出了幾個主要的向量排序算法;第五章,動態數據結構——鏈表,主要討論了各種常用的鏈表結構及其實現方法;第六章,棧和隊列,介紹了棧和隊列的抽象概念、具體實現及其應用;第七章,樹和二叉樹,介紹了樹和二叉樹的概念,重點介紹二叉樹的實現及樹結構用于快速檢索的一些技術;第八章,優先隊列,主要介紹了堆和斜堆的概念以及通過它們實現優先隊列的方法;第九章,集合和字典;第十章,散列表;第十一章,圖;第十二章,文件。在附錄中用類圖方式給出本書介紹的主要抽象數據類型及其相互關系圖。

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

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

3.算法描述語言要配合教學的需要

數據結構的教學內容原本獨立于任何一種特定的程序設計語言,但是這門課程的教與學又離不開程序設計語言的支持。在這里語言是一種教學的工具。工具的選擇應該有利于表達數據結構的基本思想與算法的設計方法,有利于算法的分析與設計,并且簡單明了,便于老師講學和學生理解。前面講的四本教材,因為在不同的時期創作,根據不同的學術觀點,針對不同的讀者,所以也選擇了不同的算法描述語言。

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

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

第三本教材采用面向對象的設計方法講解數據結構的內容。所以首選當前國內最流行的面向對象的程序設計語言C++來描述。學生在學習數據結構的同時,又加深了對于面向對象方法的理解,提高了使用C++語言編程的能力。

使用了良好的面向對象的C++描述,程序表面的可讀性很好,但內涵十分豐富,例如各種構造函數和析構函數的自動選擇和運行,各種繼承和多態功能的動態處理等,所以要具體分析一個獨立算法的時間和空間的代價往往比較困難。而這些內容恰恰是學習數據結構的一個重要目標,也是許多專業學生學習計算機的主要因素。加上教學計劃安排的課程順序、學時要求等因素,所以我們在編寫第四本教材時選擇了C語言描述。

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

四、精品教材應該精益求精

如前所述,我們希望所編的教材與時俱進,跟上計算機科學的發展步伐,使得每本教材獨具特色、體系完整、結構合理。與此同時,著者對教材的每個重要環節,包括概念的定義、思想的陳述、難點的分解、算法的設計與分析方法以及教學的方法甚至書面排版的格式等,都經過認真的考慮和細心的安排。下面舉幾個簡單的例子,從中可見一斑。

1.概念準確,語言流暢

對于基礎課的教材,概念準確是十分重要的。然而由于計算機科學十分年輕,發展又快,使得許多概念在文獻中沒有統一的定義。例如“文件”和“記錄”這兩個概念在外存的討論和內排序中都使用,但是意義不同;另外關于二叉樹的“高度”和“深度”的定義,不同的數據結構教材可能不同;關于“滿二叉樹”的定義,不同教材的差別可能很大,等等。

為了盡可能給出所有概念的準確定義,我們花費了大量時間,反復查閱了多種不同的文獻,包括數據結構和離散數學的各種教材,經過認真分析、比較,給出我們的理解,在教材最后整理了所有名詞的索引。并且在第一次出現的位置注釋出可能不同的定義。

語言流暢是提高教材可讀性的基礎。我們的幾本教材多數都是從校內試用講義開始,反復修改,出版后也再版甚至三版,對于局部小修改有的就利用加印的機會進行。其中修改最多的是語言文字,包括標點符號的修改,通過潤色使其更加準確、流暢。應該承認,廣大學生的參與為本書文字的加工作出了很大的貢獻。

2.重點突出,難點講透

數據結構的內容十分豐富,難度也比較大。著者的主要工作是準確講解該講的內容,把重點要講透徹,把難點加以分解,使得讀者容易學習和理解。數據結構教學的重點是講解經典抽象數據類型的各種實現方法;難點則是算法的設計、實現和分析比較。

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

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

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

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

我們知道程序是沒有“標準答案”的,但是高水平的程序員能夠根據語言的風格和編程的藝術,編寫出更美、更能體現算法魅力的藝術珍品。我們為此盡力而為。

4.利用多種方式,提高學習興趣和教學質量

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

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

為幫助學生深入理解算法與數據結構的精髓、提高學生的學習興趣,我們還在北京大學教學網上開辟專欄,引導學生進行廣泛討論,受到學生的熱烈歡迎。通過這些討論,大大豐富了學生的知識范圍,激發了學生自主學習的熱情,也彌補了書面作業和上機作業的局限。

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

參考文獻:

[1] 許卓群,張乃孝,楊冬青等. 數據結構[M]. 北京:高等教育出版社,1987.

[2] 張乃孝等. 數據結構基礎[M]. 北京:北京大學出版社,1991;臺灣儒林出版公司(繁體版),1992.

[3] 張乃孝,裘宗燕. 數據結構——C++與面向對象的途徑[M]. 北京:高等教育出版社,1998第一版,2001修訂版.

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

[5] 張乃孝. 算法與數據結構(第2版)學習指導與習題解析[M]. 北京:高等教育出版社,2009.

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

[7] Horowitz E, Sahni S. 數據結構基礎[M]. 程惟寧譯. 北京:國防工業出版社,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] 張乃孝,于曉迪. 有關C語法形式化中若干問題的探討[J].計算機工程與應用,1985(2):1-5.

[15] 張乃孝. 數據結構體系分析[J]. 計算機研究與發展,1988,25(5):36-40.

[16] 張乃孝. 知識結構的三叉樹表示及邏輯推理的實現[J]. 計算機學報,1990,13(1):32-41.

[17] 張乃孝. 三叉樹結構及其實現[J]. 計算機研究與發展,1993,30(1):50-54.

[18] 張乃孝,蔣凌霄. ALL———算法與數據結構教學小語言[J]. 計算機科學,2003,30(11):178-180.

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

第7篇:數據結構與算法范文

關鍵詞:數據結構;教學改革;應用

中圖分類號:TP311文獻標識碼: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

《數據結構》是計算機應用技術、軟件技術、網絡技術等專業的重要專業基礎課,是計算機科學的算法理論基礎和軟件設計的技術基礎,也是我校計算機大類專業教學改革的重點課程之一。

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

在高職《數據結構》教學改革中,如何更好地進行教學,取得好的教學效果,是我們一直探索的問題。

1 《數據結構》學習中的問題

1.1 高職的性質和特征

我們《數據結構》教學的對象是高職學生,而高職教育就是就業教育。計算機專業,如軟件專業,其出口是符合企業崗位入門需求,具有相當于一年軟件開發經驗的軟件開發工程師(資格證書)[4]。就業教育的特征是以就業為導向,以就業崗位的需求為基礎,明確培養目標和教學的程度。以實用技能為核心,選擇課程內容,學以致用。以動手能力為突破點,培養自學能力、解決問題能力。以項目經驗為學習目標,了解行業規則。《數據結構》也應緊緊圍繞這一特征展開教學。

1.2 《數據結構》教學的狀況

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

2 《數據結構》教學改革重在應用

2.1 《數據結構》教學理解

數據結構是指數據間的相互關系。具體到計算機環境,一種結構自然地聯系著作用在這種類型的數據上的運算,為了執行運算,必須把數據以某種方式存儲在計算機中。因此,我們認為,數據結構就是由某種邏輯關系組織起來的一批數據,按一定的存儲方法被存儲于計算機中,并在這些數據上定義一個運算的集合[6]。

通常,算法的設計取決于數據的邏輯結構,算法的實現取決于數據的存儲結構。每種數據結構從邏輯結構、存儲結構和操作運算等方面進行教學,全篇從集合、線性結構等基本數據結構入手,實現層次結構和網狀結構等較復雜結構教學,這是《數據結構》教學的共同切入點[7]。

2.2 高職《數據結構》教學應發生變化

在《數據結構》教學改革中,我們研究認為,由于高職自身的特點和辦學的現狀,作為高職《數據結構》的教學,其內容和要求應有所變化,側重點適當改變,理論的教學在內容和課時上應減少,課程的重點應轉移到數據結構的應用上。最終的目的是學生應能夠把基本的數據結構作為對象來看待,能夠把常用的數據結構與面向對象的程序設計方法聯系起來,進而掌握常用的線性表、堆棧、隊列、二叉樹、向量等數據結構及各種排序、查找算法應用[8],達到高職學生學了《數據結構》能夠在系統開發中應用數據結構的目的。

具體地說,通過課程的教學,學生能夠具備常用的基本數據結構主要算法的應用能力;具備常用的排序、檢索和索引算法應用能力;具備在進行程序設計、調試、測試的課程項目訓練過程中,能夠合理地組織數據、有效地表示數據、有效地處理數據,書寫的程序結構清楚、正確易讀,提高程序設計的質量等能力[6]。

所以,教學重點也應隨著相應改變為:基本數據結構在解決實際問題中的應用;基本的算法策略在解決實際問題的應用;新興數據結構的相關問題;新興算法的相關問題及實踐;經典問題的經典算法;典型系統的計算機模擬;需自行設計數據結構和算法來解決的實際問題[9]。

算法描述語言采用廣為程序員所使用的面向對象的語言,使得ADT (抽象數據類型)的概念得到更自然的體現,更本質地體現數據結構的思想,而且所定義的數據結構類能夠方便地被重用[6]。

3 《數據結構》教學改革實踐

以線性表為例闡述《數據結構》教學改革的思路。《數據結構》線性表在全篇中處于基礎、入門的地位。我們在教學改革中,按照先講清概念,再結合圖像、動畫理解邏輯結構和存儲結構,重點講解線性表的應用的方式進行教學,有意識地弱化理論性,強調動手能力的培養。講解應用時,采用了Java語言作為描述語言,因為Java語言提供了許多預定義好的和已經實現的標準庫,能夠直接全面支持數據結構原理[10]。

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

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

所以,線性表無論是采用何種存儲結構,對外的接口總是不變。ArrayList類、LinkedList類都是List接口的實現。List接口中void add(int index,Object element)在指定位置index上添加元素element,Object remove(int index)刪除指定位置上的元素,Object get(int index)返回List中指定位置的元素,int indexOf(Object o)返回第一個出現元素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( )。

該處數據結構應用舉例為模擬撲克發牌。采用ArrayList實現。首先生成52張撲克牌,然后用Collections.shuffle( )方法打亂牌的順序,這個操作即模擬撲克洗牌操作,之后根據運行參數進行模擬撲克發牌。發牌方法dealHand(List deck,int n),參數n指明每人發牌張數。部分代碼如下:

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

int deckSize=deck.size();

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

List hand=new ArrayList(handView);

handView.clear();

return hand;

}

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

int numHands=4;//發牌人數

int cardsPerHand=11;//每人發牌張數

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));//發牌

當我們將

for(int i=0;i

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

增加在

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

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

這樣的數據結構講解,學生特別有興趣,在不知不覺中,理解了數據結構的概念,學會了線性表的應用,達到了《數據結構》課程的教學目的。

4 結束語

《數據結構》課程是我校的精品課程,通過多年教學改革,我們做了許多有益的探索,學生通過共享教學改革的成果,對《數據結構》課程的學習收到了很好的效果。通過不斷努力探索,我們將《數據結構》課程的教學從理論較重,改變為注重應用,走出一條適合高職學生的教學之路。

參考文獻:

[1] 馬秋菊.數據結構[M].北京:中國水利水電出版社,2006.

[2] 唐策善,黃劉生.數據結構[M].北京:高等教育出版社,2004.

[3] 嚴尉敏,吳偉民.數據結構[M].北京:清華大學出版社,2000.

[4] 全國高等院校計算機基礎教育研究會[M].高職院校計算機教育經驗匯編. 北京:中國鐵道出版社,2007.

[5] 劉建國.高職《數據結構》課程教學方法改革探討[J].北京市經濟管理干部學院學報.2007.6:78-80.

[6] 張銘,等.數據結構課程的知識體系和教學實踐[J].計算機教育.2004.3:89-91.

[7] 帥訓波,等.數據結構間的縱橫聯系,計算機與信息技術[J].2007.8:39-41.

[8] 王志華,等.高等職業教育中《數據結構》課程建設研究[J].忻州師范學院學報.2007.4:59-61.

[9] 李治軍,等.數據結構與算法課程設計教學模式的探討[J].計算機教育.2006.2:54-57.

第8篇:數據結構與算法范文

[關鍵詞]數據結構;算法;數據元素;系統應用

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

1 引言

隨著計算機技術日新月異的發展,程序可視化教學在教育和教學中已經顯示了明顯的優越性。所謂可視化教學,是指在計算機軟件與多媒體技術的幫助下,將一些抽象、深奧、復雜的事物以及發展過程,用仿真化、虛擬化、實體化的方式,在教學方法中顯現出來。可視化教學應用方便,可以使計算機學習者直觀地觀察、體驗并利用這些可視化的知識模型,從而使計算機學習者較為輕松地進行課程的學習,對計算機學習者的認知能力與創新能力都會有較大的提升。

可視化教學應用于數據結構算法教學當中,可以改變傳統教學方法中的枯燥乏味局面,吸引計算機學習者的注意力。可以將文字、數據、圖片、源代碼等其它多媒體動態地融合在一起,豐富算法的執行過程。可以讓計算機學習者體會在大量不同的數據結構下,算法執行效率的差異。計算機學習者也可以充分的利用自己的課余時間進行自我學習,通過可視化教學軟件研究算法的執行過程,培養計算機學習者自主學習的能力。

2 數據結構與算法系統的需求分析

傳統的數據結構與算法教學方法中,有些算法的執行過程比較抽象,教師為了講解一個算法往往需要輔助大量的圖形示例。常規的板書和一般的幻燈投影授課均難以有效地展示這種抽象性和動態性,容易造成教學的低效和學時膨脹。有一些學校看到了弊端,苑⒊雋聳據結構教學網站供計算機學習者學習和交流;也有一些學校則開發出了可視化數據結構教學演示系統,將數據結構中算法的執行過程直觀展示在用戶面前。整體上看,這些系統在一定程度上促進了用戶的學習,但還存在著一些不足,如系統以“教”為中心而設計,缺乏以用戶為中心的人機交互理論的指導,學習者與軟件的交互機會少且單一。因此,一個供用戶自主設計算法,在實踐環節上進行創新,提出自己的見解和設計,并得以驗證,從根本上和底層次上深化對數據結構與算法的理解的學習平臺的苑⒂任重要,互聯網支撐的數據結構與算法學習系統將解決這個問題。系統能夠讓用戶熟悉數據結構課程的核心理念,掌握相關算法內部的運行機制。本文在研究數據結構模塊的基礎上,將開發一個數據結構與算法學習系統,聯動演繹各數據結構模塊是如何有機結合的,并為用戶提供自主設計算法的接口,這也是本系統區別于其他系統的一個創新點。

本文提出的數據結構與算法學習系統的設計目標為:系統良好的交互界面,包含數據結構各功能模塊的算法演示,各模塊詳細信息查看,利用計算機圖形界面技術,提供良好的用戶界面。系統實現一系列數據結構的算法,用戶能實時查看算法圖形動態演示過程,并提供各算法和數據結構的詳細中間結果信息,幫助用戶進一步理解算法的執行過程和效率。系統不僅可以為用戶展示數據結構算法的執行過程和中間結果,還提供編程接口讓用戶實現自定義算法,并對該算法進行測評,以圖形界面的方式展示在用戶面前。系統具備良好的穩定性,采用了多種安全機制確保服務器的穩定運行,保證了系統的安全可靠。充分運用面向對象的設計思想來設計系統模塊,使其具有良好的擴展性,方便系統的后期維護和擴展。

3 數據結構的系統總體架構

系統采用典型的三層架構作為開發模型,本系統的三層架構主要劃分為客戶端、服務器端和服務資源層。系統客戶端是一個瀏覽器,顯示用戶的使用界面,不同的用戶通過瀏覽器向服務器端發送請求,然后接收服務器的返回信息展示在用戶界面上。服務器層位于系統的服務器端,包含了數據庫服務器和應用程序服務器,它提供了數據支持,實現了算法引擎和代碼測評,算法引擎提供了經典算法的演示和用戶自定義算法演示,代碼測評負責對用戶提交的源代碼進行測試,并生成y試數據。服務資源層位于系統的服務器,它提供用戶經典算法庫和可視化類庫,經典算法庫包含了相關的代碼以及算法演示的全過程,可視化類庫提供用戶的一些畫圖操作,讓圖形界面的演示更為美觀。

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

在本系統的三層架構中,利用基于面向對象的方法進行系統的苑,按照系統需求對服務器做了不同模塊的劃分,主要分為三個部分。分別是數據庫、算法引擎和代碼測評程序。數據庫為用戶提供數據支持,能夠滿足用戶對數據的增加、修改、刪除、更新等操作。算法引擎負責對算法進行解釋,給用戶提供算法的演示功能,并能夠將用戶按照系統要求編寫的代碼轉變成圖形方式展示在用戶面前。代碼測評程序主要對用戶提交的源代碼進行完整的測評,其中包括源代碼編譯,源代碼測試和程序監控等。對于服務資源層,包括兩大部分,分別是經典算法庫和可視化類庫。經典算法庫包含了數據結構九大章節的數據結構模型和相關的算法,供算法引擎調用,在客戶端上展示出來。可視化類庫提供了一系列的數據結構畫圖操作,使算法的演示過程顯得生動形象。

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

參考文獻

[1] 在線學習系統的設計與開發[J].李萍.電子世界.2013(13).

第9篇:數據結構與算法范文

關鍵詞:數據結構;理論教學;實踐教學;教學改革

中圖分類號:TP311.12-4 文獻標識碼:A 文章編號:1007-9599 (2012) 17-0000-02

1 課程內容

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

課程的目標是使學生掌握數據基本的邏輯結構和存儲結構、一些典型的數據結構算法及程序設計方法和技巧,要求學會分析數據對象特征,掌握數據組織方法和計算機的表示方法,為數據選擇適當的邏輯結構、存儲結構以及相應的處理算法,要求具備算法分析的基本技術和能力,并培養良好的程序設計風格,掌握開發復雜、高效程序的技能。

2 理論教學方法與手段的探索

遵循以學生為主體,以教師為主導的教育理念,針對理論教學和實踐教學的不同特點,合理進行教學設計,推進教學方法和教學手段改革。課堂上引入啟發式教學,充分發揮學生的學習主動性,重視自學能力的培養,引導學生積極思考,活躍課堂氣氛,適當壓縮授課時數, 留給學生更多的思維空間和自學空間,增加學生閱讀參考書、科技文獻和寫讀書報告的時間。數據結構的教學策略:

(1)激發學生的學習興趣

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

(2)教學內容的有機組合

在現有教學大綱的內容的基礎上,不斷吸收新知識、新內容,補充考研試題。對教學內容的安排重新進行拆分和重組,突出重點、細化難點。運用面向對象的學習方法講解數據結構,每一種數據結構的學習方法都是相似的,重點介紹數據結構的邏輯關系、基本操作和在不同存儲方式下基本操作的實現,介紹數據的邏輯結構和物理存儲之間的關系,及物理存儲在類C語言中的描述,數據結構的主要內容可用以下的體系結構來表示。

學生在了解了數據結構課程的核心內容后,算法的實現就不難理解了。例如:我們在講授線性表的復雜操作有序表的合并時,先從邏輯上看是如何實現的,介紹算法設計思想,然后講解兩種實現算法:順序存儲方式和鏈式存儲方式下的算法,讓學生自己比較兩種算法,加深理解。

(3)雙向互動式的教學

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

(4)注重各知識點的有機統一

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

(5)運用現代化教學手段

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

3 實踐教學的探索

實踐教學是數據結構課程教學的一個重要組成部分,對本門課程的學習起著至關重要的決定。通過實踐教學,讓學生能夠學會運用書上學到的知識來解決實際問題,培養軟件工作所需要的動手能力。

實踐活動通過兩個環節來實現,第一個環節課程實驗,較偏重于對課程內容的理解。實驗講義完備,開出率100%。保證了學生理解和掌握課程的基本理論和基本概念,又提高他們的動手能力。第二個環節課程設計實習,讓學生有機會自己提出實驗項目、實驗方案,在教師指導下按其方案進行實驗,最后讓學生自己得出應有的結論,進一步培養學生的學習興趣和實踐動手能力,從而激發創造力,也初步實現了對學生進行一整套軟件工作規范的訓練和科學作風的培養。

(1)實驗教學內容

依據實驗教學大綱,合理安排實驗教學內容。我在教學時把實驗項目按照不同內容和難度分成三種類型:基礎型實驗項目、設計性實驗項目、和綜合性和創新型實驗項目,實現了實驗教學內容的創新。基礎型實驗項目安排在各個章節中,主要圍繞數據結構基礎知識內容,目的是讓學生掌握各種基本數據結構的邏輯關系和存儲方式,通過實驗驗證算法,理解數據結構的基本操作的定義和實現。設計型實驗項目是在基礎型實驗項目的基礎上,讓學生自己設計數據結構和算法,提高學生解決問題的能力和良好的編程能力。例如一元多項式求和,要求學生選擇合適的數據結構自己編寫算法。綜合型實驗項目涉及數據結構中多個知識點的重點內容,要求學生自己進行設計和實現,主要訓練學生綜合運用知識的能力,協作能力和創新實踐能力。

(2)考核方式探索

為了培養學生的創新意識和團隊協作精神,促進學生之間的交流和協作,使不同水平的學生都能在大型實驗項目中擔負起相應的工作,特別設計了一套針對綜合型實驗和探索創新型實驗的考核方式和考核方法。

根據不同的實驗項目采取不同的考核方式,基礎型和設計型實驗項目安排在平時每周的上機實驗課進行,根據學生提交的實驗報告進行考核。綜合型和創新型實驗項目較大,需要學生分工合作,共同完成,一般對學生進行分組,每組完成一個實驗項目,在課程設計環節完成,一般有兩周時間,教師根據每個學生在組內的表現給出一個考核成績,項目完成后,再根據各組提交的項目報告和項目的質量給出合理考核成績。這樣既激發了學生的創新能力,又提高了學生的團隊合作精神。

4 結論

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

參考文獻:

[1]嚴蔚敏,吳偉民.數據結構[M].北京:清華大學出版社,2002.

[2]李治軍,廖明宏,張巖.數據結構與算法課程設計教學模式的探討[J].計算機教育,2006(2).

[3]殷人昆,陶永雷,謝若陽,盛絢華.數據結構(用面向對象方法與C++描述)[M].北京:清華大學出版社,2002.

[4]李鋒,孫莉.任務驅動式方法在離散數學教學中的應用[J].計算機教育,2006(3).

[5]王銳.基于網絡的《數據結構》新型教學模式研究[J].中州大學學報,2006(10).

[6]莫家慶.《數據結構》程序教學模式探索[J].計算機教育,2008(9).

主站蜘蛛池模板: 色妞妞www精品视频| 亚洲午夜精品久久久久久浪潮| 一级毛片国产**永久在线| 老子影院我不卡| 日本三人交xxx69| 国产午夜精品一区二区三区不卡| 久久综合丝袜日本网| 黄页网站在线观看免费| 李老汉的性生生活2| 国产无遮挡又黄又爽网站| 亚洲av永久中文无码精品综合| 亚洲精品无码高潮喷水在线| ts20p1hellokittyshoes| 男人的天堂av网站| 夜来香高清在线观看| 亚洲精品成人a| 521色香蕉网站在线观看| 精品欧美一区二区3d动漫| 成人中文字幕一区二区三区| 午夜国产精品久久久久| japanese日本熟妇多毛| 波多野结衣被躁五十分钟视频| 国内最真实的XXXX人伦| 亚洲天堂电影在线观看| 天天视频天天爽| 日本大片在线看黄a∨免费| 国产av无码久久精品| yellow日本动漫高清小说| 深夜爽爽动态图无遮无挡| 国产精品无码av一区二区三区| 四虎成人永久地址| 一区二区三区欧美在线| 浪小辉chinese野战做受| 国产精品嫩草影院线路| 九九九国产精品成人免费视频| 谷雨生的视频vk| 小嫩妇又紧又嫩好紧视频| 亚洲欧美精品中字久久99| 午夜影院小视频| 无码欧精品亚洲日韩一区| 免费无毒片在线观看|