前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇數據結構實驗報告范文,相信會為您的寫作帶來幫助,發現更多的寫作思路和靈感。
關鍵詞:數據結構;實驗教學;教學改革
作者簡介:劉志鵬(1980-),男,江蘇南京人,南京郵電大學計算機學院,講師;段衛華(1977-),男,江蘇南京人,南京郵電大學計算機學院,講師。(江蘇 南京 210003)
基金項目:本文系南京郵電大學計算機學院教學改革項目(項目編號:12)的研究成果。
中文圖書分類號:G642.0 文獻標識碼:A 文章編號:1007-0079(2013)01-0132-02
“數據結構”課程是計算機科學與信息管理等專業的核心課程之一,它在計算機領域的重要性僅次于編程基礎。[1]我國制定的CCC2002體系強調了“數據結構”在計算學科及電子信息學科中的作用與地位。該課程一般以“計算機高級程序設計語言”為先修課程,也是“操作系統”、“數據庫”、“編譯原理”等專業課程的基礎。“數據結構”課程涉及的知識點較多、實踐性很強,除了要求學生有嚴密的邏輯思維外,還需要擁有較好的編程實踐基礎。目前,大多數高校“數據結構”課程的教學工作均在一學期內完成。學生學習任務較重,往往在學習過程中出現“重理論、輕實踐”的現象。許多學生在設計和實現算法方面表現不佳。為了在有限的學時中得到更好的教學效果,使學生在算法設計和實現兩個方面的能力都有所提高,筆者從“數據結構”課程實驗教學環節入手,嘗試了一系列的探索和研究。
一、實踐教學目前存在的問題
“數據結構”是一門實踐性很強的課程。實踐有助于學生更好地理解和應用所學習的理論知識,實踐環節是無法替代的,直接影響學生的學習效果。然而,目前的“數據結構”實驗教學環節普遍存在如下的一些問題:
1.學生對實踐環節重視不夠
目前,學生對“數據結構”課程實踐環節普遍不夠重視。主要原因如下:
第一,主流開發語言和集成開發環境,如C++、Java等,均提供了現成的數據結構程序庫。程序員可直接調用程序庫中的函數而無需重頭編寫底層數據結構。部分學生認為,只要掌握程序庫的使用方法,便無需實踐數據結構的底層實現。然而,無論是C++的STL和Boost程序庫,還是Java語言的集合類,均無法滿足某些程序苛刻的性能要求。因此對學生而言,僅僅掌握某種特定編程語言的程序庫是不夠的。
第二,由于“數據結構”課程以筆試作為衡量學生學習成果的主要方式,加上實踐環節考查指標并不明確,造成很多同學不重視實踐環節,導致實踐環節效果不理想。
第三,學生對“數據結構”在操作系統、數據庫、編譯器中的實際應用知之甚少,部分同學雖然知道“數據結構”課程十分重要,但并不知道數據結構在各個領域的廣泛應用。
2.學生程序設計能力薄弱
學生程序設計能力薄弱,是部分高校長期普遍存在的現象。究其原因,主要包括以下兩個方面:
首先,部分學生程序設計基礎較薄弱。對于C++的某些基本語法并不熟悉,也不了解使用封裝、繼承和多態型在編寫大規模代碼過程中帶來的好處。大量的對語法知識的要求導致學生難以閱讀和編寫程序,造成學生思想上的困惑。
其次,對程序設計能力薄弱、基礎較差的學生而言,某些優秀教材[2,3]并不適合。學生閱讀這些教材時,雖然能夠理解算法的含義,但是卻無法將偽代碼轉換成對應編程語言的程序代碼。這一方面導致學生無法動手實踐,另一方面也進一步削弱了學生的編程能力。
3.實踐過程中無法得到及時的反饋
許多學生在“數據結構”實踐課中采用先編寫、后調試的方法,這種編寫代碼的方式對代碼量較少、代碼邏輯較簡單的程序是有效的。但對于代碼量較多、代碼邏輯復雜的“數據結構”程序則不可取。由于拼寫和邏輯錯誤,導致最終程序錯誤較多,難以調試。由于在代碼編寫過程中無法得到及時的反饋,導致學生喪失了進一步學習的興趣。
此外,編寫代碼、正確執行后,許多同學不及時總結經驗教訓,反復犯相同錯誤。對待實驗報告撰寫工作態度不端正。教師沒有及時將實驗報告成績和其中存在的問題及時反饋給學生,部分學生不了解實驗報告和實驗的評分細則,對實踐環節最終成績不滿,也反過來削弱了學生學習該門課程的興趣。
二、實踐環節的教學改革
針對教學中存在的以上情況,筆者主要從以下幾個方面進行實踐環節的探索和改革:
1.引導學生重視實踐環節
第一,加重實踐環節占用總評成績的比例,從原先的10%-15%增加到20%。改變傳統模式下主要依靠平時作業、課堂表現和期末考試成績的評價模式。增強實踐環節比重,旨在督促學生參與實踐、編寫程序和撰寫報告。
第二,在課堂教學中,提綱挈領地講解C++、Java語言程序庫的不足之處,使學生明確具備編寫數據結構代碼能力的重要性。
第三,針對多種數據結構,講解其在操作系統、[4]數據庫[5]和編譯器中的實際應用。開源軟件為“數據結構”教學提供了大量的實際案例。通過介紹數據結構的實際應用,提升學生的學習興趣,提高學生對實踐環節的重視程度和興趣。
最后,盡早明確實驗任務和目標。讓學生在教學過程和實踐環節中明確認識到,只有按部就班,才可以完成實驗任務。在實踐環節中,不能隨著學生的完成情況無限制地增加題目的要求和難度,而應做到因材施教,因人而異。
2.提升學生程序設計能力
教材是學生入門和提高的主要材料。筆者選用人民郵電出版社陳慧南編著的《數據結構:使用C++語言描述(第2版)》作為“數據結構”課程的教材。該教材2007年入選普通高等教育“十一五”國家級規劃教材,其中對每一種主要的數據結構均給出了C++代碼實現。與傳統經典教材[2,3]相比,省略了學生將偽代碼轉換為可執行代碼的中間過程。學生在實現基本數據結構時可直接參考教材程序完成。該教材列出了“數據結構”中使用的C++知識點,并指導學生在課后自行開展有針對性的復習。通過邊復習、邊學習的方式,部分同學能夠克服程序設計能力不足的缺陷,建立理解和實踐“數據結構”課程的信心。
針對許多學生僅能理解C++代碼片段,無法將這些代碼片段合成完整的程序問題,筆者通過課堂教學和實踐環節兩個方面加以彌補。在課堂教學中,教師至少編寫一個完整的數據結構實現。通過演示,使學生了解編寫代碼的具體動態流程和技巧。實踐環節中,采用循序漸進的代碼編寫方式,即課堂上先給出對應算法完整程序的框架,并演示程序得到的最終結果,讓學生去填寫框架中的函數內容,接下來要求學生獨立完成一些函數模塊,具體操作方法與文獻[6]中的第一項研究方法相同。實踐表明,采用結對編程、獨立完成實驗報告的方式與獨自完成實踐環節的效果相比較,實踐環節學生平均成績高5~7分。
3.及時反饋實踐結果
鼓勵學生在編寫代碼前,首先編寫測試用例。一方面有助于學生了解代碼中的邊界條件,考慮代碼實現中的各種特殊情況。另一方面也有助于學生在編寫代碼的過程中及時獲得反饋。避免傳統編寫代碼方式所導致的程序無法正常運行的情況,增強學生的信心。
第二,指導學生編寫代碼的正確次序。例如,在編寫單鏈表類時,先實現構造函數和析構函數,再實現插入函數和打印函數。這樣便可先檢測插入函數是否正常工作,在此基礎上,再完成刪除函數等其他功能函數。這種迭代開發、單元測試,將錯誤局部化的思想對于培養學生正確的程序設計觀念十分重要。指導學生重視代碼重構的工作并鼓勵學生重構代碼,通過介紹編碼規范,強調良好代碼風格的重要性。
第三,指導學生調試程序。針對Visual C++ 6.0集成開發環境和gcc編譯器,總結學生在編碼時常犯的各種編程錯誤,并給出相應的代碼調試方法。通過不斷完善文檔、分發并反饋,從而減輕教師的工作量,培養學生的參與精神和不斷總結的能力。
最后除課后答疑外,筆者還及時通過電子郵件反饋疑難解答和平時成績。教師將有代表性的提問進行總結和群發郵件,使學生能及時掌握自己的最新成績,并允許學生質疑分數的公平性和公正性,制定較詳細的實踐環節評分標準,明確實驗報告的結構,要求學生重視需求分析、概要設計,并要如實撰寫總結和體會部分。許多同學的總結都停留在表面,并沒有總結實際學到的編程知識和調試方法。
以下是在“數據結構”課程實踐環節中的的評分標準:
能獨立查閱文獻資料,較好地理解課題任務并提出實施方案;內容詳實準確、文字流暢,符合規定內容及字數要求;論證、分析、設計、計算、結構、建模、實驗正確合理;用語符合技術規范,圖表、公式清楚;努力學習,遵守紀律,作風嚴謹務實,按期完成規定的任務。
三、實踐環節教學效果
1.課堂和實驗課教學效果
通過課堂講授和實踐性環節鍛煉,學生能端正學習態度,樹立編寫代碼的信心和決心。通過制定合理的編程任務,每個學生都能動手編寫程序。通過動手實踐,加深了對數據結構相關知識點的理解。采用結對編程、測試優先和代碼重構,學生認識到編寫能夠運行的代碼和優秀代碼的差異。有些同學能夠進一步完成更高難度的編程任務,并參加國家級的比賽,如挑戰杯等。
2.實踐環節效果反饋
本次共有97名學生學習“數據結構”課程,每個學生需要完成4份實驗報告。統計結果表明,上交報告的積極性、分析設計的規范性和總結體會,與去年相比,均有很大程度的提高。拖延上交實驗報告的情況從去年的11.0%降低到3.1%,實驗報告的內容更加規范,總結體會內容大多集中在編程過程中遇到的問題及解決方案上。通過填充和擴充代碼兩種編程方法,絕大多數學生完成了數據結構實踐環節的基本任務,如單鏈表的實現等。51.5%的同學能夠完成更加復雜的程序設計任務,如雙向鏈表等。
“數據結構”課程是計算機專業的專業基礎課程,應用范圍非常廣泛。本文分析了數據結構實踐教學中目前存在的一些問題,積極探索和嘗試新的教學方式,在一定程度上調動了學生的積極性,為學生的軟件開發打下了良好的基礎。但對于課程體系的建設及教學方法的改進等問題,仍然需要開展進一步的研究。
參考文獻:
[1]Mehran Sahami.Expanding the Frontiers of Computer Science Education[EB/OL].http://wccce11.unbc.ca/wccce11-sahami.pdf.
[2]嚴蔚敏,吳偉民.數據結構(C語言版)[M].北京:清華大學出版社,2011.
[3]科曼,等.算法導論[M].潘金貴,等譯.北京:機械工業出版社,
2006.
[4]毛德操,胡希明.Linux內核源代碼情景分析[M].杭州:浙江大學出版社,2001.
論文摘要:在建構式教育理論的指導下,以就業需求為目標,針對數據結構教學中教與學目標不明、學習信心和動力不足、編程基礎薄弱等問題,提出建構式的數據結構教學方法,在實際教學中取得較好的教學效果,這些措施也可作為其他計算機專業課程教學的參考。
近年來,在產業界急需大量軟件開發人員的情況下,普通本科院校計算機專業學生的就業率持續走低。網絡、報紙等媒體對計算機本科教育現狀多有批評,甚至出現了大學不如培訓公司的極端觀點,嚴重影響了學生對專業課程的學習興趣、動力和信心。數據結構是計算機專業的核心基礎課程,上承程序設計語言、離散數學,下啟操作系統、編譯原理等課程,其重要性不言而喻。一方面,數據結構學科具有難度大、抽象層次高、概念繁雜等特點,學生很難掌握,更不要說將抽象理論與就業實踐需求相結合。另一方面,國內主流數據結構教材和相應的傳統教學模式側重于培養學生的計算機學科基礎理論素養,而將如何通過組織數據結構教學活動積極推動就業的問題留給了任課教師[1]。這造成了學生學習數據結構的目標不明、信心和動力不足。筆者面向就業需要明確了數據結構的兩大主要教學目標,并在實際教學過程中實踐建構式教育理論,嘗試解決學生對專業認識不清、學習興趣不足、編程基礎薄弱等問題。一些做法得到了學生的認可和配合,成功地激發了學生的學習主動性、在一定程度上培育了學生的創新精神。
1面向就業需求的數據結構教學目標
教育要服務于社會生產需求。數據結構教學也必須緊扣這一根本目標。本節從滿足就業需要的角度闡明了數據結構教學的兩個主要目標:
1) 培養超越具體程序設計語言技巧的編程技術。
現階段是一個傳統的生產生活方式迅速向電子化、信息化轉變的時期。人們需要開發和維護更多、規模更大的計算機系統來滿足生產和生活的需要[2]。這就決定了具有熟練編程技術的程序員在很長時期內都將受到產業界的青睞。大學對學生編程技術的培養始于程序設計語言的教學,如C語言,Java語言等。但是現今編程語言繁多,各種新概念層出不窮,常常出現學生無所適從或者質疑某門語言課程已經過時無用的現象。甚至很多教師也在爭論講授何種編程語言。筆者看來掌握編程技術(而不僅僅是語言),回歸編程的本質問題更加重要,無謂地追趕時髦不可取。作為編程語言課程的后續,數據結構教學的重要目標就是幫助學生理解編程的本質、鍛煉編程技術以及學習提高編程技術的方法。
2) 培養圍繞復用的軟件開發方式。
隨著軟件規模的日益增大,軟件開發模式逐漸從“從無到有”的模式過渡到“從有到有”的模式,即復用現有的豐富的軟件資產,開發新的應用系統。事實上,復用的思想已經被廣泛的用于軟件開發實踐之中,從各種各樣的程序庫、軟件開發包、軟件構件、Web服務等各種可復用資產已經簡化了軟件開發的難度、提高了軟件開發的效率也極大地改變了軟件開發的模式。數據結構學科本身就是對軟件復用思想的一種實踐,它通過總結大量軟件系統中反復出現的數據結構(如表、樹、圖、集合等),定義和實現處理這些數據結構的基本操作,最終達到能夠在不同項目開發中反復應用的目的。這些基本數據結構和算法已經被實現為可復用的產品隨著程序設計語言,如C++ STL、C# collections, Java collections等,并得到了廣泛的使用。因此,數據結構教學的另一個重要目標就是引導學生習慣圍繞復用的軟件開發方式,能夠使用和定制已有的數據結構和算法庫。
其他傳統的數據結構教學目標,如培養學生面向實際問題進行算法設計和分析的能力,培養學生計算機學科的基本理論素養和思維方式等也非常重要。但普通本科院校學生對理論內容的接受能力以及將理論和現實就業需求相聯系的能力相對較弱且教學時間有限[3],筆者認為重點突破本節給出的兩個更具體、更可達的教學目標,并在實現這種具體教學目標的過程中潛移默化地培育學生的計算思維和理論素質,將會取得更佳的效果。
2建構式數據結構教學
教學理論研究以及教學實踐反饋均表明,學生主動學習的效果遠較被動地接受老師灌輸的效果好的多。因此,為實現上述教學目標,在建構式教育理論的指導下,筆者探索并采用了一系列建構式教學措施,激發學生的主動性和興趣,取得了較好效果。
建構主義認為,學習并非學習者對教師所授知識的被動接受,而是學習者以自身已有知識和經驗為基礎的主動建構過程[4]。知識不僅是通過教師傳授而得到,更是學習者在一定的情境中,利用必要的學習資料,通過同化新知識、順化自身知識結構的方式而獲得。建構主義提倡在教師指導下的、以學習者為中心的學習,也就是說,既強調學習者的認知主體作用,又不忽視教師的指導作用,教師是意義建構的幫助者、促進者,而不僅僅是知識的傳授者與灌輸者。學生是信息加工的主體、是意義的主動建構者,而不僅僅是外部刺激的被動接受者和被灌輸的對象。下面從理論教學和實踐教學兩個方面介紹我們采用的一些教學措施。
2.1理論教學措施
課堂教學是數據結構教學活動的主要部分,充分利用課堂教學時間,激發學生學習數據結構的興趣和信心,幫助學生建立學習數據結構的環節非常重要。我們采用了如下措施:
1) 組織小型討論。
好的開始是成功的一半,好的課堂教學須在上課之初就抓住學生的注意力,讓學生帶著輕松、愉快的心情聽課。我的做法是在課堂的前5分鐘,提出一個學生感興趣的話題,組織若干個有3~5位同學參與的小型討論。到一個學期結束時,每位同學都有至少一次的發言機會。討論的主題可以靈活設置,如時事、技術、社會熱點等。有時,課堂中間學生比較疲憊、注意力下降的時候,也可以穿插一點討論,改善課堂環境。大多數學生非常喜歡這種討論活動,積極參與其中,成為課堂的一部分,從被動上課轉變為喜歡上課。
2) 重建理論知識所針對的問題。
國內的經典數據結構教材側重嚴謹的理論,較少討論各種概念、算法出現的背景以及探討的問題是否仍然具有現實價值。而回答這些問題能夠幫助學生重建理論知識所針對的問題原型,重現解決方案的提出、發展乃至最終成熟的整個過程,更有助于培養學生解決實際問題的能力,養成批判性、創新性思考的習慣。眾所周知,關于樹的存儲方法很多,有雙親表示法,孩子表示法和二叉鏈表表示法[5],其中以樹的二叉鏈表表示法使用最廣,但其他存儲方法也有其適合的應用。例如,在利用樹表示各個集合,求集合中的等價類時,雙親表示法更為合適。每一個集合都用樹的雙親表示法存儲時,并設樹的根結點的值為集合名,集合中的每個成員都對應一個結點,這樣很容易找到一個元素所屬的子集(順著雙親指針找樹的根結點)。
3) 組織“我來講”活動。
數據結構涉及很多抽象的概念和算法,初學者很難理解。而教師則對理論內容比較精熟,常常傾向于從理論的角度逐步遞進、展開講解,這就增加了學生的學習難度。教師和學生在教學語言上的鴻溝是影響教學效果的一個重要障礙。教師當然可將抽象的理論概念與生活中更形象的概念進行類比,幫助學生理解,也可以將復雜的算法過程用多媒體動畫模擬出來,直觀地展示給學生,幫助學生掌握。但一方面,根據建構主義理論,教師和學生的知識背景不同,由教師設計概念類比語境和算法模擬動畫實際上仍然是基于教師的知識結構對知識點進行的同化和順化,而不是對學生知識體系的直接建構。另一方面,教師的經驗和智慧有其局限性,未必總能夠找到最適合的類比語境和動畫模擬。為此,筆者采用了充分發揮學生智慧的方法,組織“我來講”活動,要求學生通過設計算法的動畫模擬,創建概念的類比語境等方式進行學習,并隨機選擇學生走上講臺對抽象理論概念和復雜算法進行說明。這樣不但能夠調動學生思考問題,還能幫助那些無法完成自我知識體系建構的同學從學生的視角去理解同一個問題。例如,對于n維數組是元素為n-1維數組構成的線性表這一遞歸的類型定義,可采用符號推理的方式,培養學生的理論素養,而同時可鼓勵學生根據自己的理解將抽象理論具體化,建立幫助理解和記憶的現實語境。
2.2實踐教學措施
數據結構是幫助具有基本編程語言基礎的學生錘煉編程技術的關鍵課程。它揭示了程序設計的基本面,即如何處理相互之間存在一種或多種數據關系的數據元素所構成的集合、如何設計算法并分析算法的優劣。若沒有相應的配套實驗指導學生如何將理論應用于實際問題,只是泛泛而談、紙上談兵,學生容易迷失在數據結構的一連串復雜概念和算法之中,而不知道學習數據結構的意義何在。為實現教學目標,筆者鎖定實驗內容設置和實驗考核等兩個關鍵環節,實踐了如下措施,取得了較好效果。
2.2.1實驗內容設置
實驗內容設置是進行實踐教學的最重要部分。從覆蓋知識點的角度看,實驗內容須面向數據結構教學目標,即實驗內容須能夠鍛煉學生的編程技巧,如算法設計、調試、測試以及調優等能力,還能夠讓學生體會到圍繞復用開展軟件開發的威力以及思路。從覆蓋教育對象的角度來看,實驗內容須面向大多數同學并充分考慮優秀同學,即實驗內容須劃分不同的層次,讓大多數學生能夠很容易入手,并讓有能力、有余力的學生能夠不斷地深入,直至形成綜合型課程設計。
基于以上考慮,并借鑒同行經驗,筆者開展三個層次的實驗教學活動,一是要求所有學生都完成的實驗內容,要求學生采用不同的數據結構實現同一個問題并進行對比分析,例如,分別使用靜態數組和動態分配的連續內存區實現順序表,使用整型、字符型數組或者鏈表實現長整數的乘法,使用帶頭結點或不帶頭結點的循環鏈表模擬約瑟夫環等;二是組織程序設計競賽,讓部分學有余力的同學能夠在算法設計、程序實現和調試、優化等方面得到鍛煉和提高;三是設計綜合型課程設計鍛煉學生解決問題的綜合能力,并通過適當分組,培養學生團隊協作精神和能力,鍛煉學生解決問題的綜合能力的目標,最終達到以點帶面全面提高學生能力的目的。
2.2.2實驗考核手段
考核手段在教學環節中至關重要。考核手段是學生學習和鍛煉自身能力的風向標。為保證每位同學都能積極完成實驗并有所收獲,避免抄襲和敷衍的現象,筆者采取了綜合型的考核手段。其一,提交實驗成果,即程序及其運行結果;其二,記錄實驗過程、分析實驗結果以及總結實驗得失的實驗報告,對實驗報告進行選優講評,培養學生撰寫科學實驗報告的能力;其三,每位同學必須面向教師講解自己編寫的程序,包括主要思路和細節性語法,優秀的同學可走上講臺宣講自己的實驗方案和程序設計技巧。這就基本杜絕了學生相互之間抄襲程序和實驗報告的現象,使得學生真正能夠思考問題,并盡力動手完成實驗。綜合上述三種手段的綜合型考核方法既能夠達到督促大部分同學完成實驗、鍛煉動手能力目的,又能夠達到培養優秀同學的目的。特別地,優秀同學宣講活動能夠使學生觀摩到如何從學生的視角從無到有的解決問題的過程,這能夠培養學生解決實際問題的信心并激發其學習積極性。
3應用中遇到的問題
建構式教學模式在應用和推廣過程中遇到的主要問題來自三個方面。其一,目前學生的課業負擔較重,習慣于被動“填鴨”而不習慣于主動“求索”,這是推動和開展建構式教學模式的主要障礙。其二,建構式教學活動,需要師生的密切交流,但現有師資不足難以滿足實際需求。一個可能的解決方法是綜合多門課程和多個老師,建構整體的知識框架和學習體系,避免課程教學中的重復勞動,提高師資的利用率。另一個可能的解決方法是利用互聯網技術,建立在線教學園地。其三,建構式教學模式仍然處于探索階段,各學科缺乏建構式教學素材。從筆者在實踐教學的體驗來看,應盡量從學生的學習背景和能力成長規律出發而不僅僅是從學科背景出發,為學生建構知識體系設計更平滑的路線。
4結語
筆者提出將“培養超越具體程序設計語言技巧的編程技術”和“培養圍繞復用的軟件開發方式”作為普通本科院校的數據結構教學目標,在建構式教育理論的指導下,設計并實踐了一系列建構式教學措施,分析了應用建構式教學模式所遇到的一些問題。
未來將開展兩個方面的工作。一是通過問卷調查、統計分析等手段定量地分析建構式教學方法的實際效果;二是創造和積累建構式教學素材,如研究數據結構課程設計過程中不同類型學生的知識建構路線,挖掘并推廣其中優秀的知識建構方法。
參考文獻
[1] 教育部高等學校計算機科學與技術教學指導委員會. 高等學校計算機科學與技術專業發展戰略研究報告暨專業規范(試行)[M]. 北京:高等教育出版社,2006:8-101.
[2] 蔡敏,鄭尚志,梁寶華.“數據結構”課程教學改革之我見[J]. 計算機教育,2009(4):50-51.
[3] 揭安全,李云清,楊慶紅,等. 項目教學模式指導的“數據結構與算法”教學改革[J]. 計算機教育,2008(22):21-23.
關鍵詞:數據結構;高職高專;實踐教學改革
中圖分類號:G642 文獻標識碼:A 文章編號:1007-9599 (2012) 15-0000-02
1 課題研究的背景及意義
“數據結構”是計算機專業及相關專業的一門重要專業基礎課程,是計算機專業教學計劃中的核心課程之一,在整個專業教學中占有極其重要的地位。對于高職高專學生來說,該課程具有一定的抽象性和動態性,在學習和理解上有較大的困難。因此,必須通過實驗環節加強對理論知識的理解和掌握,通過算法設計和上機實踐,培養學生數據抽象和程序設計能力是“數據結構”課程教學別需要重視的環節。
實驗教學是高職高專院校教學過程中一個重要的環節,是理論聯系實踐的橋梁。它不僅要培養學生掌握和深化知識的能力,更重要的是要引導學生掌握科學的思維方法,提高綜合分析問題和解決問題的能力,進而提高學用結合的實踐能力。所以,進行“數據結構”課程實踐教學改革,一者是提高教學質量,改變高職院校教學現狀的迫切需要,勢在必行;二者,學生能力的培養已成為現代教育的重心,教師應該在促進學生一般能力全面提高的同時,更應該對學生分析問題和解決問題的綜合創造能力給予特別的關注,該課題的研究對提高學生的綜合素養和能力有一定的作用;再者,本課題的研究過程和成果對于提高其它實踐類課程具有借鑒的作用,進而對整個高職高專院校實驗教學改革的探究起到了基礎性的支持。
2 目前數據結構課程實踐教學中存在的問題
數據結構課程是計算機相關專業的一門專業基礎課程,在相關專業學習過程中起著承上啟下的重要作用。因其專業性、理論性強,內容抽象等特點,被大多數高職高專院校公認為是一門既難學又難教的課程,教學效果一直不理想,教學質量難以提高。經調研,目前大部分高職高專院校在數據結構課程實踐教學中存在以下問題。
其一,數據結構課程本身較強的邏輯性和抽象性決定該課程的難度較大,學生首先從心理上畏懼數據結構,害怕實踐,拿到實驗任務到上機實習,常常茫然不知如何動手。
其二,在傳統的數據結構教學中,大多數實驗配套教材詳細描述了理論課中所有算法的程序實現。每次實驗之前,教師會向學生詳細講解算法的理解、實現過程和運行結果,學生只需照搬教材機械錄入,驗證結果就可以。這樣的教學模式使學生毫無學習興趣,也不用動腦思考,使上機調試變得十分被動,這就失去了開設該課程的意義。
其三,C語言程序設計是數據結構的前導課程之一,學生對它的熟悉掌握程度,直接關系到數據結構課程的實踐教學效果。數據結構課程的理論教學重在算法思想的描述,實驗過程中,大多數學生因程序設計語言基礎差,不能很好的將類C算法描述轉換成計算機能夠接受的程序,甚至有些學生直接復制算法,這樣數據結構的實驗就更困難了。
其四,近年來由于我國高校綜合素質教育要求地不斷提高,各高職高專院校的專業課程普遍存在壓縮課堂學時,導致理論教學進度急促,“重在實踐”的教學理念不知不覺就被忽視。
3 數據結構課程實踐教學改革措施
為了能夠更好的發揮實驗課程的作用,使學生提高程序設計能力,加深理解數據結構研究數據處理方法的意義,同時,提高學生分析問題和用計算機解決實際問題的能力,筆者針對高職高專學生的特點,在實驗課程教學內容設計、培養學生興趣、改進教學方法和過程管理,以及考核方式等經過調研、分析進行了初步探索。
3.1 重視實踐教學內容的設計
以往的實踐教學中大都由教師統一組織實驗,先理論后實踐,實踐只是對理論知識的簡單驗證,教師只關心學生是否來做實驗,而是否會做實驗,實驗的效果如何則并不關注。長此以往,學生對實驗越來越沒有興趣,更談不上實踐能力的提高。
筆者對實踐教學內容體系進行了層次化的設計。嘗試著按基礎性、綜合性、實用性和創新性四個層次構建數據結構課程的實驗教學內容。第一層次,基礎性實驗。針對學生的基本要求,設計基本操作技能方面的實驗項目,其目的是通過實驗讓學生理解并掌握掌基本概念、基礎知識和基本操作,并及時消化課堂教學內容。同時,從基礎性實驗中也會獲得一定的成就感,學習熱情會進一步得到提高。第二層次,綜合性實驗。在一個實驗項目中設計并整合某種數據結構的綜合性實驗,其目的是通過實驗使學生綜合把握某種數據結構的特點,建立完整的概念和設計思路,提高學生綜合運用知識的能力。第三層次,實用性實驗。開發一些實用性強,具有實際意義的實驗項目進行實戰訓練,增強數據結構能夠處理現實問題的依據,提升學生的興趣和自信心,提高實踐能力。如給出“城市間最佳路徑”問題,通過這個實驗項目的分析、設計、編程實現,讓學生體會圖這樣的數據結構如何從現實問題中抽象出來,又如何用來解決現實問題;第四層次,創新性實驗。該部分的實驗主要是針對基礎較好,且能在短時間內完成基礎性和綜合性實驗的學生,給學生自主設計自主選擇的空間,引導學生深化問題,同時鼓勵學生提出新問題,分析新問題,解決新問題。
3.2 開設“數據結構”興趣小組,培養學生的團隊協作精神
學生是教學的主體,只有充分調動學生的學習積極性,激發學習的興趣,才能使實踐教學收到良好的教學效果。在以往的實驗課中,我們不專門分組,要么是自由組合,要么是一窩蜂,多數學生都是蒙混其中,根本起不到實驗的目的。筆者在數據結構實驗課中建立實驗興趣小組,每組4-5人,組中的成員按學習成績和實踐能力優劣搭配,好的帶動差的,差的追趕好的,形成一種濃厚的學習氛圍。在實驗教學的實施中,教師將每次實驗的內容分解且具體到每一個人,既存在各自獨立,又有相互協作,共同完成實驗任務,這樣有助于對知識認識的升華,綜合素質的培養,更有助于長期形成協作習慣,培養學生團隊精神。
3.3 實踐教學方法及過程管理的改進
傳統的實驗教學方法基本上以灌輸、驗證為主,學生學習主動性沒有得到充分發揮。其次,因高職高專院校大量壓縮課時,導致實驗學時受總學時的約束,不可能很多,第三,我們先前采用的課內課外相結合的方式又缺乏全程跟蹤考核與管理。因此,筆者對實踐教學方法以及實驗過程管理提出了實驗項目驅動教學法,以實驗項目為載體構建學習情境,以加強監督實驗過程管理為主體,學生在教師老師的指導下,通過共同學習,相互協作完成一個完整的綜合性實驗。
在實驗項目驅動教學過程中,主要有四個中心的轉變。其一是由以教師為中心轉變為以學生為中心。之前的教學老師講、學生聽,課堂氣氛沉悶,缺乏師生交流;轉變后以學生為主體,教師放開手腳,學生積極參與學習和討論,最大限度地發揮其主觀能動性。其二是由以理論為中心轉變為以項目為中心。過去以理論講授為主,照本宣科,注重基礎理論知識的學習;現在需要教師針對每個單元的知識點,選擇有代表性、難度適中、綜合性的典型算法,合理設計實驗項目,供興趣小組選擇。其三是由以課堂為中心轉變為以實踐為中心。在實驗項目開發過程中,教師對實驗項目進行具體的指導,要求學生寫出每一階段的設計思路和設計原理,撰寫實驗報告和測試結果,寫出自己調試過程中遇到的問題,以及如何解決問題,且對實驗項目設計與實現的回顧討論與分析。四是由以課內管理為中心轉變為以過程管理為中心。過去教師檢查以實驗課堂為主,注重實驗結果,忽視實驗過程;現在要求教師重視課外指導,全程管理實驗進度。教師要詳細制定實驗計劃,合理安排實驗進度,按時下發各階段任務,耐心指導實驗過程,認真驗收各階段任務,及時總結存在問題并反饋于學生。緊緊圍繞這四個中心,開展實驗項目驅動教學法活動,加深理論知識的學習,提高實踐教學效果。
3.4 改革考試方式,加強實驗考核
考試是檢驗教學質量和檢查學生掌握知識水平的一種重要手段。目前我校所有科目的考核模式采用統一的標準,其組成是平時成績占30%(包括課堂提問、到課情況、作業、實驗報告等),期末考試成績占70%,應該說基本體現了重在平時的考核理念。但隨著教學方法和教學環境的改變,該考核模式比較適合理論性強的課程,而對于理論和實踐并重,甚至實踐強于理論的課程,該考核模式就不能取得良好的實驗效果,不能真實地反映學生的學習情況,不能切實達到促進學習的目的。
因此,合理的考核方式是數據結構實驗課程取得良好效果的保證。筆者在遵循學校考試模式的前提下,對該模式進行了細分量化,平時成績的10%是平時表現,主要包括課堂提問、到課情況,以及書面作業;平時成績的20%是實驗表現,主要包括實驗項目的前期準備、實驗過程記錄、實驗問題記錄、實驗結果、實驗報告及實驗總結。筆者在期末卷面考試中,增加了10%~15%的實驗課內容的考核。總之,教師要針對實驗的各個環節提出具體要求和考核標準,定性定量地從各個方面評定實驗成績,調動學生的積極性和自主性,保證實驗教學的學習效果。
4 教學效果分析
為了驗證實踐教學改革措施在數據結構實驗課程中的效果,筆者先后選取信息工程學院計算機應用技術專業09級和10級進行試驗,兩個年級的學生計算機基礎和水平都差不多(參考表1),男女比例也接近(參考表2)。在同一個教師教學的前提下,09級采用傳統未改進的實驗教學模式,10級采用改革后的實驗教學模式,綜合成績測評也采用統一的新考核標準,現將兩個年級的平均綜合成績測評結果統計如下(參考表3):
從以上表格數據可以看出,在保證試驗條件基本相同的條件下,實驗教學改革后的教學模式,提高了學生實驗的積極性和學習興趣,培養了學生對實驗項目實施的解決實際問題的能力,同時,加深了學生對理論知識的理解和鞏固,促進實驗教學效果。
5 結束語
當然,同傳統的實驗教學相比,數據結構實驗教學的一系列改革措施對教師在知識結構和知識素養方面無疑有了更深層次的要求,但教師付出的艱辛與得到的“回報”也是成正比的。因為這是一種集內容設計、興趣培養、教學方法改進、考核制度合理化為一體的過程管理的學習和參與,學生和教師都從中受益匪淺。因此,只要我們提高對數據結構實驗教學目的地認識,端正教學態度,就會不斷探索新的、更適合高職高專院校實驗教學效果的方法。
參考文獻:
[1]黃桂敏,周婭.實踐教學模式的探討[J].桂林電子工業學院學報,2009,5
[2]陳雪剛.數據結構課程教學改革與實踐[J].計算機教育第4期
[3]孟佳娜,孫雪蓮.數據結構實驗教學改革探討[J].大連民族學院學報第3期,2010,5
[4]王楠.“層次性、實例化、開放式”實驗教學模式的探索與實踐[D].大連廣播電視大學
關鍵詞:數據結構;理論教學;實踐教學;教學改革
中圖分類號: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).
關鍵詞:數據結構;實驗教學方案;棧;隊列
中圖分類號: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.
[11]劉光蓉.以計算思維能力培養為導向的C程序設計實驗教學[J].實驗技術與管理,2013,30(1):154-156,191.