時間:2023-02-07 11:43:22
導言:作為寫作愛好者,不可錯過為您精心挑選的10篇數據結構課程設計,它們將為您的寫作提供全新的視角,我們衷心期待您的閱讀,并希望這些內容能為您提供靈感和參考。
一、背景
數據結構課程作為計算機專業的核心基礎課程,學好數據結構才能為許多后續課程的學習打下良好的基礎。課程要求學生通過理論與實踐學習之后,能掌握各種數據結構以及與之相關的算法的知識,并將這些知識應用到對具體實際問題的分析中。參照ACM/IEEE-CS的《ComputeCurricula2001》報告中提出的數據結構課程內容主題[1]有幾十個,即課程的教學內容多,覆蓋面廣,而且由于很多重要知識的理論性較強,特別是一些難點知識比較抽象而難以理解,所以數據結構是被學生廣泛認為難學、難懂、難實踐的課程。學習的過程通常由“信息傳遞”和“吸收內化”兩個階段構成,采用信息化技術手段開展以微課、慕課、云課程、翻轉課堂為代表的數字化教學是實現知識信息傳遞的有效手段[2]。微課一般是在課堂教學之外,由學生主動參與的輕量化、碎片化、結構化的學習方式,通過良好的課程結構設計,結合短視頻、動畫、語音等手段,能有效地將抽象的知識轉為形象化的內容,從而高效促進學生“吸收內化”的進程。
二、微課及設計方法
微課(Microlecture),是指運用信息技術按照認知規律,呈現碎片化學習內容、過程及擴展素材的結構化數字資源[3]。微課課程平臺是學生在課堂教學外的細化教學知識,實現“自主學習”和“個性化學習”的環境,在微課平臺上,學生可按需選擇學習,既可查漏補缺,又能強化鞏固知識,是課堂學習的一種重要補充和拓展。從邏輯結構角度看,一個完整微課課程通常由一系列微課單元構成,一個微課單元除了用來講述該教學主題知識點的課堂教學短視頻及與短視頻配套的描述或解釋的短文這一最重要的核心部分之外,通常還包含與該教學主題相關的練習測試及師生交流等輔教學資源,這些資源共同組成了一個主題式、半結構化的微課教學單元。一個設計良好的微課單元通常具備主題選題精準和內容組織合理的特點。選題精準就是一個微課單元是一個教學主題,在設計這個主題時,要注意這個選題所覆蓋的知識或原理應較為簡單[4],其涵蓋知識點可選2—3個;內容組織合理就是知識內容的組織和分解簡明,將一個教學主題核心知識點和目標分解為若干個子知識點或步驟,這個核心知識點的分解最好只要一層邏輯,盡量不要在子知識點下再分解。
三、數據結構微課設計過程
數據結構課程要求學生能合理選擇數據結構,并把與問題相關的數據組織起來實現準確和高效計算處理,所以數據結構的核心概念由數據的邏輯結構及其定義在邏輯結構上的運算、數據的存儲結構以及運算的實現、運算算法的復雜度分析三個方面構成,而且在課程中數據的結構又與其相關的算法纏繞在一起[5],使得在微課設計時所做的知識點分析必須循序漸進地展開,采用由淺到深、由易到難的步驟,再從這個課程的知識體系出發,選取其中的重點、難點、疑點、考點、易錯點、熱點和擴展點,設計和制作一系列既相對獨立,又環環相扣的微課主題單元[6]。
(一)知識點分析與微課主題單元劃分
設計數據結構課程的微課時,首先按照課程內容的知識結構來完成各個主題單元的設計和劃分。我國的大部分數據結構與算法的教材[7-8]把課程的知識體系對應到教學內容之后,分成了基本概念和基礎知識、線性數據結構及相關算法、樹形結構及相關算法、圖結構及相關算法四個教學組成部分,這四個組成部分又可分別分成若干子模塊,每個子模塊又可再分成若干主題單元;劃分方法可以使用表格或思維導圖來協助完成。思維導圖是表達發散性思維的有效圖形思維工具,能直觀地把各級主題的關系用相互隸屬與相關的層級圖表現出來[9]。借助思維導圖,我們能有效完成微課課程知識結構的設計工作,圖1是我們設計線性數據結構及相關算法部分的微課主題單元思維導圖。
(二)微課主題單元設計
中圖分類號:TP311.12 文獻標識碼:A 文章編號:1009-3044(2013)22-5101-02
數據結構是計算機科學與技術專業的一門必修的專業基礎課,是計算機理論與技術的重要基石。該課程的主要特點是實踐性很強,不僅要學習基本理論知識,更要注重上機實踐,通過上機實踐驗證算法的正確性,掌握和鞏固所學理論知識。該課程的主要目的是通過學習,使學生學會分析研究計算機加工的數據結構的特性,以便為涉及的數據選擇適當的邏輯結構、存儲結構及相應的算法,并初步了解對算法的時間分析和空間分析技術;另一方面,通過算法設計和上機實踐的訓練,培養學生的數據抽象能力和程序設計的能力,為后續課程,特別是軟件類課程打下堅實的基礎。
數據結構課程要求學生掌握各種常用數據結構的邏輯結構、存儲結構,及相關操作的算法,而學生在算法設計或程序設計方面還不具備足夠的技巧,因而會感到難以理解和掌握。學生理解教材上的基本概念并不難,然而,他們在解決具體問題時就會感覺到力不從心,特別是對那些有一定難度的算法設計題更顯得無從下手[1-2]。因此,培養學生的學習興趣和自信心,提高其學習的主動性、創新性及應用能力,是數據結構課程教學中的重要任務。
數據結構課程一般是在大學二年級上學期開設,而數據結構課程設計在大學二年級下學期開設。作為一個重要的實踐教學環節,該課程是數據結構課堂理論教學的延續與補充,其基本目標是運用所學知識,對實際問題進行分析,選取合適的數據結構,獨立地進行設計相對應的存儲結構,并用算法加以實現,從而解決所提出的問題[3-4]。在此過程中,進一步鞏固、加深和融合所學的專業課程知識,鍛煉學生獨立思考的能力、分析問題和解決問題的能力、綜合設計能力、開拓創新能力、自學能力,以及團隊協作能力等。因此,課程設計對全面提高學生綜合素質具有重要意義。
筆者在多年的教學實踐中體會到,數據結構課程設計的教學要循序漸進,如何讓學生理解課程內容與較好地解決實際問題兩者相結合是本門課程教學的主要目標。為了讓學生準確理解并鞏固所學的基本概念、原理和方法,將所學的基本知識、基本技能用于解決實際問題,達到具備今后軟件了開發工作所需的能力,最重要的是讓他們勤加苦練。經過循序漸進地練習,使學生掌握更多的程序設計技巧和方法,提高他們分析、解決問題的能力,培養他們的團隊協作精神。接下來,筆者就如何激發學生的興趣,提高數據結構課程設計的教學效率和效果,闡述幾點感受與體會,與同行一起探討。
1 課程設計教學過程中的體會
數據結構課程設計比教學實驗復雜一些,涉及的深度更廣些,而且更加實用一些。教學過程中,教師根據學校的特點和教學計劃選擇相應的課程設計內容,幫助學生系統掌握數據結構這門課的主要內容,從而順利完成教學任務。為實現課程教學目標,筆者結合自身的教學經驗和研究成果,就教學過程中課程設計內容的選題,實施方法,以及評價標準等方面談談自己的一些體會。
1.1 課程設計內容的選題
數據結構課程設計應遵循以下原則:堅持以能力為本位,以學生為主體,教師角色轉換為倡導者。選題時盡量達到以下特點:新穎性、實用性、難度適中、各有所需。
一個好的選題既可以反映課程設計大綱的要求,又能反映本學科新技術的發展前沿,還能通過本課程設計訓練,培養學生分析問題、解決問題的能力,從而掌握數據結構這門課程的主要內容。首先,選題要新穎,因為新穎的選題能進一步激發學生的學習興趣,調動其學習的積極性。其次,選題應具有實用性,接近實際工程的需要,引導學生根據需求分析,利用所學知識去解決與日常生活中密切相關的問題。再次,選題難易程度要適中。課程設計的內容基本上能讓大多數同學接受,難度過大會讓學生產生一種消極,甚至是抵觸的情緒;難度過于簡單也同樣達不到預期目標。最后,選題范圍要足夠廣泛,讓不同層次水平的學生都有問題可想,為學生提供發揮其創新性思維的平臺;同時,工程大的選題在一定程度上更能鍛煉學生獨立思考的能力和團隊協作能力。對某些課程設計提出部分需要改進或進一步完善的要求,供那些學有余力的學生來拓寬自己的設計思路,提高自身的解題能力及水平。當然,學生也可以自主設計一些有挑戰性的題目。
1.2 課程設計的實施方法
本課程是在保證基礎理論教學質量的前提下,進一步加強學生解決實際問題的動手實踐能力的培養。根據課程設計的實際情況,給出一些具有一定規模的問題,并對課程設計內容做系統安排,具體實施過程如下。
1.2.1 分組
以設計小組形式,每3~5人組成一組,同一班級自由組合;如需要跨班組合,可向指導教師提出申請。每個小組選出一名基礎較好且具有一定組織能力的學生擔任組長,組長負責本小組的選題,系統模塊劃分和任務安排,使每位小組成員負責一部分功能的實現。
1.2.2 選題與分工
各小組成員共同協商選擇合適的題目,然后進行分工。小組之間也可以相互合作,將各自的系統模塊進行整合,以解決更大規模的問題。指導教師根據各個學生的實際情況作適當調整,保證工作量的合理分配,以確保各小組設計工作的順利進行。
1.2.3 定期檢查
定期檢查或抽查每個學生的完成情況,了解各個小組的課程設計進展;督促學生積極思考,比如,描述要解決的問題,根據操作對象選擇相應的數據結構,建立模型,定義抽象數據類型,畫出算法流程圖,引導他們鍛煉自己的分析問題和解決問題以及編程實現的能力。
1.2.4 提交實驗報告
實驗報告的正文必須至少包括以下內容:
1)問題描述:根據自己的理解,描述選題要實現的功能。
2)數據結構:為處理所需要的功能,自己設計數據結構,包括各自完成的有關數據類型,操作的定義,以及存儲結構。
3)算法描述:根據問題的要求和所設計的數據結構,描述算法過程。
4)效果與測試情況:給出系統的測試情況與最終效果,可通過截取一些界面用于解釋說明。給出測試數據結構的使用手冊,以及完成其他數據類型的測試與測試報告。
5)分析與討論:分析所采用算法的優缺點,時間復雜度,算法實現過程中遇到問題,所采用的解決方法,自己提出的算法的改進方案。本課程設計的不足之處,改進思路,以及實驗過程體會。
6)參考資料:文中所引用的參考資料撰寫格式參照國家標準(GB-T 7714-2005)。
7)致謝:感謝在完成本課程設計報告過程中對自己提供幫助的個人/集體。
8)附錄:附上結構完整的程序,帶有詳細注釋的源程序清單。
1.3 課程設計的評價標準
課程設計完成后,應對每位學生提交的課程設計報告進行評價,可分為小組互評和指導教師評價兩個過程。
1.3.1 小組互評
小組互評包括自評和組長評價兩部分。首先,每位組員根據各自參與程度、完成的工作量、效果在小組內自評,自評分值占50%。其次,組長在報告封面上描述組內每位組員的具體工作,并為組內各成員打分,組長評分值占50%,同時規定:組長100分,排名靠后的組員的成績與前一位組員的成績分數差距為6~10分。課程設計采用分組形式的宗旨是鼓勵合作,但反對掛名。
1.3.2 指導教師評價
小組互評之后,由指導教師組織學生進行課程設計報告的現場答辯,答辯過程包括:以小組為單位進行現場演示,解答教師或其他組的同學所提出的問題。現場演示檢查可以提高學生對課程設計方法的理解,鍛煉他們對相關問題的表達能力。而在現場提問環節中,小組成員可以通過協商共同解答他人的提問,以此提高學生的臨場應變能力和相互協作能力。指導教師對課程設計報告要進行認真的評判,評分時各部分的分值比例如下:選題難度,包括完成目標的難度,占20%;完成質量,主要考慮其設計方法和實現技術,占30%;實驗報告撰寫質量,占30%;演示效果,占20%。上述分值比例及評定方法可根據實際情況適當調整。
指導教師評價學生的設計時采用如下標準:
1)若完成的課程設計特別優秀,且創新性強,可給予90分以上,但嚴格控制90分以上的數量。
2)若能保證程序完全正確,則可獲得80~84分;如果學生設計算法有自己獨特的見解,并通過代碼實現,而且具有一定的創新性,則可考慮加分到85~89分。
3)若在設計算法和代碼實現的過程中出現極少的錯誤,則應給予70~79分。
4)若設計錯誤不算太多,大部分算法與實現程序都能通過,則應給予60~69分。
5)若程序中有比較多的錯誤,不能達到規定的要求,則其成績給予不及格。
2 結論
課程設計是讓學生綜合運用所學知識解決實際問題的重要教學實踐環節。如何通過課程設計環節實踐,培養學生分析并解決具有一定規模的實際問題的能力,提高數據結構課程設計的教學效率和效果,是教師一直在不斷研究和探討的問題。筆者根據自己在教學中的體會,介紹并探討了對課程設計內容的選取,組織與實施,以及評價標準,并將其應用到本校數據結構課程設計的實際教學中,取得了較好的教學效果,為同行提供一定的可參考價值。
參考文獻:
[1] 嚴蔚敏,吳偉民.數據結構(C語言版)[M].北京:清華大學出版社,2006.
1 引言
課程設計是課堂理論教學的延伸和補充。作為一門獨立的課程,它應該完成如下基本目標:應能夠完成理論與實踐的結合,應能夠鍛煉學生的設計創新能力、分析和解決問題的能力。
數據結構與算法課程是計算機科學與技術專業以及相關專業的一門專業基礎課程,同時它也是計算機科學與技術專業課程體系中的核心課程之一,它在計算機科學與技術專業的課程體系,特別是軟件系列課程體系中處于承上啟下、聯系左右的中心地位。大量的實踐表明,是否學好數據結構與算法課程對于能否學好計算機本科課程有著相當重要的作用,同時也對后續的工作和研究有著深遠的影響。
現今,各大學的數據結構與算法課程和教材的內容都主要集中在“基本數據結構的闡述和分析、基本數據結構的應用、典型基本算法的適當滲透”這三個方面。其中,前兩部分是重點,并占據了較多的篇幅,而這些內容的教與學離不開大量的實踐,所以在數據結構與算法課程教學中經常會有大量的課程實驗作為輔助。
通過進一步的深入分析可以看出,上述基本知識的學習并不是最終目標,而是為到達最終目標打下的基礎。顯然,從計算機科學與技術專業的知識體系可以看出:如圖1所示,學習數據結構與算法更深層次的目標是能夠針對實際問題來選擇、擴展甚至是設計全新的數據結構,然后設計相應的存儲結構并加以實現,從而最終完成問題的求解??梢钥闯?,這一過程是一個融會貫通的過程,是不能通過課程實驗完成的,也不可能在課堂教學中就可以建立完整意識的,所以在課程之后需要進行課程設計。
為此,數據結構與算法課程設計應能達到如下基本目標:培養學生應用數據結構基本知識來分析問題、解決問題的綜合能力;幫助學生建立計算機問題求解的全局意識,主要是通過認識數據結構在問題求解中的地位來完成全局認識的建立(這一全局認識如圖1所示);訓練學生從系統的、規范的觀點來進行計算機問題的分析、設計、編碼、測試等。
上面分析得出的數據結構與算法的課程設計目標是符合一般的課程設計規律的。但數據結構與算法課程具有自身的、明顯區別于其他課程的地方,再結合計算機專業的特點,就決定了還需要分析并建立適合數據結構與算法課程設計特點的教學模式。所以本文在第2節就數據結構與算法課程設計和其他課程的課程設計進行了對比分析,在第3節提出了一種基于問題驅動的教學模式,并就其中的關鍵部分給出了詳細的描述。
2數據結構課程設計的特點分析
任何事物都是一般性和特殊性的統一,數據結構與算法課程設計也是一樣的。和許多其他課程的課程設計一樣,它有著課程設計的共性,也有自身的特性。經過和其他課程的課程設計的對比,作者認為數據結構與算法的課程設計主要具有如下特殊性。
2.1不具有明顯的整體性
這是由數據結構與算法課程本身的特點決定的。由于該課程的核心內容主要集中于對各種數據結構的認識上,雖然各種數據結構之間總是存在許多內在的聯系,但總的來說還是自成體系、較為獨立的。
就這一點而言,數據結構與算法課程就和其他許多課程存在不同,也就使得數據結構與算法課程設計具有相應的特點。比如計算機組成原理的課程設計,可以通過做一個完整的、簡化的計算機硬件系統(包括的簡化的存儲器、控制器、運算器等部件)來完成課程內容的全面訓練,并讓學生建立對計算機組成的整體認識。機械原理的課程設計可以是一個簡單的機械系統的設計,完成對機械原理各部分內容的綜合訓練。而對于數據結構與算法的課程設計來說,幾乎不可能構造一個題目把所有的數據結構都包含進去。實際上這樣做是毫無意義的,因為數據結構本身就是不斷擴展的,在學習、掌握基本數據結構的基礎上能夠對知識加以擴展并靈活運用才是真正重要的。
所以在數據結構與算法的課程設計中,應強調問題求解能力的培養,而不像其他課程的課程設計那樣來強調綜合設計能力。
2.2課程內容具有很強的可伸縮性
從發展狀況來看,數據結構與算法的發展是極其迅速的,不斷地有新的數據結構和新的算法出現,而且針對不同的問題,數據結構與算法可以做出非常靈活的調整。在這一點上它和許多其他課程不同,比如操作系統中可能會不斷出現各種各樣的調度算法,但都集中在進程管理中,并總歸結于資源管理這一基本框架下,只要馮?諾伊曼體系結構不變,操作系統的資源管理框架就不會改變。而數據結構就不同,如就樹結構而言,二元樹雖然在概念上較為規整,但在實際問題中,大多都采用樹結構的變形,如B樹以及其他新型變形等,似乎兩者都可成為教學的重點。
正是因為數據結構與算法的可收縮性,培養針對問題的數據結構設計能力才是最重要的。
2.3具有極其廣泛的滲透性
計算機問題領域包括許多其他行業的問題,如經濟領域問題,只要涉及到對數據的組織與處理,都能或多或少地找到數據結構的用武之地,所以培養依托數據結構完成各類問題求解的“嗅覺”是十分必要的。
總的來說,基于數據結構與算法課程的特點,建立起與之相匹配的課程設計教學模式,這樣才能更好地完成教學。
3基于問題驅動的課程設計教學模式
在以上分析基礎上,如圖2所示,本文提出一種基于問題驅動的課程設計教學模式。
3.1問題來源
數據結構與算法課程設計的問題來源(即教學內容)主要包括:基本數據結構在解決實際問題中的應用;基本的算法策略在解決實際問題的應用;新興數據結構的相關問題;新興算法的相關問題及實踐;經典問題的經典算法;典型系統的計算機模擬;需自行設計數據結構和算法來解決的實際問題。
3.2問題描述
在問題的描述上,側重于用半自然語言進行描述。完全的形式化描述將減少問題分析能力的培養力度,完全的自然語言描述有包含太少的啟發信息。
一般來說,要求問題的描述必須能夠清晰地說明問題的含義和目標,并就采用的數據結構適當地給出啟發,其中,也可以設計一些題目故意將問題的目標隱去,加強對學生問題定義能力的培養。
3.3問題求解的迭代性
問題求解是不能夠一蹴而就的,一開始設計(選取)的數據結構與算法往往存在這樣或那樣的問題,建立逐步求精、多次迭代的問題求解思維是必要的。
為此,我們需要在學生的課程設計過程中,鼓勵學生對其解決方案進行理論分析和實驗分析,鼓勵學生大膽提出優化方案,鼓勵其積極主動的創新意識。
3.4結論形成
最終的結論(體現為課程設計報告)應以數據結構的描述為核心,并集中體現如何針對問題來完成數據結構的設計與優化。
其中,數據結構的描述應以抽象數據型(ADT)為基本手段,并在抽象數據型的基礎上,引導學生深刻理解和掌握數據的邏輯結構、性質、特點、基本操作和存儲結構的特點、實現和優化,并引導學生在實際應用中有意識地去為實際問題選擇恰當的存儲表示。
結果分析應采用理論分析和實驗分析并重的方式,應適當加大實驗分析的力度,使得學生能在分析結果的基礎上形成總結并產生啟發,最終能形成問題求解過程的全局意識。
3.5結果考核
鼓勵學生選擇需要設計新型數據結構(至少需要對已有數據結構作出修正)的題目,而不僅僅是實現一個定義明確的數據結構;鼓勵優化方案的提出、分析和驗證;鼓勵學生擴展知識體系,并建立問題求解的修養;鼓勵創新意識和主動學習意識的培養。
4 結束語
針對數據結構與算法課程設計的一般性和特殊性分析,本文在提出該課程設計的基本要求后,更提出了適合于數據結構與算法課程設計的“以問題求解為核心”的教學模式。近年來,經過對計算機科學與技術專業本科生的多次實踐,可以看出,這一模式可以取得很好的教學效果。
參考文獻
1 耿蕊,李敬有,鄧文新.關于計算機基礎課課程設計的研究.高師理科學刊,2005,5
1.《數據結構》課程授課現狀
《數據結構》課程是計算機及其相關專業的核心基礎課程,是一門理論與實踐相結合的課程,在整個計算機專業教學體系中處于舉足輕重的地位,特別在軟件方向的課程體系中處于承上啟下的中心地位。長期以來,《數據結構》課程的教學備受相關學院領導高度重視,然而,大部分高校《數據結構》課程的教學效果都不盡如人意,影響教學效果的原因大致如下:
(1)理論教學與實踐教學嚴重脫節。目前對于《數據結構》的理論教學主要是教師首先講解基本的結構思想,然后再引導學生讀懂由類C++語言編寫的算法,最后布置作業讓學生思考針對這些算法的問題。在實踐教學方面,學生通常要做的事是將課本上寫的很詳細的代碼翻譯成相應的高級程序語言并調試通過,甚至不會去自己解決一個稍微復雜點兒的綜合問題?;谏鲜鰞煞N原因,學生在學習的過程中可以不用費神思考就能將問題解決,但是離開課本遇到一個新的具體的問題就不知所措,體現不出學生獨立思考問題的能力,實踐教學環節更是流于形式,加之學生程序設計的基本功不扎實,久而久之對學習編程和思考問題失去興趣。
(2)傳統單一的考核形式,不能體現學生的技能水平?,F階段大多數高校對于《數據結構》課程的考試形式總是以筆試為主,考核的內容還是單一的理論知識,盡管最后有編程題目或者分析題,但是均不能體現學生的技能掌握的如何,90%的學生感覺學習了《數據結構》這門課程對自己以后的學習和工作沒有用處,進而減弱了學習的信心,導致學生再學習后續的數據庫和編程方面的課程的時候,缺乏模型構建的能力。
2.項目驅動教學法在《數據結構》課程中的應用分析
項目驅動教學法是以學生為主體,以項目知識為主線,教師參與引導的教學方法,它不再是“教師講,學生聽”的被動教學模式[1]。該教學方法的主要目的是讓學生真正的參與到課堂中來,培養他們主動思考問題和創新的能力,特別適合于像《數據結構》這種內容延伸性強、抽象思維要求特別高的課程。
2.1 項目驅動教學法的特點
項目驅動不同于簡單的任務驅動,它更側重于培養學生解決未遇到的關鍵問題的能力,在教學過程中表現為以項目為本位、以學生為主體的重要特征,要求教師設計的項目要具有一定的應用價值,并且最好與企業實際生產過程或具體問題有直接的關系。項目教學法的特點如下:
(1)具有實踐性:項目的主體與現實世界密切相連,學生的學習內容更加的具有針對性和實用性。
(2)具有自主性:學生自由、自主的分組進行學習,根據自己的理解發揮想象力,從而促進學生創造能力的發展。
(3)具有發展性:長期項目與階段項目相結合,構成為實現教育目標的認知過程。
(4)具有綜合性:項目的設計本身需要綜合多個學科,所以培養了學生綜合運用知識的能力。
(5)具有開放性:學生需要圍繞問題進行探索和解決,所以學生的學習形式不再局限于課堂[2]。
2.2 師生角色的相互轉變
項目驅動教學方法要求每位學生均要真正的參與課堂中來,在老師的引導下,發揮想象、參與研究、參與創造。因此,項目驅動教學法較以往的傳統教學實現了兩個打破:
第一,打破教材章節順序,以項目為主線完成課程的培養目標。教師須在完全吃透課程培養目標的基礎上,熟悉教材知識點,然后根據要傳授的知識點結合該專業的就業方向和崗位構建項目,教師的主要精力應放在項目的設計、布置和引導方面,教師設計項目的優劣直接影響學生的學習效果。另外,在教學的初級階段,教師還應該全面把握項目實施過程中學生可能出現的問題以及如何解決。在項目的實施階段,教師只是起到引導和督促的作用,而不參與討論,當各組學生都提出普遍不懂的問題時,可以先引導其查閱相關的資料或略微指導一二,教師在整個的過程中完全成了一名向導和顧問。當然,如何引導學生在項目實踐中發現新問題和掌握新知識,這對老師提出了更高的要求。
第二,打破教師在臺上泛泛的講,學生在臺下靜靜的聽的局面。項目驅動教學法要求先將學生分組,每一組學生接到教師的項目后就開始自行分配任務,并且在指定的時間內將相關的問題解決,這期間可能會查資料、相互討論、請教師長等,學生的教材理所當然的當成了查找知識的工具書,或者有些教材甚至可以不用給學生征訂,節約了教育成本。這樣,我們的教學才真正做到了注重過程、以學生為本。
2.3 項目驅動下的《數據結構》課程劃分
以《數據結構》課程的教學為例,在采用了項目驅動教學法后,我們將課程的知識點劃分成了10個項目:
表1 《數據結構》課程項目示例表
項目名稱 相關知識點 參考課時
通訊錄信息管理系統 線性表、查找、排序 6
某高校學生成績管理系統 線性表、串、查找、排序 6
婚姻的穩定性情況調查 數組、棧 8
理發館的經營狀況分析 線性表、隊列 6
十進制四則運算器設計 棧、樹結構、浮點數運算 8
汽車零部件的庫存模型設計 廣義表、查找、排序 8
因特網域名查詢系統 樹結構、查找 6
小型汽車牌照的快速查找系統 線性表、查找、排序 10
管道鋪設施工方案設計和選擇 圖結構 8
文章系統設計 文件、查找、排序 10
受現階段高校授課時間的限制,針對不同的學生層次,這10個項目可能不能全部做完。根據學生的特點,教師可以有針對性的選作期中的5-8個,進而分配相關的課時。實踐證明:在標準課時之內,只有30%的學生能夠完成一個完整的項目,但是90%的學生能夠利用課后的時間積極的查閱資料和咨詢老師,這種授課方法對學生的主動學習起到了一個積極的推動作用,并且學生愿意犧牲課后休息的時間泡在圖書館。
3.具體項目實施過程
下面以“通訊錄信息管理系統”為例,闡述在《數據結構》課程中實施項目驅動教學法的過程。
3.1 項目名稱:通訊錄管理系統。
3.2 培養目標:第一,使學生掌握線性結構的特點、線性結構的表現形式。第二,使學生領會數據在計算機中存儲的概念,并掌握兩種重要的存儲形式。第三,掌(下轉第179頁)(上接第171頁)握線性表和鏈表的區別,能夠根據實際情況選擇不同的存儲結構。第四,能夠對實施的算法進行性能評價。
3.3 項目預備知識:C語言編程基礎、線性表的定義、線性表的存儲結構、線性表的創建、線性表中元素的查找、插入、刪除、修改等操作。
3.4 項目延伸知識:線性表中元素的排列(按照某種規則進行排序)。
3.5 項目的功能描述:該系統是普通的電話通訊錄管理系統,要求實現能夠根據姓名或者電話號碼查詢一個用戶,能夠實現對新用戶的添加操作和刪除一個用戶,能夠統計出該通訊錄中的用戶總數。比如:用戶有一個電話號碼,但不知道此電話號碼是誰的,則需要輸入號碼來查詢該號碼是不是此通訊錄中已記錄的人的號碼,若是可以輸出該號碼及姓名,若不是可以輸出“無記錄”。同學們在此基礎上發揮想象力,結合實際可以擴展更多的功能。
3.6 項目實施步驟:
(1)根據學生的特長進行團隊劃分。按照一個班級35人的標準,我們將學生分成5-6個團隊,每個團隊在5-6人,然后推薦一名隊長。
(2)教師開始下發項目書,要求每一個團隊根據項目書撰寫項目的可行性報告,每個團隊以文字的形式上交一份報告,在此期間至少要保證每個團隊的隊長明白項目的完成目標,然后由隊長寫出項目過程的具體劃分和階段性成果。
(3)教師要不間斷的引導,當完成項目的可行性報告之后,每個團隊就開始查找資料和相互討論,教師在旁邊起到一個引導和監督的作用,對于學生普遍問及的問題可以進行統一解答。教師有目的的講課,學生有目的的聽課,所以實現了共贏的局面。
(4)教師總結階段,每個項目完成之前,教師要對各個團隊的成果進行演示和評價,指出每個團隊的不足之處。
(5)學生整改階段,學生根據教師的評價,完善自己的不足,然后形成階段性課程設計報告。
4.《數據結構》課程的考核形式及評價
《數據結構》課程不同于其他的專業課,該課程中所設計到的算法和思想具有可收縮性,它應強調對于問題求解能力的培養,我們需要在學生的課程設計過程中,鼓勵學生對其解決問題的方案進行理論分析和實驗分析,鼓勵學生積極主動的創新并大膽提出優化設計方案。對于該課程的考核形式是讓學生根據自己平時的課程項目,將項目整理成課程設計報告,最終上交紙質的課程設計報告書,然后教師對報告進行評價。
考慮到《數據結構》這類課程一直以來是計算機相關專業學生學歷層次提升考試的重要專業課,在進行課程考核的時候,有些學校除了讓學生形成最終的課程設計報告書之外,還讓學生參加一次筆試考試,以了解學生對于基礎知識的掌握水平。
采用了項目驅動+課程設計的教學模式以后,學生普遍反映對數據結構的學習非常感興趣,老師們則感覺采用這種方式以后,學生的學習積極性提高了,但是同時老師們的教學壓力也變得大了,因為增加了老師準備課堂的負擔,但是總體感覺是利大于弊的。
5.實施項目教學法的總結與展望
通過《數據結構》教學中實施項目驅動教學法,我體會到項目教學在專業基礎課中實施的必要性,當然該教學方法也不是萬能的,它不是適合于所有的課程,通常來講:這種教學方法比較適合實踐操作性強,學科比較綜合的課程,同時,我有如下幾點體會:
(1)項目教學法重要的是項目的設計,它可能直接影響教學的效果。在進行項目設計時,我們需要考慮學生對項目的理解、項目包括的知識點的范圍、課程的前驅后繼關系等,否則,我們設計的項目將是沒有意義的。
《數據結構》課程是高職計算機專業重要的專業基礎課。該課程通過學習程序設計中常用的基礎數據結構,介紹一些重要的程序設計思想,提高學生的邏輯思維能力和編程技能,培養學生的分析問題、建模與解決問題能力。同時,該課程的學習內容能夠促進學生對后繼課程的學習內容的理解。例如,高級編程語言C#或Java中有一些庫函數實現了對集合元素排序的功能。而這些功能正是以數據結構課中介紹的排序算法為基礎的。
根據我們多年的教學經驗,在高職計算機專業的課程體系中,數據結構普遍被學生認為是比較困難的一門課程。造成困難的原因大致有以下幾個。首先,由于高職計算機專業學生就業的特點,決定了高職學生很少從事基礎和底層程序設計,或者從事與數據結構以及程序設計相關的理論研究。因此,數據結構課的學習內容在工作中直接應用的機會很少。這導致部分學生甚至教師對學習數據結構課的必要性存在疑惑,對該課程重視程度不足。其次,數據結構課的概念和算法抽象,理論性強,對學生邏輯思維能力要求高,學習的門檻較高。最后,高職學院學制較短,導致一學期內的專業課程密度高,學生學習時間不足。
現有的高職教材或本科應用型教材例如參考文獻[1-4]的內容編排,多沿襲自傳統本科數據結構課。一般依線性結構,樹結構和圖結構的順序編排,逐次介紹各種數據結構,給出其定義,詳細介紹其物理存儲結構和基本性質,并穿插其應用的一些例子。其覆蓋的知識面廣,內容和體系較為完整,條理清晰。但是由于高職計算機專業數據結構課程學時較少,其專業學習的實踐性強,學生邏輯思維能力稍弱等特點,這種沿襲自本科教學的授課內容組織方式不完全適合高職學生。雖然針對課時偏少的情況,一般高職課本會對本科課本作一些刪減或簡化,但其內容構成仍沒有本質上的改變。因此,課程內容的選擇、組織與編排增加了高職學生學習數據結構課的難度,而未能解決上述造成困難的幾個問題。
我們認為,數據結構課程能夠訓練學生的邏輯思維能力,促進學生深入理解與專業相關的基本編程思想,且其內容與多門后繼專業課程相關,因此對計算機專業的學生而言,學習數據結構課的必要性毋庸置疑。而針對高職教育學時少,實踐性強的特點,對課程大綱、課程標準、教學內容和教學方式進行改革,使得高職學生能夠更好地學習該門課程,改進學習體驗,改善學習效果,則勢在必行。數據結構課的改革,結合當前高職教育改革的方向,在課程設計方面應該以突出能力培養,以項目為載體,以任務訓練崗位職業能力,以及知識理論實踐一體化為原則[5-6]。
本文總結了我們在高職計算機專業數據結構課上進行的教學設計改革。我們在課程中引入任務驅動教學方式,設計若干項目供學生在課堂上練習,以項目覆蓋課程的各知識點,通過項目引入相關的概念,并作講解。在課堂教學方式上,以解決問題,完成項目代替抽象的理論教學。由于避免了繁瑣的基本概念講解,縮短了理論教學用時,學生能夠投入更多的時間與精力到編程實踐練習。而通過練習,能夠更好地理解抽象的概念。我們的課程改革,應用于計算機應用專業兩屆學生的教學實踐中,取得了良好的效果。
2 教學項目設計實例
數據結構課程的主要內容大致可以分為三部分,即線性結構、樹結構和圖結構。其中,線性結構包含了幾種重要的數據結構,如棧、隊列、數組和串等。樹結構的內容一般以最常用的二叉樹結構為主。圖結構是最為復雜的結構,涉及算法的內容比較多,如圖的最短路徑算法,圖的最小生成樹算法和圖的連通分支算法等。除此以外,課程還包括查找和排序算法等重要內容,這兩類算法同時涉及線性結構和樹結構。通常還會介紹遞歸、指針等重要的編程思想和內容。
我們的教學項目設計思路,是選取相對簡單而具有代表性的算法題目,結合一些應用的背景,構成我們的項目,內容力求覆蓋基礎的數據結構,如線性結構、隊列、棧和二叉樹等。學生通過完成項目中的一個個任務來學習數據結構的抽象概念。有些方向內容豐富,我們從中選取少量相對簡單,然而具備代表性的例子作為任務,使得學生更易上手,盡快建立對一些抽象概念的認知。例如查找和排序操作既可以在線性結構上,也可以在樹結構上進行。但我們不考慮樹結構,僅僅以線性結構上的問題組成我們項目。又如從圖結構的多個算法求解問題中,我們選取容易理解的連通分支求解算法作為教學項目。
作者從事高職計算機應用專業的數據結構課教學。該課程的學時大約為4學時×16周,一般在一年級第二學期開設。根據課時和學生的具體情況,我們在一學期的課程中為學生設計三至四個項目,并主要以學生完成項目的情況作為學期總評的依據。以下以我們為2014級學生設計的項目為例,對課程教學項目設計作一個詳細介紹。
我們一共設計了四個項目,具體如下。
迷宮:以一個n×m的{0,1}-矩陣表示一個迷宮。其中,0表示可以通行,1表示有障礙,左上角和右下角均為0,分別表示入口與出口。編寫程序判斷此迷宮是否存在一條從入口到出口的路徑,如存在則輸出該路徑。
二叉樹的構造和遍歷:對教師以繪圖形式給定的一棵二叉樹,編寫程序構造該二叉樹并輸出該二叉樹的前序、中序和后序遍歷的結果。可以結合一個具體應用進行教學。例如,可采用二叉樹的一個典型應用,即表達式的幾種表示法。教師輸入一個表達式,學生根據其建立一個二叉樹,并通過三種遍歷方式輸出表達式的波蘭表示法,逆波蘭表示法和中綴表示法。
(1) 查找和排序:對教師給定的一個有序整數序列,編寫程序接收用戶輸入的一個整數,使用二分查找法在序列中查找該整數。對教師給定的一個無序的整數集合,使用插入排序、冒泡排序和選擇排序中的至少兩種為該集合排序。此問題的一個典型的應用情景是學生的考試分數排序。
(2) 圖的連通分支:某班級有n位同學。現組織外出旅游,并擬將全班同學分成若干小組集體行動?,F在給定一個圖表示本班同學之間的朋友關系。其中以結點表示同學,且若兩位同學為朋友關系,則對應的兩個結點以邊連接。請根據朋友關系將全班同學分成若干個小組,使得有朋友關系的兩位同學在都同一個小組中。此題目等價于求朋友關系拓撲圖的最大連通分支。
可以看到,這四個項目均具有豐富的理論意義和具體的應用背景。它們覆蓋了現有數據結構課本的大部分知識點。表1中列出了數據結構課的大部分知識點以及它們被各個項目覆蓋的情況。課程中常見的數據結構,除了串以外,大部分為我們設計的項目所覆蓋。同時我們的項目還覆蓋了遞歸,指針,廣度優先搜索和深度優先搜索等重要的程序設計思想。
為了引導學生分步完成練習,我們還為比較困難的項目設定預備任務。預備任務不同于一般的習題。它們有一定的獨立性,可以提出來作為一個習題,但是又與我們的項目有機地結合在一起,可以認為是相關項目的一項任務。
對于迷宮問題,我們設定以下兩個預備任務。
(1.1)寫一個棧結構處理程序。每一個棧元素是含有3個整數(這里規定棧元素由3個整數組成,是為了迷宮項目做準備,見下文)的一個結構體。寫出棧的初始化,入棧,出棧和判斷棧空的操作。在main函數里面建立一個這樣的棧,測試它。比如說,入棧若干個元素,例如 (1,1,0) 和 (2,2,0) ,然后出棧,并依照出棧順序打印這些元素。
(1.2)圍障。給定一個以n×m矩陣表示的迷宮,用全一把原迷宮包圍起來,創建出一個新的 (n+2)×(m+2) 迷宮。打印出新的迷宮。
迷宮問題采用棧結構存儲回溯的結點,每一個棧元素存儲迷宮內一個結點的x、y坐標和回到該結點以后下一個可以探索的方向,共3個整數。第一個任務棧處理程序既是一個線性表的練習,也為迷宮問題準備好要使用的棧。我們允許迷宮第一行、最后一行、第一列和最后一列除了出、入口以外,還有其他0元素。但是這些0元素實際上不是在所有的方向上都可以通行。在第二個任務中,我們在迷宮四邊添加全1,稱之為圍障,圍障能夠使得迷宮求解程序中的一些條件判斷大為簡化。該任務可以看成一個矩陣練習,并為我們即將探索的迷宮作了初始化。
對于圖的連通分支問題,我們也設定了兩個預備任務。
(4.1)圖的表示。用矩陣表示教師用繪制方式給定的圖,并在屏幕上打印出圖的結點和邊。具體內容包括定義和初始化一個矩陣,表示一個圖,輸出圖的結點列表和圖的邊的列表。其中,圖的結點以數字0,…,n-1 編號,圖的每一條邊以 (x,y) 的形式表示,x和y是邊的兩個端點的編號。
(4.2)隊列的操作。編程實現一個整數隊列的初始化,入隊和出隊的操作。程序里面定義和初始化一個整數隊列;然后入隊至少三個元素,按順序打印出隊列里面的所有元素;再出隊至少兩個元素,又按順序打印出隊列里面的所有元素。
第一個練習非?;?。它完成圖在程序中的表示,學生學會把一個圖轉換為一個矩陣,同時從矩陣中讀取出圖的頂點和邊。第二個練習是為了對圖作廣度優先遍歷時使用隊列結構作準備,同時也是一個線性表的練習。
3 教學內容的組織與課堂教學實踐
依授課時間順序,我們的教學內容組織為
一、線性結構;
二、預備任務(1.1)和(4.2):隊列和棧;
三、項目(1)迷宮問題,包括預備任務(1.2);
四、樹結構;
五、項目(2)二叉樹遍歷;
六、項目(3)查找和排序;
七、圖結構;
八、項目(4)圖的連通分支,包括預備任務(4.1)。
教學內容的組織以線性結構、樹結構到圖結構為主線索。
在線性結構部分,對線性表的基本概念作一些介紹后,我們布置預備任務(1.1)和(4.2),通過這兩個練習介紹棧和隊列的概念。同時,向學生介紹項目(1)迷宮問題和項目(4)圖的連通分支,并說明預備任務(1.1)和(4.2)跟這兩個項目的關系。在完成了預備任務(1.1)和(4.2)以后,布置項目(1)迷宮問題。迷宮求解問題的講解,重點要解釋清楚深度優先搜索的思想。
接下來是樹結構的內容。我們介紹樹結構相關的一些概念和重要性質。然后布置項目(2)二叉樹遍歷。二叉樹遍歷有先序、中序和后序三種方式。除了樹結構內容,我們以遞歸方式實現二叉樹遍歷程序,通過這個項目向學生介紹遞歸思想。所以,此項目教學的重點之一是講解遞歸的原理。教師可實現其中一種遍歷方式作為例子,而讓學生完成其他形式的遍歷。如前所述,為了幫助學生更好理解二叉樹的思想,可結合二叉樹的典型應用,即表達式的三種不同表示方法來講解。
隨后的內容是線性表的查找和排序。完成項目(3)查找和排序方法。其中,查找算法以線性表的二分查找為例,講解的時候我們與順序查找作對比。二分查找必須應用于有序數組,而對于無序的數據則只能采用順序查找,這說明了數據結構對算法設計的影響。
排序算法種類繁多([7]),其中部分高效算法的時間復雜度能夠達到O(nlogn)。但是這些算法對學生而言有相當難度,我們僅選取時間復雜度達到O(n2),而實現思路相對簡單的幾種算法作為項目的內容,教師可以在課堂上部分或全部實現要求的排序算法,然后讓學生再重新自行完成。
最后是圖結構部分。我們首先介紹一些和圖相關的概念和基本性質。然后以(4)求圖的連通分支為教學項目。項目(4)直接以一個實際問題的形式提出,揭示出圖算法的強烈應用背景。在求解算法中,我們要求學生掌握使用廣度優先搜索來訪問圖的結點。廣度優先搜索的實現需要以隊列作為待搜索結點的存儲結構。因此,項目又結合隊列的設計、實現與應用進行。有助于對理解線性表的相關知識,掌握其應用。
摘要:針對計算機類本科專業數據結構課程與Java面向對象程序設計課程之間的銜接問題,分析數據結構中集合、線性表、樹和圖等知識點與Java Collections框架之間的映射關系,提出按照數據結構中學生建立的知識體系組織Collections框架的教學,說明面向數據結構知識體系的Java課程教學實施方法。
關鍵詞 :數據結構;Java;Collections框架;課程銜接
文章編號:1672-5913(2015)15-0082-03
中圖分類號:G642
基金項目:河北省精品課程建設項目“數據結構”。
作者簡介:董東,男,副教授,研究方向為數據挖掘及應用,dongdong@hebtu.edu.cn。
0 引 言
數據結構是計算機類本科專業核心課程之一,其后繼課Java面向對象程序設計也是重要的專業課程之一。通過對數據結構的學習,學生初步掌握了為實現問題求解所需要的基本邏輯結構、存儲結構和常見的算法。Java面向對象程序設計則從面向對象程序設計的范式出發,試圖使學生理解如何通過對象以及對象間的通信實現問題求解。在Java教學實踐中,我們發現存在如下兩個問題:①學生無法直接感受到數據結構與Java面向對象程序設計之間的關系,體會不了數據結構的重要性,無法體驗選擇合適的數據結構和算法對實現問題求解的成就感。②由于JDK開發的歷史原因,Java JDK中提供的數據結構與算法的實現并沒有與數據結構課程具有對應關系。例如,在Java中,隊列(Queue)和線性表( List)都是Collection的子接口,而數據結構認為隊列是一種特殊的線性表。
根據在教學中發現的這些問題,我們在Java Collection框架部分的講授中采取了如下措施:①按照數據結構中學生建立的知識體系組織Collection、Set、List、Queue、Stack等內容的講授,而不是按照Java API中的繼承關系來介紹。②在課程設計實踐環節,通過“先動手寫自己的算法實現”,然后“閱讀并分析JDK相關算法源代碼”,通過對照,使學生發現自己在程序設計方面的不足,從而得到在數據結構課程中所學知識的應用體驗。
1 JDK中的數據結構
數據結構是數據元素之間的關系。從概念和實現兩個角度,可將數據結構分為數據的邏輯結構和數據的存儲結構。按照數據元素之間前驅和后繼關系來分,數據的邏輯結構可分為以下4種:集合( Set)、線性表(List)、樹(Tree)和圖(Graph)。數據的存儲結構主要包括數據元素本身的存儲以及數據元素之間關系表示。數據元素之間的關系在計算機中主要有兩種不同的表示方法:順序映像和非順序映像,并由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。
Java JDK為常用的數據結構定義了一些接口( Interface)和實現(Implementation)。這些接口、實現類以及常用的排序、查找等算法統稱為JavaCollections框架(Java Collections Framework).Collections框架的設計目的是要滿足如下目標:高性能、一致性、擴展性和輕松編程。Java程序員在具體應用時,不必考慮數據結構和算法實現細節,只需要用這些類創建出來一些對象,然后直接應用即可‘3]。Java中把一組對象稱為Collection,也就是說,Collection是對象的容器。Java對Collection中的對象沒有任何前驅、后繼以及重復性的約束,只是約束了對象類型E。
Collection接口定義了其上的3類操作:針對單個元素的基本操作、迭代器和Collection對象之間的批量操作。基本操作包括增加、刪除、判斷是否包含某個元素、判斷是否為空、容器中當前元素的個數、清空等。批量操作包括:合并兩個Collection容器、從一個容器中移走一些元素、保留兩個容器中相同的元素、判斷一個容器中的元素是否完全包含在另外一個容器中等。
接口Collection<E>的子接口有Set<E>和List<E>。集合(Set)在Collection的基礎之上增加了“不允許重復元素”的約束;而List則在Collection基礎之上增加了“元素之間具有前驅、后繼關系”的約束:除了第一個元素外,所有元素具有唯一的前驅;除了最后一個元素外,所有元素具有唯一后繼。
如果僅關心數據元素是否出現,而不關心數據元素之間的次序,則應使用Set<E>。Java為集合接口提供了兩個基本的實現:HashSet<E>和Tree<Set>。HashSet<E>是Set<E>接口的典型實現,大多使用集合的場合就是使用這個實現類。HashSet實現類按哈希算法來存儲集合中的元素,因此具有很好的查找性能。HashSet不能記憶元素之間的順序,包括插入順序。其子類LinkedHashSet<E>也是根據元素hashCode值來決定元素存儲位置,但它同時使用鏈表維護元素的次序,這樣使得能夠記憶插入順序。由于LinkedHashSet需要維護元素的插入順序,所以性能略低于HashSet,但遍歷集合里的全部元素性能較好。
實現類TreeSet<E>可以確保集合元素處于排序狀態,TreeSet并不是根據元素的插入順序進行排序,而是根據元素的實際值來進行排序的。TreeSet采用紅黑樹的數據結構對元素進行排序,并要求添加進TreeSet中的對象必須實現CompareTo<E>接口。
List<E>接口作為Collection<E>接口的子接口,可以使用Collection接口中的全部方法。但是List接口中定義了元素位置和元素范圍的概念,使得List可以根據元素位置索引(index)來插入、替換、刪除集合元素以及查找指定對象的位置。ArrayList<E>實現類基于數組實現了List接口,其內部封裝了一個動態再分配的數組。每個ArrayList對象都有一個capacity屬性,這個屬性表示它們所封裝的數組的長度,當添加元素超過長度時,capacity會自動增長,其默認值為10。LinkedList<E>內部以鏈表來保存集合中的元素,因此隨機訪問容器時的性能較差,但在插入、刪除元素時性能較好。
Queue<E>接口用于定義隊列這種數據結構,隊列是“先進先出”的容器,通常不允許隨機訪問其中的元素。Java中的隊列接口Queue<E>沒有繼承List接口,而是直接繼承了Collection接口。如果使用具有固定容量的隊列,則應使用offer()來加入元素,使用poll()來獲取并移出元素,因為add()和remove()方法在因容量原因失敗時拋出異常。如果只是訪問隊首而不移出該元素,使用element()或者peek()方法。LinkedList<E>類實現了Queue<E>接口,因此我們可以把LinkedList當成Queue來用。PriorityQueue是一個比較標準的隊列實現類,它并不是按加入隊列的順序,而是按隊列元素的大小來記憶隊列元素的順序。因此當調用peek方法或者poll方法來取出隊列中的元素時,并不是取出最先進入隊列的元素,而是取出隊列中最小的元素。
Stack<E>實現了List<E>接口,提供了push和pop操作限制線性表中元素的插入和刪除只能在線性表的同一端進行。JDK l.6引入的ArrayDequ<E>實現類被優先推薦作為棧使用。ArrayDeque<E>實現了Deque<E>接口。Deque<E>接口定義了雙端隊列,雙端隊列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。
Java JDK中沒有直接提供樹和圖的接口和實現類,但是可以通過研究TreeMap的源代碼學習操作樹的一般編寫模式。綜上,數據結構與Java面向對象程序設計兩門課程內容的銜接見表1。
2 面向數據結構銜接的java課程實施方案
Java面向對象程序設計為1學期的課程??傉n時為講授54學時、實驗32學時。其中,與數據結構知識點緊密相關的Java Collections框架部分為講授6學時、實驗4學時。在講授環節,按照表1列出的順序進行。在實驗環節完成與授課內容相關的驗證性實驗。在課程設計實踐環節,要求學生使用Java設計常見算法,然后閱讀JDK提供的源代碼進行對照。具體方案如圖1所示。
比如,在java.util.Collections類中提供了數據結構中學生已經學過的常見算法,如二分查找、計算元素頻數、查找最大/最小元素、反轉線性表、按照指定距離旋轉線性表、隨機排列線性表、交換指定位置上的兩個元素以及排序等。注意,在Java 6中Collections.sort()使用的是MergeSort;而在Java 7中,內部實現換成了TimSort。
要求學生按照這些API文檔說明,首先按照數據結構課程中的知識設計自己的算法實現,然后與API源代碼進行比較。由于學生使用C語言版的數據結構教材,所以在面向Collection編程之前,作為過渡,先讓學生面向數組編程。
哈希表是一種重要的數據結構,也是實現集合的基本途徑之一。通過研究HashSet的源代碼,可以讓學生理解為什么每個對象都要有hashcode()方法,以及哈希表的編碼特點。由于HashSet的實現是基于HashMap的,所以研究HashSet就要研究HashMap。
Map是一種典型的名值對類型,它提供一種Key-Value對應保存的數據結構。客戶程序通過Key值來訪問對應的Value,這個接口并沒有繼承Collection這接口;而其他的類或者接口,不管是List、Set、Stack等都繼承或實現了Collection。
TreeMap和HashMap算是Java集合類里面比較有難度的數據結構。HashMap元素存取的時間復雜度一般是O(l),而TreeMap內部對元素的操作復雜度為O(logn)。TreeMap記憶了順序,TreeSet內部的實現使用了TreeMap。
3 結語
數據結構與程序類課程的關系問題愈來愈引起關注,我們提出面向數據結構知識體系的Java課程教學與數據結構課程的銜接方案。這個教學方案已經在河北師范大學本科計算機專業實施三屆,取得了較好的效果,學生對算法的理解加深了,解決問題的自信心增強了,也建立了工程意識。
參考文獻:
[1]教育部高等學校計算機科學與技術教學指導委員會,高等學校計算機科學與技術專業公共核心知識體系與課程[M].北京:清華大學出版社,2008: 110-111
[2]嚴蔚敏,吳偉民,數據結構(C語言版)[M].北京:清華大學出版社,1997: 5-7.
[3]扎克霍爾.Java語言導學[M].北京:人民郵電出版社,2008: 293-294.
[4]沈華.數據結構、算法和程序之間關系的探討[J].計算機教育,2013(4): 58-61.
[中圖分類號] G642 [文獻標識碼] A [文章編號] 2095-3437(2017)03-0029-02
數據結構課程是計算機類專業的核心必修課程,在整個專業教學體系中占有重要地位。數據結構課程的教學內容涉及構筑計算機求解問題的兩大基石:刻畫實際問題中信息及其關系的數據結構,描述問題解決方案的算法。[1]數據結構課程的教學目標是培養學生縝密的邏輯思維能力和數據抽象能力,把數據結構和算法理論與編程實踐相結合,并在軟件系統開發過程中靈活運用。學好數據結構課程對操作系統、編譯原理、計算機網絡等后續課程的學習以及培養學生分析問題、解決問題的能力等方面起著至關重要的作用。如何講好數據結構課程,一直是各高校計算機教師研究探索的熱門課題。俗話說“好的開端是成功的一半”,第一堂課的教學設計至關重要。好的開端能激發學生對課程的興趣,調動學生的學習積極性,使其產生強烈的求知欲,從“要我學”變為“我要學”,從而為教師有序、有效展開課程教學奠定良好的基礎。[2]
本文從以下幾個方面具體討論如何上好數據結構第一堂課。
一、教師自我介紹
教師給學生的第一印象很重要。第一堂課教師第一次接觸學生,自我介紹必不可少。自我介紹的內容主要包括介紹教師的姓名、學院、辦公地點、移動電話等,可以把微信、QQ或E?鄄mail等其他聯系方式告訴學生,還可以組建數據結構課程學習的QQ群或微信群,學生遇到問題后可以在群里討論,也可以通過電話、E?鄄mail等與教師單獨聯系。教師愿意做學生的朋友,學生在學習上、生活上、思想上需要教師幫助時,可及時與教師聯系。教師的積極態度能夠對學生產生積極的影響,有助于與學生建立良好的師生關系,促進學生學習的自覺性。
二、課程介紹
(一)課程定位
數據結構課程是計算機類專業的核心必修課程,美國ACM/IEEE CC-2005課程體系將數據結構與算法類課程列為核心課程之首。我國教育部計算機教育指導委員會“計算機科學與技術專業規范”2006中明確把數據結構與算法列入計算機及信息技術相關學科專業的本科必修基礎課程。
數據結構課程是對前導課程(如C語言程序設計、程序設計基礎等)的深入和擴展,能為進一步學習其他專業課程打下基礎。課程中的排序算法及基本的樹、圖等非線性結構是計算機科學的基本功,B+樹、散列(Hash)等高級數據結構是后續如操作系統、數據庫、編譯原理、圖形圖像等專業課程的基礎。
(二)主要內容
數據結構課程描述的是按照一定邏輯關系組織起來的待處理數據元素的表示及相關操作,涉及數據的邏輯結構、數據的存儲結構和數據的運算,內容非常豐富。
常見的邏輯關系包括線性結構、樹形結構、圖結構和文件結構。常見的存儲方法有順序方法、鏈式方法、索引方法和散列方法。建立在數據結構之上的有效運算是問題求解的核心,如排序、檢索等。在介紹課程內容時,應把相應章節的學時分配一并列表展示,并簡明扼要地向學生介紹課程的重點難點,借助多媒體課件以動畫的形式給學生演示鏈表、棧、隊列以及排序等操作,幫助學生理解,激發學生的學習興趣。
(三)學習目標
數據結構課程的教學目標是讓學生學會分析數據對象的特征,掌握數據組織方法和計算機的表示方法,初步掌握算法時間、空間分析的技巧,培養學生針對問題的應用背景進行分析,選擇合適的數據結構,從而培養高級程序設計技能。學生的學習目標明確了,才會不懈努力,朝著目標一直前行。
(四)教材及參考書
教材是供教學用的資料,如課本、講義等。第一堂課應明確數據結構課程的教材,簡要介紹教材的特點、作者信息等,比如我們采用的是嚴蔚編、清華大學出版社出版的《數據結構》。同時給學生們列出一些必要的參考書籍,這對課程學習能起到補充拓展的作用。
三、學習方法指導
在學生了解數據結構課程的重要性、所用教材及參考資料后,就要告訴學生如何去做才能學好這門課程。數據結構課程要培養學生結合實際應用設計有效算法和數據結構的能力,學習數據結構必須經過大量的踐,在實踐中體會構造性思維方法,掌握數據組織與程序設計的技術。通過扎實的、大量的基礎訓練,學生才能靈活地運用問題抽象、數據抽象、算法抽象來分析問題,應用數據結構和算法來設計、實現相應的程序,完成創新能力和實踐能力的訓練。[3]
(一)課前預習,課后總結,吃透教材
課程內容主要包含數據結構和算法設計與分析的基本知識,各種基本數據結構的定義、存儲結構、相應的算法以及應用等。理解掌握基本的數據結構與算法的關系很重要。程序的時間和空間效率,不僅與數據的組織方式有關系,也跟算法設計的巧妙程度有關系。在學習中要把握好預習、聽課、實驗、復習、總結五個環節,吃透教材,把握住算法的本質。通過預習,可以提高學生的主體意識,培養學生的獨立思考能力,進而提高課堂學習效率。課后的總結則能讓學生自覺地回顧課堂內容,深入地學習和領會課程的重點和難點,完成課后作業或練習題,從而提高數據結構課程的教學效果。
(二)多讀代碼,實現算法,理解思路
教育部計算機專業教育指導委員會“中國計算機本科專業發展戰略研究報告”、“計算機科學與技術專業規范”等都明確地強調了實踐教學和學生動手能力培養的重要性。程序設計解決問題往往有多種方法,且不同方法之間的效率可能相差甚遠。在學習過程中要讓學生擺脫畏難情緒,不怕有問題,多讀、多寫、多調試,及時總結。學生只有通過豐富的練習題和應用案例才能增強對理論的感性認識,從而明白這些數據結構為什么存在以及在什么情況下可以最好地解決什么樣的問題。
(三)充分利用網絡資源進行課外拓展
1.圖書館資源
圖書館擁有豐富的文獻資源,是學校的文獻信息資源中心,也是學生的第二課堂。學校圖書館有豐富的藏書,通過網上書目查詢系統可以檢索到與數據結構課程有關的圖書,如《數據結構典型題解》、《數據結構上機實驗指導》等。圖書館還有各種文獻數據庫,如超星數字圖書館,可以在線閱讀電子圖書;有萬方、中國知網(CNKI)、維普等數據庫,可以查閱期刊、會議等學術論文。在課堂上教師可以演示利用圖書館中的中國知網(CNKI)檢索系統檢索相關論文,讓學生學會檢索查找文獻資源,這樣可以拓展學習資料,避免課程學習僅限教材的情況。多讀書,可以讓學生擴大視野,打開思路,培養和鍛煉學生自主學習的能力。
2.課程資料及論壇
互聯網是信息和傳播的重要平臺。網絡資源包羅萬象且更新及時,使用方便,不受時間的限制,其中涉及數據結構的教學資料、技術論壇等數不勝數。課程資源主要有國家精品課程資源網、MOOC學院、中國大學MOOC、學堂在線,以及國外MIT等開設的數據結構相關課程。而與數據結構相關的論壇則更多,比較突出的如CSDN論壇的數據結構與算法版塊、ITeye綜合技術論壇的數據結構版塊等。[4][5]在介紹課程資源及論壇的同時,教師可以簡單介紹百度或必應搜索引擎的用法,讓學生掌握利用搜索引擎查找相關資料的技能。
四、結語
在高校的課堂里,大學生要接觸不同門類的學科。教師在引導學生學習過程中能起到關鍵的作用。第一堂課既是師生之間的初次見面,也是大學生對教師及課程的初步了解與把握。良好的開端是課程成功的基礎,上好第一堂課,意義重大。對教師而言,上好第一堂課,會使學生對該門課程產生首因效應,在課程的興趣、理解、運用等方面產生積極影響,可以使教師對學生加深了解認識,有助于教師對教學安排進行合理配置,為今后的課程教學奠定良好的基礎。對學生而言,上好第一堂課可以使學生對課程內容有一個全面的認識,提升學生對課程的認同感,提高學生的學習積極性。
[ 參 考 文 獻 ]
[1] 張銘,耿國華,陳衛衛,等.數據結構與算法課程教學實施方案[J].中國大學教學,2011(3):56-60.
[2] 張永翊.上好大學里的第一堂課[J].中國成人教育,2008(20):131-132.
關鍵詞:研究型教學;實驗教學;智力能力培養;教學方法;數據結構
社會的發展對當前我國高等教育提出了具體的要求,所培養的學生必須具備全面發展的素質,包括掌握科學的學習方法和具有會學習的本領,具備積極創新的能力和生動活潑的特征。這一特征,使得高校教育改革應該不斷地向更高、更深刻、更全面的層次上發展。教學改革是教育改革中最為重要的一部分。如何創造良好的學習環境和條件,革新教學手段和方法,全方位地培養學生的智力和能力,關鍵是要轉變教育觀念,改革人才培養模式,改進教師的教學方式,增強學生學生的學習的主觀能動性,積極采取啟發式、研討式等研究型教學方式。
但是在高等教育過程中對研究型教學的認識程度還不夠高,開展的深度與廣度都還不夠,從而成為制約教學質量進一步提高的一個瓶頸而引起了各高校的普遍關注。本文結合我們開展研究型教學的實踐,對《數據結構》課程的實驗教學改革進行了一定的嘗試,取得了初步的教學效果。
一、研究型課程教學的基本理念
國內研究型教學的實踐,一方面是對國外先進教育方式的借鑒,另一方面也是對國內實施已久的高校學習與科技興趣小組活動乃至啟發式、討論式、發現法教學方式等經驗的系統提升。
1、赫爾巴特“主知主義”課程理論。赫爾巴特的課程理論被稱為“主知主義”,它是以知識作用為本位的課程論,同時還明確主張學生從總體上對教師保持被動狀態,強調教師的權威意志和主導責任。因而,人們把赫爾巴特視為“教師權威論”或“教師中心論”的代表人物。
2、杜威的“實用主義”課程。杜威主張教育要“以學生為中心”,要求教育的一切措施圍繞著學生來組織,以促進學生的個性發展。他認為學生的學習不應是被動接受知識的過程,而類似科學家研究發現知識的主動探究過程。杜威的教育思想深刻地影響了20世紀初至當代的全部教學論的發展。教育家陶行知先生是杜威的學生,他將社威的教育思想引入我國,并在國內進行了卓有成效的教學實踐,創立了“知行統一”的課程理論,至今對我國教育界仍產生著深刻影響。
3、研究型課程理念。研究型課程教學的基本理念是:對歷史上傳統的教育學派的“主知主義”、“教師中心論”和進步教育學派的“實用主義”、“學生中心論”中合理的部分加以有機的整合,揚棄其狹隘、刻板僵化的部分,注重發揮教師的主導責任和學生的主體作用。它以促進學生的個性發展為宗旨,以改變學生單純地、被動地接受知識傳授的學習方式為著眼點,構建一種開放的學習環境,為學生提供一個多渠道獲取知識,理解自然、個人、社會等問題,并將學到的知識綜合應用于實踐的機會。它在幫助學生進行接受式間接學習的同時,形成一種對知識的主動式直接探索,以提高其解決實際問題的能力的研究型學習形式。
二、研究型課程教學的指導思想和教學原則
《數據結構》實驗教學是一種驗證型的教學模式,將課堂上所學的理論知識與計算機上機實踐相結合,通過利用高級語言環境對書本上的算法進行驗證,從而達到鞏固理論知識的目的。而研究型實驗教學的指導思想,不僅僅在于驗證書本知識和鞏固理論知識,而是更加重視理論知識的綜合應用,強調整個過程的參與和學習,發揮學生學習的主動性,激發學生的學習興趣和創造力,培養學生的團隊精神和協作意識。因此,全面培養學生的智力和能力,是研究型實驗教學的指導思想。
在上述教學思想指導下,在實驗教學過程中必須堅持的教學原則是:
1、教師指導與學生動手并重。雖然有效快捷的學習離不開教師的指導,但指導只是一種手段。在現代教學過程中,教師的指導旨在教會學生學會學習,這不僅是今后終身教育的要求,而且只有學會學習,掌握了科學的學習方法,學習主體才會真正具有一種參與到教學過程中去的能力。
2、面向結果的教學和面向過程的教學并重。面向結果的教學是指教師在教學活動中以使學生獲得令人滿意的結論作為教學的直接意義,它是傳統教學所強調的教學形式。面向過程的教學則是教師在教學活動中重視引導學生對知識形成過程的理解與實踐,并在理解和實踐中仔細體驗獲得這一知識的基礎和條件,以及它與其他知識的相互關系等。從主動學習的角度看,面向過程的教學會給學生主體帶來一種更高的價值。
3、一般能力的培養與創造品質的形成并重。學生能力的培養已成為現代教育的重心,然而在促進學生的一般能力有較全面提高的同時,教師應該對學生的創造能力的發展給予特別關注,因為創造品質已成為現代人素質結構中最重要的組成部分。
4、理論學習與實踐活動并重。理論來源于實踐,反過來又指導實踐。只有堅持理論聯系實際,才能有所發現,有所創造。
5、接受式學習與探究式學習并重。接受式學習是一種被動的學習過程,而探究式學習則是一種主動的學習過程,只有發揮了學生主體的積極性,才能使得學習收到事半功倍的效果。近年來,我們對《數據結構》實驗教學的研究型教學模式的探究,正是堅持了以上這些教學原則。
三、研究型《數據結構》實驗教學環節的設計與實施
研究型教學依據其內容的不同可分為認知理解類和實踐應用類。研究型《數據結構》實驗教學屬于實踐應用類。主要憑借算法構造思維方式,從具體操作規范入手,通過操作過程的構造實施,解決特定問題,理解、習慣、掌握算法思維方法是一個構造性、研究型方式的訓練過程,其核心內容就是通過學習結構技術的過程,培養學生算法設計能力以及創造性思維,培養舉一反三、觸類旁通的能力,以達到提高學生應用知識解決復雜問題的素質能力和的目標。計算機的程序設計是一項創造性的智力勞動,讓學生深刻掌握這一套算法構造思維方法,是實踐環節所要解決的核心問題。因此,我們注重為學生創設智力發展的環境與條件,設置智力因素和非智力因素相結合的條件。我們根據研究型《數據結構》實驗教學的指導思想和教學原則,考慮到培養計劃的安排,我們對每一次實驗課都進行了精心地策劃,并要求寫出實驗報告。主要分為確立問題階段、實踐體驗階段和成果交流階段等三個階段來進行。這三個階段并不截然分開,而是相互交叉推進的。實施流程通常為:“引出問題,建立假設”——“研討探究,驗證假設”——“得出結論,切磋交流”——“歸納總結,形成評價”。
⑴確立問題階段。教師介紹上機環境及算法在相應數據結構中的地位和作用,包括使用的編程環境,在驗證算法過程中需要注意的問題,講解如何查找相關資料,并展示歷屆學生的實驗報告樣本。學生3—4人自由組合成立研究課題小組,選出組長;通過查找相關資料,擴展相關算法,提出研究課題,寫出實施計劃。在此基礎上,教師組織各小組進行答辯,組長對研究課題的目的、背景資料、理論依據、技術方法、計劃和目標等進行解答,并回答教師提出的有關問題。
⑵實踐體驗階段。教師根據實驗室條件、答辯情況和課題難易程度等,有重點地抽查6—7組作為本次實驗教學課的指導對象,并強調在上機實踐過程中的注意事項與具體要求,講解實驗報告格式和撰寫方法,并要求各組人員進行具體分工。學生利用4節課的時間上機實踐,并記錄編程調試過程中的相關數據和出錯信息。
⑶成果交流階段。實驗完畢得出結果后進行資料整理,并開始撰寫實驗報告。教師對各組的實驗報告進行初審,提出具體修改意見。各組學生對實驗報告認真修改和補充,做到報告格式化、標準化,并正式提交給教師再次審查,教師根據情況評定成績,作為期末成績總評的參考依據,并在課堂上組織學生交流實驗感受及取得的成果。
通過實驗實踐內容的訓練,突出構造性、研究型思維訓練的特征,提高了學生組織數據與進行編寫大型程序能力;更好地理解和掌握了算法設計所需的技術,為整個專業學習打下了良好的基礎。學生通過完成《數據結構》實驗課程的設計任務,不僅把設計優良算法與掌握面向對象的編程技巧結合起來,而且能培養綜合運用所學知識來獨立解決實際問題的能力,給學生發展個性化以更加廣闊的天地。實驗教學的改革與實踐結果證明,貫穿于實驗教學環節的研究型實驗教學,使得理論教學與實驗教學有機的整合,收到了良好的教學效果。
四、研究型《數據結構》實驗教學在人才培養過程中的作用
1、研究型《數據結構》實驗教學有利于學生的智力開發和能力培養。
教學的目的不僅要使學生獲得知識,而且更要使學生獲得智力的發展,要使學生掌握點石成金的方法。能力與智力是兩個相對獨立的概念,二者有區別,又有密切聯系。二者之間不一定成正比例關系。智力屬于認識活動的范疇,而能力屬于實際活動的范疇。智力是保證人們有效地認識客觀事物的較穩定的心理特征的綜合,能力是保證人們成功地進行實際活動的較穩固的心理特征的綜合。智力結構由注意力、觀察力、記憶力、想象力和思維力5部分組成,能力結構由組織能力、定向能力、適應能力、操作能力和創新能力5部分組成。研究型《數據結構》實驗教學是全過程的教學,從給定的算法到算法擴展、從選題到實驗報告及其答辯的所有過程中,幾乎都是以學生為主體開展活動,教師僅僅負責組織和教學引導。特別是在科學研究方法和科技文獻的查找、科技報告的寫作訓練等方面,讓他們在低年級就能得到很好地鍛煉,為今后寫好畢業論文打下了堅實的基礎。所以,這種新型的教學方式對于全面培養學生的智力和能力是十分有利的。
2、研究型《數據結構》實驗教學可激發學生的求知欲和創造力。
教師要善于采取相應的改革措施,創設智力發展的環境與條件,用生動的實踐活動來鞏固和強化學生的求知欲,激發學生的好奇心、興趣、想象力和創造力。因為興趣是推動學生求知欲的強大內在動力,興趣往往是創造的先導,同時想象在人的智力活動中也占有極重要的地位。由于研究型《數據結構》實驗教學與中小型軟件開發結合起來,使學生們很感興趣。他們本來對軟件開發充滿了好奇與想象,在學習了《數據結構》以后,有了一定的算法理論基礎,可以根據自己的興趣,充分發揮想象力和創造力,對軟件開發進行有益的嘗試。
3、研究型《數據結構》實驗教學有利于培養學生動手動腦、理論聯系實際的能力。
研究型《數據結構》實驗教學要求學生動手動腦,手腦并用,既應用了已掌握的知識,又促進了思維力、理解力和創造力的發展。所以,我們認為知識與智力上的綜合訓練是發展智力的重要條件。在實驗教學活動中,學生們不僅動手編制了相關的應用程序,而且還掌握了使用相關編程工具的方法,并通過實踐和反復總結后,理解了對同一算法可以從多種不同的角度來實現的深刻內涵。
4、研究型《數據結構》實驗教學能培養學生的團隊精神和協作意識。
學生積極參加研究型《數據結構》實驗教學活動,不僅促進智力和能力的發展,而且能很好地培養學生的團隊精神和協作意識。由于我們的整個教學活動是以小組進行的,無論是在上機編程,還是在查閱資料、撰寫和修改實驗報告,各小組成員都能認真參與,并很好地配合組長工作,表現出良好的團隊精神和協作意識。最后,當順利完成實驗報告并通過教師驗收時,他們感到有一種來之不易的集體成就感和榮譽感。所有這些,使他們更加堅定了自信心,激發了學習興趣,鍛煉了能力,提高了智力。
當然,同傳統的實驗教學相比,研究型《數據結構》實驗教學對教師的要求更高了,付出的也更多了,同時得到的也更多。因為這是一種過程的學習和參與,學生和教師都從中受益匪淺。因此,只要我們提高了對研究型實驗教學的認識,端正了態度,掌握了科學的指導方法,就會去不斷地創新,必將能培養出智力和能力全面發展的一流人才。
參考文獻
[1]文輔相. 素質·方法·創新[J].高等教育研究,1999.
[2]陸國平,江瑩,李松.研究型大學與思想庫[J].高等教育研究,2001.
[3]沈顯生,尹路明,李樹美,楊捷頻. 研究型野外實習教學的設計與實踐[J].教育與現代化,2002.3.
中圖分類號:G642.0 文獻標志碼:A 文章編號:1674-9324(2016)24-0274-03
一、引言
實驗教學是學生從學習理論知識到走向社會的橋梁,對提高學生綜合素質、培養學生創新精神和實踐能力有著理論教學不可替代的特殊作用[1]。特別是主干課程的實踐教學,它是應用型人才培養中的關鍵環節[2]。課內實驗是指與理論課相捆綁的實踐教學,即嵌入到專業基礎課或專業課內的實驗實踐教學[3]。它是與理論教學并行實施的實踐教學環節,能夠幫助學生深入理解和掌握所學的專業知識。
數據結構是隨著處理對象的復雜性不斷增加而發展起來的一門課程,作為計算機專業的核心課程,在專業人才培養鏈條中占有舉足輕重的地位[4-7]。數據結構主要研究數據在抽象視圖和實現視圖中的表示和處理方法[8,9]。抽象視圖涉及的是數據結構的理論性部分,實現視圖主要體現的是數據結構的實踐性,理論指導實踐,實踐支撐理論,因此設計有助于課堂理論教學的實驗教學方案是非常有必要的[10]。它可以解決學生對所學知識缺乏必要感性認識的問題,將知識傳授、技能訓練、能力培養融于一體,使所學理論知識在實驗中得到驗證和應用[11]。
棧和隊列是兩種非常重要的數據結構,它們有非常多的實際應用并且是實現其他復雜結構的基礎,因此為了幫助學生掌握并靈活運用這兩種結構,本文給出一種棧和隊列的實驗教學方案。該方案的設計思路也可以應用于其他數據結構或課程的實驗教學方案的設計。
二、認識兩種重要的數據結構――棧和隊列
棧和隊列是兩種運算受限的線性表,它們的插入和刪除運算都被限制在表的端點處進行,只是具體的受限規則不一樣[12,13]。
(一)學習對象
棧(stack)是運算受限的線性表,它被限制在表的一端進行插入和刪除操作。能進行插入和刪除的一端稱為棧頂,另一端稱為棧底。正是由于它插入和刪除操作上的限制使得它具有了一種獨特的“后進先出”(LIFO)的特性。棧的LIFO特性使得它具有非常多的應用,如:符號平衡問題、中綴表達式轉換為后綴表達式問題、后綴表達式的計算問題、函數調用的實現(包括遞歸函數的實現)、在股票市場中查找劃分、Web瀏覽器中的網頁訪問歷史、文本編輯器中的撤銷序列等。此外,棧還是其他很多算法的輔助數據結構和其他數據結構的組成部分。
隊列(queue)也是一種運算受限的線性表,它被限制在表的一端進行插入操作,在表的另一端進行刪除操作。進行插入操作的一端稱為隊尾,進行刪除操作的一端稱為隊首。正是由于它插入和刪除操作上的限制使得它具有了一種獨特的“先進先出”(FIFO)的特性。隊列的FIFO特性使得它具有非常多的應用,如:操作系統中的作業調度、異步數據轉換、多道程序設計等。此外,隊列還是其他很多算法的輔助數據結構和其他數據結構的組成部分。
(二)學習目標
學習這兩種重要的線性結構需要學生重點消化的知識點有:(1)棧/隊列的概念、類型定義及基本操作的定義和實現;(2)棧/隊列的結構特性;(3)棧/隊列的靈活應用。
為了配合棧和隊列的理論教學,幫助學生理解和掌握上述知識點,我們需要精心設計棧和隊列的實驗教學方案。
三、棧和隊列的實驗教學方案設計
(一)實驗題目設計
根據棧和隊列的學習目標和遵循循序漸進的學習和教學原則,實驗題目被分為以下三個層次:基礎型實驗題目、設計型實驗題目和加強理解型實驗題目。
所謂基礎型實驗是指圍繞課程講授的棧/隊列的物理實現和其基本運算的實現來設置的實驗題目。設計基礎型實驗的目的是,通過實踐的方式驗證課堂上講授的重要知識點,給學生切身的感受,擺脫“紙上談兵”的感覺,這種立體的感受有助于學生深入理解和掌握這些知識點。設計型實驗要求學生能分別運用棧/隊列解決簡單應用問題。這類實驗題目主要是用來引導和加強學生對棧/隊列的靈活運用。設計加強理解型實驗的目的是強化學生對棧和隊列的結構特性的理解和體會。為了達到這個目的,加強理解型實驗題目的設計思路有兩個方面:(1)引導學生去思考并解決這樣兩個問題:能否利用棧的LIFO特性來實現隊列的FIFO特性?能否利用隊列的FIFO特性來實現棧的LIFO特性?(2)讓學生實現其他更為復雜的棧和隊列。
在棧的理論教學過程中可以開設棧的基礎型實驗,在棧的理論教學結束后可以開設棧的設計型實驗,在隊列的理論教學過程中可以開設隊列的基礎型實驗,在隊列的理論教學結束后可以開設隊列的設計型實驗和加強理解型實驗題目。表1給出了具體的實驗安排。
學生必須在相關內容的理論教學過程中利用自己的課外時間完成全部基礎型實驗題目,教師根據學時安排選擇1~2道設計型實驗題目讓學生在上機課上完成,未選擇的題目應向學生提供完整的源代碼和設計說明。相關內容的理論教學結束后,學生必須利用自己的課外時間完成加強理解型實驗題目中的第1題和第2題,剩下兩題可以選做。
(二)教學方法
因為三種類型實驗的要求、難易程度不同,因此在學生參與形式、教師參與程度、教師參與方式等方面需要區別對待。表2給出了對三種類型實驗在上述這幾個方面的設計。
基礎型實驗要求每位學生利用課外時間獨立完成,教師全程參與指導。所謂全程參與指導是指從算法基本思想到算法實現的各個環節(包括編程技巧、程序調試與測試等)都要參與指導。參與方式多種多樣,例如利用QQ等即時通訊工具進行指導,約定時間和地點進行答疑,等等。
設計型實驗要求每位學生在上機課上獨立完成,教師前期參與指導。所謂前期參與指導是指教師參與學生在算法設計環節的討論,教師可以給出提示,同時鼓勵學生設計不同的算法。參與方式是面對面的交流。
加強理解型實驗要求每位學生利用課外時間獨立完成,教師后期參與指導。所謂后期參與指導是指教師在收齊學生提交的源碼和設計報告后,對其進行分析總結,并將總結結果以班級為單位采用面對面的方式反饋給學生。
(三)考核方法
對三種類型的實驗采用不同的考核辦法。表3給出了這方面的設計。
對基礎型實驗不做專門考核的原因是學生基礎型實驗完成的好壞會直接影響設計型實驗和加強理解型實驗的完成,因此對其他兩種類型實驗的考核間接考核了基礎型實驗。
對設計型實驗的考核分兩個部分:一是本次上機課上實驗的完成情況,包括程序是否調試成功、程序的運行結果是否正確,代碼編寫的質量等;二是本次上機課結束后提交的實驗報告的完成情況,包括內容是否完成、書寫是否規范等。
對加強理解型實驗的考核主要是考核學生提交的源代碼和設計報告的完成質量。
設計型實驗的成績占總實驗成績的70%,加強理解型實驗的成績占總實驗成績的30%。
四、結語
數據結構是一門理論性和實踐性很強的課程,其理論教學環節與實驗教學環節相輔相成。棧和隊列是兩種重要的線性結構,為了提高它們的教學效果,增強實驗教學對其理論教學的促進作用,本文提出了一種棧和隊列的實驗教學方案。該方案的設計思路同樣適用于其他數據結構或課程的實驗教學方案設計。
參考文獻:
[1]朱金秀,金紀東,周妍,等.實踐教學與就業能力培養相融合的研究與探索[J].實驗室研究與探索,2011,30(4):105-107.
[2]榮瑞芬,閆文杰,李京霞,等.實踐教學課程考核評價模式探索[J].實驗技術與管理,2011,28(3):232-234.
[3]張純容,施曉秋.問題與案例驅動的課內實踐教學分級模式探索[J].實驗室研究與探索,2012,31(1):145-148.
[4]教育部高等學校計算機科學與技術教學指導委員會.高等學校計算機科學與技術專業人才專業能力構成與培養[M].北京:機械工業出版社,2010:143-147.
[5]董麗薇.數據結構課程教學方法的改進[J].沈陽師范大學學報(自然科學版),2012,30(2):307-309.
[6]劉城霞,董宛,蔡英.數據結構中基本教學案例的研究[J].計算機教育,2010,(03):144-146.
[7]韓建民,鐘發榮,趙相福,等.基于ACM-ICPC訓練模式的數據結構實踐教學探討[J].計算機教育,2013,(10):103-107.
[8]沈華.數據結構、算法和程序之間關系的探討[J].計算機教育,2013,(04):58-61.
[9]沈華.數據結構入門教學中的實例法[J].計算機教育,2013,(24):64-66.
[10]沈華.數據結構課內實踐教學方案[J].實驗室研究與探索,2013,32(10):396-400.
關鍵詞:課程融合;做中學;項目驅動
中圖分類號:G642
文獻標識碼:B
1引言
“面向對象程序設計”和“數據結構”是信息學科相關專業本科生的必修課程,也是專業基礎課程?!懊嫦驅ο蟪绦蛟O計”課程通過全面、系統地介紹面向對象程序設計的基本概念、分析方法、設計方法、基本語法和編程方法,使學生能深刻理解和領會面向對象程序設計的特點和風格,類的封裝性、繼承性和多態性與程序的安全性、結構性和靈活多樣性之間的關系,進而掌握面向對象的程序設計方法和編程基礎,并具備解決一般程序設計問題的能力;“數據結構”課程有助于學生更有效地組織數據、設計高效的算法、完成高質量的程序以滿足錯綜復雜的實際需要,強調數據的組織方式和解決問題的思想。
在實際的教學過程中,學生對這兩門課程的掌握和運用不盡人意。一方面,相當部分學生雖然學過了“面向對象程序設計語言”課程,但在“數據結構”課程中卻難以利用面向對象的思想設計和實現相關的數據結構和算法,影響了學生對數據結構課程知識的掌握;另一方面,數據結構和算法是計算機科學的核心問題,很多學生在學習的過程中沒有意識到這一點,以至于到了實際項目中不知道運用所學的“數據結構”知識來解決實際問題。
2問題分析
“面向對象程序設計”和“數據結構”課程作為非常重要的專業基礎課,各高校在課時分配和課程建設方面都非常重視,出現上述問題的原因主要是課程設置和教學方式上存在問題。
在現代教學體系中,從抽象數據類型和面向對象觀點來討論數據結構已經成為一種主流,使得“面向對象程序設計”和“數據結構”兩門課程構成了強相關的課程。但在當前的實際教學中,這兩門課程被一直被設定為相互獨立的課程,課程間的教學出現了相互脫節現象,而且這種
現象在許多高校的教學中普遍存在。
在實踐環節上,由于課程設置上的相對獨立,也使得兩門課程在實踐教學方面有相當的重復,雖然總體的實踐教學學時很多,但各自側重點在實踐教學中沒有有效地體現,使得學生“事倍功半”,收效甚微。課程中實驗項目過于單一和相對獨立,也使得實踐環節與實際項目聯系過于松散,學生運用所學知識解決實際問題的能力和實際工程能力很難得到鍛煉,也難以培養軟件開發中所必須的團隊合作精神。
3課程改革方案及實施
針對目前“面向對象程序設計”和“數據結構”這兩門課程教學中存在的問題,我們將這兩門課程進行有機結合,探索采用教師指導下的以項目為驅動的“做中學”教學方式進行教學。精心設計項目,將面向對象的設計思想、程序設計語言和數據結構課程教學內容恰當地融入到所設計的項目當中,有效整合兩門課程中的重疊部分,突出各自的側重點。面向對象程序設計教學采用“做中學”(Learning By Doing)以及“按需教學”(Teaching On Demand)的方式進行教學,使學生在具體項目過程當中在掌握和熟練運用高級語言的特征的同時,深入理解和鞏固相應的數據結構知識;教學采用的項目與實際項目接軌,提高學生利用所學知識解決實際問題的能力;在教學過程中以項目組的方式組織學生,培養學生的團隊合作精神,提高學生的職業素養。
3.1課程項目
為了有效整合這兩門基礎課,我們精心設計了“Mini數據庫”項目,該項目較好地包含了“數據結構”中線性表、字符串、二叉樹、索引、查找、排序、文件等章節的主要內容。通過該項目實現了“數據結構”和“面向對象程序設計”課程內容的有機融合。
Mini數據庫分為三個模塊:基本數據模塊,數據庫內核模塊,數據庫管理界面模塊。其中,數據庫管理界面模塊呈現數據庫管理的總界面風格及形式,在項目具體實施過程當中,這一塊不作太多要求以免轉移項目重點,學生可以只完成控制臺形式界面。
基本數據庫模塊定義基本數據結構,采用哈希表和二叉樹結構,負責讀出業務數據的存儲,包括對最基本數據的查詢,刪除,修改和添加等操作。其結構如圖1所示。其中Index類創建索引,Matrix類以順序表形式存放所有數據,并且該類的設計融入了可利用空間表、模擬指針等思想,對學生在數據結構設計方面有較大的啟發作用。
數據庫內核模塊(如圖2所示)主要負責對文件中數據進行讀寫操作,實現定義表及表的屬性,設置主鍵和外鍵,定義表之間的關聯以及實現表的更改等功能。
Mini數據庫項目所涉及到的數據結構基本上基于本科教材中介紹的常用數據結構,部分數據結構在課本的基礎上稍做修改便可用于該項目,部分需要對教材所介紹的相應數據結構進行重新設計以適于項目。每一個數據結構都有其相關的代價和效益權衡,要完成項目,學生需要對多種數據結構的有效性進行評估來決定在什么情況下需要采取哪種數據結構。通過該項目我們希望達到三個目的:
(1) 使學生熟悉一些常用的數據結構,這些常用的數據結構形成了一個程序員的基本數據結構工具箱,對于實際中的很多問題,工具箱里的數據結構便是理想的選擇;
(2) 引入“權衡(tradeoff)“的概念,在項目中通過分析不同數據結構的代價和效益來討論“權衡”的概念;
(3) 評估數據結構或算法的有效性,在項目過程中引導學生分析工具箱中哪一種數據結構最適合解決項目中的某一問題,這種技術也使得程序員能夠判斷自己或別人發明的新數據結構的價值。
3.2教學方式及實踐
Mini數據庫系統在難度和復雜度上較傳統實驗高,如何引導學生在學習“數據結構”課程的同時完成該項目是一個值得研究的問題。我們的做法是:首先在教師指導下讓學生全面了解所要完成項目的整體結構,在學習“數據結構”課程的過程中結合所學知識逐步完成系統的各個模塊,最終完成整個項目。
我們采用集課堂理論教學、開放實驗、每周討論、網上答疑等多環節組成的立體化教學方式進行教學。
在課堂理論教學部分,根據所設計的項目我們對教學內容進行適當調整,強調所學內容在項目中的應用。完成相關理論知識的講授后,指導學生如何運用所學知識解決課程項目中的問題,并且理論教學中部分內容采取“做中教”方式進行,教師在現場編寫程序完成教學任務,幫助學生克服“編程難”的心理陰影,培養學生分析問題和解決問題的能力以及養成良好的編程風格,該方法深受學生歡迎。
實驗上機部分,學生以項目組的形式進行組織,3~4名同學為一組,共同完成課程項目,培養他們的團隊合作能力。為了防止項目組中個別動手能力弱的學生不參與或少參與課程項目的設計與實現工作,在課程項目進行的同時,我們布置了相應的課程實驗,課程實驗與教學內容直接相關,并且對課程的項目有直接幫助作用,每一個學生都要單獨完成課程實驗內容。為了給學生提供良好的實驗環境,我們采取開放實驗形式,為學生提供了專門實驗室。指導教師以office hour的形式解答學生問題,并且每個班配備了一名指導教師和一名助教。
為了克服簡單的“說教”型教學,每一周由指導教師或助教召集開展“每周討論”活動,學生以自愿方式參與“每周討論”?!懊恐苡懻摗币詫W生為主體,由學生講解他們所設計的代碼以及所遇到的問題,特別鼓勵學生將上一周在課程項目或課程實驗中所遇到的問題提出來,由參與學生一起討論問題的解決辦法。為了鼓勵學生積極參與 “每周討論”活動,我們對積極參與討論和提出問題的學生在平時成績上予以體現,下一步我們將考慮對由學生評選“每周討論”活動積極分子,并給與獎勵。
課程網站是課程教學的有機組成部分,我們逐步建立了相對完善的課程網站。課程網站在為學生提供課程資源、課程項目和實驗任務的同時,為學生提供了網絡交流平臺。在“學習交流”板塊中,學生可以提出學習中遇到的問題,回答其他學生的提問。為了及時解決學生的提問,我們安排了教師和助教進行網絡值班。為鼓勵學生積極提問和回答其他學生問題,網上“學習交流”模塊中設計了加分功能,學生所得分數將作為平時成績的重要組成部分。
采用上述方式,我們在湖南大學軟件學院2004級和2005級本科生中進行了試點,每次挑選了30多位學生參加。第一次挑選的學生在全年級中屬于較為優秀的學生,完成情況非常好,其中兩位同學進入微軟亞洲工程院實習,并將他們在本課程中完成的項目作為一個亮點向實習單位介紹;第二次參加的學生的整體素質處于全年級中等水平,也順利完成了整個項目。在前兩屆學生成功試點的情況下,目前我們對2006級本科生全面采用上述教學方式進行“數據結構”和“面向對象程序設計”兩門課程的教學,通過近一個學期的教學,從教學的效果來看,學生的動手能力整體上較上幾屆學生有明顯改觀,并且學生的學習積極性也大大提高,90%以上的學生項目組能夠按照教學進度完成項目內容。
參考文獻: