• <dd id="ltrtz"></dd>

  • <dfn id="ltrtz"></dfn>
  • <dd id="ltrtz"><nav id="ltrtz"></nav></dd>
    <strike id="ltrtz"></strike>

    1. 歡迎來到優發表網!

      購物車(0)

      期刊大全 雜志訂閱 SCI期刊 期刊投稿 出版社 精品范文

      數據結構課程設計范文

      時間:2023-02-18 00:58:43

      序論:在您撰寫數據結構課程設計時,參考他人的優秀作品可以開闊視野,小編為您整理的7篇范文,希望這些建議能夠激發您的創作熱情,引導您走向新的創作高度。

      第1篇

      關鍵詞:課程內容;結構分析;教師素質;學習能力

      隨著我國綜合實力的不斷增強和國際地位的不斷提升,大學計算機教育的重要性逐漸突顯出來,而計算機教育中數據結構課程則是重中之重。進入21世紀,計算機科學與技術及相關的專業一度成為熱門專業,而數據結構是該學科的基礎課程,要想掌握良好的計算機技術就一定要打好基礎,學好數據結構課程。然而,數據結構課程內容較為抽象、復雜,具有動態性,學生在學習的過程中感覺無從下手,到實踐的過程中更是由于沒有理論知識的支持而感到疑惑重重。因此,培養學生的自信心,激發學生的熱情便成為當務之急。筆者將在下文中結合自己幾年的執教經驗對數據結構課程進行探究,不足之處,還請指教。

      一、數據課程內容及體系結構分析

      數據結構是計算機科學與應用專業的基礎課程,該課程內容主要是介紹了軟件設計中最常見的數據結構及其儲存結構,本課程的難點是數據組織方面的動態儲存結構及遞歸技術。筆者認為,可以從以下幾個方面進行教學:

      1.做到學以致用

      在進行數據課程教學的過程中,教師可以結合實例向學生展示整個課程的內容及每個章節的重難點知識,最大限度地激發學生的學習熱情和積極性,這樣不僅可以使學生對本課程有個大致的了解,使學生很好地掌握理論知識,還可以培養學生運用理論知識解決實際問題的能力,真正做到學以致用。

      2.為學生總結知識框架

      教師要采用科學的方法對教學內容進行整理,為學生總結知識框架,這樣便于學生自主學習。知識框架要由多個相互關聯的模塊構成,便于課程中多種知識的組合。

      3.進行嚴格的訓練

      由于數據課程知識較為抽象,對于一些難度較大,較難理解的知識一定要進行及時、嚴格的訓練,這樣可以很好地培養學生嚴謹的學習態度,在試題之中,教師要適當地考查學生對知識的深入理解情況,便于掌握學生的學習情況。

      4.對疑難點知識的補充教學及總結

      針對數據課程中某些重難點知識,教師一定要進行深入地剖析,并且可以根據實際情況對教材之中的原理部分進行轉化便于學生接受,還可以對教材中未提及的簡易算法等進行補充,使學生便于掌握、理解。

      5.注重對學生能力的培養

      數據課程具有較強的實踐性,在理論教學的過程中隱含了許多重要的技術知識,但教材中多是一筆帶過,使學生很難理解。針對這種情況,教師一定要對教材中沒有展開討論的重點技能性知識進行解析,以培養學生解決問題的能力。

      二、解析課程設計對計算機教師的要求

      課程設計主要是針對學生的學習能力進行的,教師一定要根據學生的實際情況及興趣愛好進行,要注意課題的難度,盡量控制在通過學生的努力可以完成的范圍內,既不要太難,也不要過于簡單。需要注意的是,計算機教師一定要對整個過程進行掌控,如果發現這個課題較難,學生花費了很長的時間也不能解決,教師就是及時進行指導,幫助學生渡過難關。因為,如果經過長時間的思考還沒有解決問題,學生的興趣和信心都會在一定程度上減弱,最終會出現消極心理,這非常不利于學生的發展;不僅如此,還要對數據結構課程的設計進行嚴格的驗收,嚴謹的對待學生的成績評定。在設計完成后,教師要進行現場評定,要充分地檢查各種數據,明確指出設計之中存在的缺陷,以便于學生形成良好的治學態度,此外,對于學生設計中的閃光點,教師也要及時肯定,不吝嗇鼓勵、表揚的語言,使學生感受到教師對其的期望感,激發起學生的學習動力。

      通過對上文的論述可知,對數據結構課程設計進行探究具有重要的意義,對我國整體高校計算機教育事業的發展是大有裨益的。數據結構課程作為計算機技術與應用專業的基礎課程,對該專業學生的未來發展起到很大的作用,我們數據課程教師任重而道遠。盡管在當前的數據結構教育中還存在很多問題,在未來探索的道路上更是阻礙重重,但我堅信,天道酬勤,只要我們廣大高校計算機教育工作者恪盡職守,無私奉獻,不斷對數據結構課程進行探究,一定能夠有效緩解我國當前的教育現狀,為祖國培養出一批又批的綜合素質較高的計算機專業人才,最終為祖國的發展和社會的進步奉獻自己的一份力量。

      參考文獻:

      [1]任雪萍,王立波,趙葆華.融入PIC-CDIO理念的“數據結構”課程教學改革[J].計算機教育,2012(12).

      [2]查建中.面向經濟全球化的工程教育改革戰略:兼談CDIO工程教育模式實施[J].計算機教育,2010(11).

      第2篇

      關鍵詞:數據結構;微課;思維導圖

      一、背景

      數據結構課程作為計算機專業的核心基礎課程,學好數據結構才能為許多后續課程的學習打下良好的基礎。課程要求學生通過理論與實踐學習之后,能掌握各種數據結構以及與之相關的算法的知識,并將這些知識應用到對具體實際問題的分析中。參照ACM/IEEE-CS的《ComputeCurricula2001》報告中提出的數據結構課程內容主題[1]有幾十個,即課程的教學內容多,覆蓋面廣,而且由于很多重要知識的理論性較強,特別是一些難點知識比較抽象而難以理解,所以數據結構是被學生廣泛認為難學、難懂、難實踐的課程。學習的過程通常由“信息傳遞”和“吸收內化”兩個階段構成,采用信息化技術手段開展以微課、慕課、云課程、翻轉課堂為代表的數字化教學是實現知識信息傳遞的有效手段[2]。微課一般是在課堂教學之外,由學生主動參與的輕量化、碎片化、結構化的學習方式,通過良好的課程結構設計,結合短視頻、動畫、語音等手段,能有效地將抽象的知識轉為形象化的內容,從而高效促進學生“吸收內化”的進程。

      二、微課及設計方法

      微課(Microlecture),是指運用信息技術按照認知規律,呈現碎片化學習內容、過程及擴展素材的結構化數字資源[3]。微課課程平臺是學生在課堂教學外的細化教學知識,實現“自主學習”和“個性化學習”的環境,在微課平臺上,學生可按需選擇學習,既可查漏補缺,又能強化鞏固知識,是課堂學習的一種重要補充和拓展。從邏輯結構角度看,一個完整微課課程通常由一系列微課單元構成,一個微課單元除了用來講述該教學主題知識點的課堂教學短視頻及與短視頻配套的描述或解釋的短文這一最重要的核心部分之外,通常還包含與該教學主題相關的練習測試及師生交流等輔教學資源,這些資源共同組成了一個主題式、半結構化的微課教學單元。一個設計良好的微課單元通常具備主題選題精準和內容組織合理的特點。選題精準就是一個微課單元是一個教學主題,在設計這個主題時,要注意這個選題所覆蓋的知識或原理應較為簡單[4],其涵蓋知識點可選2—3個;內容組織合理就是知識內容的組織和分解簡明,將一個教學主題核心知識點和目標分解為若干個子知識點或步驟,這個核心知識點的分解最好只要一層邏輯,盡量不要在子知識點下再分解。

      三、數據結構微課設計過程

      數據結構課程要求學生能合理選擇數據結構,并把與問題相關的數據組織起來實現準確和高效計算處理,所以數據結構的核心概念由數據的邏輯結構及其定義在邏輯結構上的運算、數據的存儲結構以及運算的實現、運算算法的復雜度分析三個方面構成,而且在課程中數據的結構又與其相關的算法纏繞在一起[5],使得在微課設計時所做的知識點分析必須循序漸進地展開,采用由淺到深、由易到難的步驟,再從這個課程的知識體系出發,選取其中的重點、難點、疑點、考點、易錯點、熱點和擴展點,設計和制作一系列既相對獨立,又環環相扣的微課主題單元[6]。

      (一)知識點分析與微課主題單元劃分

      設計數據結構課程的微課時,首先按照課程內容的知識結構來完成各個主題單元的設計和劃分。我國的大部分數據結構與算法的教材[7-8]把課程的知識體系對應到教學內容之后,分成了基本概念和基礎知識、線性數據結構及相關算法、樹形結構及相關算法、圖結構及相關算法四個教學組成部分,這四個組成部分又可分別分成若干子模塊,每個子模塊又可再分成若干主題單元;劃分方法可以使用表格或思維導圖來協助完成。思維導圖是表達發散性思維的有效圖形思維工具,能直觀地把各級主題的關系用相互隸屬與相關的層級圖表現出來[9]。借助思維導圖,我們能有效完成微課課程知識結構的設計工作,圖1是我們設計線性數據結構及相關算法部分的微課主題單元思維導圖。

      (二)微課主題單元設計

      在完成對課程的教學內容主題劃分之后,開始對每個教學主題單元做設計。設計主題單元時要以學生為中心,其內容選擇先考慮突出主題單元中的重點知識點,同時需要保證學生能看懂、能聽懂,就是盡量以生動形象的語言和動畫表達知識點,特別是難點和常見疑點必須演示或解釋得詳細清楚。這里以單鏈表主題單元為例。單鏈表是最簡單的鏈式存儲結構,是深入學習樹與圖(非線性結構)的基礎,其概念及其實現是本節教學的重點和難點內容,我們按照內容介紹的次序來繪制思維導圖,圖中帶星號的是重點知識點。在制作微課資源時,可以針對不同特點的知識點采用不同的講解形式。對于概念性的內容,只需用語言或文字以學生容易理解的方式講述清楚概念,而對一些抽象的內容,可采用圖形、對比表格、動畫等方法來講解。如單鏈表結點與單鏈表結構的知識點,我們采用的是圖形動畫演示配合語音講解方法;在講解單鏈表的實現時,我們采用了代碼單步執行分析與圖形動畫演示相結合的方法來講述,取得了較好的教學效果。

      第3篇

      關鍵詞:數據結構;數據結構課程設計;評價方式

      中圖分類號:TP3 文獻標識碼:A 文章編號:1009-3044(2013)05-1088-02

      數據結構課程內容抽象,信息量大;在學習過程中所用到的技術多,而之前所介紹的專業性知識又不多,因而加大了學習難度;隱含在各部分的技術和方法豐富,也是學習的重點和難點。根據數據結構課程本身的技術特性,設置數據結構課程設計環節十分重要。通過實踐內容的訓練,能達到學生程序思維的訓練和動手上機調試程序能力的增強 , 提高學生組織數據及編寫大型程序的能力。

      1 概述

      當前我國工程教育面臨的普遍問題是:工程教育與社會和產業的需求脫節,包括,工程教育的培養目標與社會需求不一致;工程教育中的質量評估結果不能真實的反映學生的能力;工程教育環境與職場環境相差甚遠。當前工程教育中,很少能體現課程體系,學科之間的關聯很少。關于課程評價和反饋,包括師生雙方地互評。老師評價學生的手段是在學期結束時,給學生一個或好或差的成績。學生從這個結果中,無法得知他需要進一步努力的方向。用人單位無法依據這份成績來判斷這個學生是否符合他們的需求。學生評教制度就是讓學生在某個時間段(比如第14周到第16周)給老師一份評價。學校根據這份評價來考核老師的教學工作是否合格。而評教的根本目的:促使教師改進教學,服務學生,滿足學生學習需求并實現學生學習利益,在很大程度上被忽略。

      數據結構課程設計作為工程教育的一個環節,同樣存在上述問題。另外總共32學時的課時太少,導致學生沒有充分時間去實施系統分析、設計和實施的完整過程。

      學生的語言掌握程度較大程度地影響到數據結構課程設計的實施。往往系統實施的思路是正確的,由于語言不熟練,又缺乏正確的調試手段和調試方法,導致程序無法通過調試或者花費大量時間進行調試。由于沒有軟件工程的思想,系統事先沒有經過周密的設計,程序調試通過,驗收時發現題目理解錯誤,與老師的要求相差甚遠。需要重新設計,編寫代碼,造成學生大量時間的浪費。

      最后,學生的創新能力、溝通和團隊協作能力有待于進一步提高,而這些能力是作為一名工程型和創新型的計算機專業人才所必需具備的。比較顯著的就是溝通問題。在驗收階段,一個簡單問題無法用恰當的語言回答教師。

      2 課程改革的理念和思路

      課程改革的理念是充分利用本校本學院已有資源,結合CDIO理念,提高學生整體計算機專業能力,訓練良好的思維方式,培養扎實的實踐能力,具備創新能力和團隊合作精神。

      課程改革的思路:課程改革從課時數、教學內容、教學方法和評價與反饋等多方面展開。首先是在教學大綱上增加本門課程的學時數。在教學內容上,把程序語言和軟件工程的內容以恰當地形式加入課程設計中。

      在教學方法上,加強思維方式的訓練,強調產學結合,增加學生工程經驗,訓練實踐能力。思維方式的訓練從兩方面展開:在布置任務時,提醒學生按照一定的方法進行抽象,盡量避免手工操作(自動化手段);在驗收階段,針對具體的代碼和算法設計思路,教師提具體的改進方案,并相應地指出可能存在思維誤區。思維方式的形成不是一天就可以完成,希望經過一學期的訓練可以有效地改變部分同學的思維方式。工程實踐(包括工程開發各個環節的實踐)能力提高也是從兩方面展開:一是讓學生經歷工程開發的整個過程;二是提業界真實地案例供學生模仿分析學習。

      評價和反饋從師生雙方互評入手。教師對學生的評價要真實反映當前的知識和能力,讓學生明白自己的優勢和不足。學生對教師的評價真實反映這一學期教師的教學能力和教學態度。讓教師進一步清楚學生具體的學習需求和自身能力提高的方向。

      課程改革的目標包括加深學生數據結構基礎知識的理解,拓展知識面,增強學生實踐動手能力,激發學生的創新和團隊協作能力,訓練學生的溝通表達和思維能力,培養學生具備良好的職業素質,使學生成為一名工程型和創新型的優秀計算機專業人才。

      3 課程改革的內容

      該綜合課程設計預計需要32學時。其中6學時用來幫助學生加強程序設計能力,先由老師講解部分的難點重點(主要是在數據結構實施過程中常用的知識點),然后學生完成一個相對復雜的程序。

      數據結構的課程設計占用中間的26學時。一學期的課程設計需要學生完成3到4個不同章節的題目。由于學生能力水平參差不齊,每章教師給出3到4個難度不同的題目供選擇。這些題目部分來自配套教材,部分由教師自行設計。學生根據自身能力選擇完成其中的一個題目(也可以自主選擇題目,經教師審核后去實施),然后提交教師驗收。在此過程中,誘導學生按照軟件工程的思想去完成各個題目。具體的手段是給學生一個合理的、按照軟件工程思想設計的課程設計指導書。(先設計后實現)

      充分利用學院已有資源,在ACM網站開辟一個數據結構專區,按照ACM競賽的模式設計一些題目供有余力的學生選擇。對于已完成教師安排任務的學生,建議他們注冊登錄學院ACM網站去完成額外的題目,以此增強他們的實踐動手能力。

      課程設計的其中一個重要環節是驗收。它不僅起著評定成績的作用,而且還承擔著訓練思維,提高算法設計和溝通表達能力的作用。程序測試通過后,教師選擇部分感興趣的代碼,要求學生解釋。如果得不到滿意的解釋,教師可以暫停此次驗收。這個環節可以考驗學生的溝通表達能力,以及對系統的理解程度。在一定程度上的杜絕拷貝這種現象,退一步,就算是拷貝也必須完全理解整個系統,強制學生必須實際參與課程設計。

      接著去提高代碼的質量和效率。先一起分析具體的代碼,研究算法的效率有無進一步提高的空間。若有該如何修改,教師根據學生的具體情況,討論確定方案后,交由學生完成。效率提高后的系統,可以在下一次課再次要求驗收。另外,教師需要明確指出明顯不符合計算思維的代碼,要求學生當堂修改。

      最后根據題目難度、完成的質量以及驗收時的表現,給出一個成績并登錄在冊,作為最終成績的一部分。每個驗收的系統必須提交一個配套的課程設計報告。課程設計報告能讓學生學會正確的測試和事后的分析總結,起到部分的自我評價功能。每份課程設計報告也有成績,同樣登記在冊,作為評定最終成績的一個標準。

      在課程設計結束時,老師除了給每位學生的一個成績以外,再對出現的問題進行分析總結并以文檔的形式反饋給學生。內容包括語言的掌握程度以及還存在的問題;數據結構的基本內容掌握情況,提交程序的效率、有無按照軟件工程的思想完成,還需重點解決的問題;創新能力、溝通和團隊協作能力如何等等。

      參考文獻:

      [1] John Malmqvi st. The Application of CDIO Standards in the Evaluation of Swedish Engineering Degree Programmers[J].World Transaction on Engineering and Technology Education,2006,5(2):361-364.

      [2] 查建中. 面向經濟全球化的工程教育改革戰略[J].計算機教育,2010(11):2-7.

      [3] 中國CDIO網站. CDIO簡介[EB/OL].http:///vNews.asp?typeID=30&parentID=29. 2011.

      [4] 茍喜霞.車載導航系統最優路徑規劃的研究[D]. 北京:北京交通大學,2009.

      [5] 任雪萍,王立波,趙葆華.融入PIC-CDIO理念的“數據結構”課程教學改革[J].計算機教育,2012(7):29-32.

      第4篇

      數據結構是計算機科學的基礎理論知識,也是軟件設計的技術基礎。本課程設計的性質是檢驗理論科學系的效果以及綜合運用的能力,目的是訓練學生進行復雜程序設計的技能和培養良好的程序設計習慣。本課程設計的任務是要求學生使用C或C++語言編程,解決具有一定規模的、具有實際意義的應用題,實現理論課所要求的數據組織、存儲、處理的基本方法。

      二、課程設計所用到的工具

      這次課程設計所用到的工具Microsoftvisualc++6.0PC機一臺。

      三、這次課程設計我所選擇的兩個題目

      1、一元多項式計算。

      設計分析

      一)一元多項式計算

      1、需求分析

      要求按照指數將序排列建立并輸出多項式;能夠完成兩個多項式的相加、相減,并將結果輸入。

      2、概要設計

      在分析題目要求的基礎上,我首先設計了一個結構體,定義如下:

      structpoly

      {floatcoef;

      intexp;

      polytypenext;};

      在這個結構體中,定義了一個浮點型的系數coef,還定義了一個整形的指針exp。接下來要做的就是定義各個不同用途的函數,以滿足課程設計的需要,所用到的函數定義如下:

      polytypeCreate_Empty_Node(int);創建一個空鏈表

      voidInput_Values(polytype,int);輸入值

      voidInsert_Node(polytype,float,int);插入接點

      voidAdd_Poly(polytype,polytype);將兩個多項式相加

      voidSub_Poly(polytype,polytype);將兩個多項式相減

      voidOutPut_Results(polytype);將結果在顯示器上顯示

      3、源代碼

      #include"stdio.h"

      #include"stdlib.h"

      typedefintdatatype;/*定義多項式節點的結構*/

      typedefstructnode

      {floatcoef;/*系數*/

      intexpn;/*指數*/

      structnode*next;/*指向結構體的指針*/

      }PotyNode;/*建立連表,返回指向多項式頭節點的指針*/

      PotyNode*Creat_PotyNodeTail()

      {PotyNode*L,*s,*r;/*聲明結構體指針*/

      floatc;/*系數*/

      inte;/*指數,建立頭節點,頭節點指針設置為空*/

      L=(PotyNode*)malloc(sizeof(PotyNode));

      L->next=NULL;/*是指針r指向頭節點*/

      r=L;

      printf("\ninputcoefandexpn:");

      scanf("%f%d",&c,&e);

      while(c!=0)/*輸入的第一項系數不允許為0,防止無意義的輸入*/

      {/*初始化節點*/

      s=(PotyNode*)malloc(sizeof(PotyNode));s->coef=c;s->expn=e;s->next=NULL;

      r->next=s;/*連接節點*/

      r=s;/*指針r指向當前節點,用于連接下一節點*/

      printf("\ncoefandexpn:");

      scanf("%f%d",&c,&e);

      }returnL;

      }/*獲得多項式的長度,參數為多項式頭節點指針*/

      intGetlength(PotyNode*L)

      {PotyNode*p;intcount=0;p=L->next;

      while(p)

      {count++;p=p->next;}

      returncount;}/*獲得指向i節點的指針,在刪除節點的時候來獲得準備刪除的前一節點*/

      PotyNode*GetElem_PotyNode(PotyNode*L,inti)

      {PotyNode*p;intj=0;p=L;

      while(p->next&&j!=i)/*當p不是尾節點,并且不是第i個節點*/

      {j++;p=p->next;}

      if(i==j)

      returnp;/*找到節點*/

      else

      returnNULL;/*沒有找到節點*/}/*刪除節點i*/

      intDelete_PotyNode(PotyNode*L,inti)

      {PotyNode*q,*p;/*獲得節點i的前一個節點,便于刪除節點i*/

      p=GetElem_PotyNode(L,i-1);q=p->next;

      if(q)/*如果P為空,則說明節點p也就是節點i-1就是尾節點,節點i實際并不存在*/

      {p->next=q->next;

      free(q);return1;}

      else

      return0;}/*對輸入的多項式LA,LB進行相加,結果為LC,返回指向LC頭節點的指針*/

      PotyNode*Add_PotyNode(PotyNode*LA,PotyNode*LB)

      {PotyNode*LC,*q1,*q2,*r,*s,*p;

      intx=1;q1=LA->next;q2=LB->next;LC=LA;

      LC->next=NULL;/*指針r是當前指針便于進行各種操作*/

      r=LC;

      while(q1&&q2)/*當多項式LA,和LB都沒有結束的時候*/

      {if(q1->expn<q2->expn)

      {s=q1;q1=q1->next;}

      elseif(q1->expn>q2->expn)

      {s=q2;q2=q2->next;}/*指數相同,相加*/

      else{q1->coef+=q2->coef;

      s=q1;q1=q1->next;q2=q2->next;}/*結果連接到多項式LC*/

      s->next=NULL;r->next=s;r=s;}/*如果LB已結束,把LA剩余的部分連接到LC上*/

      if(q1)r->next=q1;

      if(q2)r->next=q2;/*去除多項式中系數為零的項,我對代碼作了小的修改*/

      p=LC->next;

      while(p->next)

      {if(p->coef==0)

      {p=p->next;

      Delete_PotyNode(LC,x);}

      else

      {p=p->next;x++;}}

      returnLC;}/*打印多項式*/

      voidprint_PotyNode(PotyNode*L)

      {inti;PotyNode*p=L->next;

      for(i=0;i<Getlength(L);i++)

      {printf("%fX%d",p->coef,p->expn);

      if(p->next==NULL)

      return;

      elseprintf("+");

      p=p->next;}}

      voidmain()

      {PotyNode*LA,*LB,*LC;

      intx;

      printf("inputLA(endby0):\n");

      LA=Creat_PotyNodeTail();

      printf("f(LA)=");

      print_PotyNode(LA);

      printf("\ninputLB(endby0):\n");

      LB=Creat_PotyNodeTail();

      printf("\n");

      printf("f(LB)=");

      print_PotyNode(LB);

      printf("\n");

      LC=Add_PotyNode(LA,LB);

      printf("Afteraddf(LA)andf(LB),f(LC)is:");

      print_PotyNode(LC);

      scanf("%d",&x);}

      3、運行結果

      提示輸入一個多項式LA(以0結束)然后輸入每項的系數和指數,輸入后再提示輸入另一個多項式LB(以0結束)然后輸入每項的系數和指數。按回車鍵后得出f<LC>=f<LA>+f<LB>。

      1、需求分析

      1)輸入數據的形式和范圍:可以輸入大寫、小寫的英文字母、任何數字及標點符號。

      2)輸出形式:(1)分行輸出用戶輸入的各行字符;(2)分4行輸出“全部字母數”、

      “數字個數”、“空格個數”、“文章總字數”(3)輸出刪除某一字符串后的文章

      2、概要設計

      a、建立文本,存儲結構用鏈表

      voidCreateTXT(LINE*&head){

      printf("\n請輸入文本,每行最多輸入80字符!\n");

      printf("輸入Ctrl+E(^E)則結束輸入\n");

      LINE*p=newLINE;//首先為鏈表建立一個附加表頭結點

      head=p;//將p付給表頭指針

      chartmp[80];

      b、計算空格數

      intCount_Space(LINE*&head){//統計空格數

      LINE*p=head;

      intasc_space=32;//空格的ASCIC碼值

      intcount=0;

      do

      {intLen=strlen(p->data);//計算當前data里的數據元素的個數

      for(inti=0;i<Len;i++)

      if(p->data[i]==asc_space)count++;}//計算空格數

      while((p=p->next)!=NULL);//遍歷鏈表

      returncount;}

      c、統計數字數

      intCount_Num(LINE*&head){//統計數字數

      LINE*p=head;

      intcount=0;

      do

      {intLen=strlen(p->data);//計算當前data里的數據元素的個數

      for(inti=0;i<Len;i++)

      if(p->data[i]>=48&&p->data[i]<=57)count++;}//計算空格數

      while((p=p->next)!=NULL);//遍歷鏈表

      returncount;}

      d、統計文章的總字數

      intCount_All_Word(LINE*&head){//統計文章的總字數

      LINE*p=head;//保存鏈表的首地址

      intcount=0;//總字母數

      do

      {count+=strlen(p->data);}//計算當前行內的字符數!除''''\0''''結束符外!注意,該統計包含“空格的長度!”

      while((p=p->next)!=NULL);//遍歷鏈表

      returncount;}

      3、源代碼

      /*definemacrovariables*/

      #definetrue1

      #definefalse0

      #include<stdlib.h>

      #include<stdio.h>

      #include<malloc.h>

      #include<string.h>

      #include<conio.h>

      #defineSTACK_INIT_SIZE100/*variablesinthesavestoragespace*/

      #defineSTACKINCREMENT10/*incrementofdistributioninthesavestoragespace*/

      typedefstruct

      {char*base;/*beforeandafterthecreatingoftheshed,baseisNULL*/

      char*top;/*shedpointer*/

      intstacksize;/*thesavestoragespacedistributivebytheelement*/

      }SqStack;

      SqStackS,q;

      /*constructastructuerarray*/

      typedefstruct{

      charcc[9999];

      intno;}Array;

      /*definethewholebureauvarible*/

      Arraya[10000];

      intm,n,i,j;

      charname[40];

      chart=''''\n'''';

      FILE*fp;

      /*constructanemputyshed*/

      voidInitStack()

      {S.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));

      if(S.base==NULL)

      exit(1);

      S.top=S.base;

      S.stacksize=STACK_INIT_SIZE;}

      /*usingcharactershed,acceptthedatafromtheterminal*/

      voidpush(chare)

      {if(S.top-S.base>=S.stacksize)

      {/*applyanewroom*/

      S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));

      if(!S.base)

      exit(1);

      S.top=S.base+S.stacksize;

      S.stacksize+=STACKINCREMENT;}

      /*acceptthenextcharacter*/

      *S.top++=e;}

      /*carrythewholedatainthestackintothedatasection*/

      charpop()

      {chare;

      if(S.top==S.base)

      returnfalse;

      e=*(--S.top);

      returne;}

      /*emptythedatainthestack*/

      voidClearStack()

      {S.top=S.base;/*letS.topandS.basepointtothesameplace*/}

      /*destroythestack*/

      voidDestroyStack()

      {free(S.base);/*freethedatainthestack*/

      S.top=S.base;}

      /*judgetheemputyoftheshed*/

      intStackEmpty()

      {if(S.top==S.base)

      returntrue;

      returnfalse;}

      /*takeoutthedatafromthestackandtheputinthestucterarray*/

      voidBuffer(){

      n=0;m=1;

      /*movethedataintheshadeuntillthestackisempty*/

      while(S.top!=S.base)

      {n=n+1;

      a[m].no=a[m].no+1;

      a[m].cc[n]=*(S.top-1);

      S.top--;}}

      /*savethedata*/

      voidsave()

      {printf("\n\nfilename:");

      scanf("%s",&name);

      fp=fopen(name,"wb");

      for(i=1;i<=m;i++)

      {for(j=a[i].no;j>=1;j--)

      {fwrite(&(a[i].cc[j]),1,1,fp);}

      fwrite(&t,1,1,fp);}

      fclose(fp);}

      /*mainfunction*/

      voidmain()

      {charch,e;

      printf("\n\n\n\t\t\twelcometousethewholescreeneditor");

      printf("\n\npressF6ifyouwanttosavethefile,youcansavethefilewhenyousee\"^Z\"\n");

      printf("\n******************************************************************************\n\n");/*SqStackS_stack,D_stack;*/

      InitStack();/*InitStack(D_stack);*/

      ch=getchar();

      while(ch!=EOF)

      {while(ch!=EOF&&ch!=''''\n'''')

      {switch(ch)

      {case''''#'''':e=pop();break;

      case''''@'''':ClearStack();break;

      default:push(ch);break;}

      ch=getchar();}

      Buffer();

      ClearStack();

      if(ch!=EOF)

      ch=getchar();}

      save();

      DestroyStack();}

      4、運行結果

      三、這次課程設計的心得體會

      通過實習我的收獲如下

      1、鞏固和加深了對數據結構的理解,提高綜合運用本課程所學知識的能力。

      2、培養了我選用參考書,查閱手冊及文獻資料的能力。培養獨立思考,深入研究,分析問題、解決問題的能力。

      3、通過實際編譯系統的分析設計、編程調試,掌握應用軟件的分析方法和工程設計方法。

      4、通過課程設計,培養了我嚴肅認真的工作作風,逐步建立正確的生產觀念、經濟觀念和全局觀念。

      根據我在實習中遇到得問題,我將在以后的學習過程中注意以下幾點:

      1、認真上好專業實驗課,多在實踐中鍛煉自己。

      2、寫程序的過程中要考慮周到,嚴密。

      3、在做設計的時候要有信心,有耐心,切勿浮躁。

      第5篇

      摘要:本文針對傳統數據結構課程設計教學過程中出現的問題,提出一種案例驅動的數據結構課程設計教學方式,以幫助學生理解和掌握分析問題、解決問題的方法,提高自主學習能力,鍛煉設計創新能力。實踐表明,此教學方式能夠彌補傳統教學的不足,開闊學生的思路,提高自主完成率,達到課程設計目的。

      關鍵詞:課程設計;數據結構;案例驅動;教學改革

      中圖分類號:G642

      文獻標識碼:B

      1引言

      數據結構課程是計算機相關專業的專業基礎課程,屬于專業課程體系中的核心課程。該課程著眼于對基本數據結構進行闡述和分析、講解基本數據結構的應用并介紹典型的基本算法等三個方面,內容比較抽象枯燥,掌握起來相對困難。數據結構課程設計是一門獨立的實驗環節,是對數據結構課程教學理論的延伸和補充,是對理論知識的綜合應用,其目的是發揮學生的主動性,培養學生分析實際問題并加以解決的能力,鍛煉學生的設計創新能力。

      傳統的數據結構課程設計教學輕講授,主要以對學生的單獨輔導為主,督促學生完成課程設計。這種方式存在后文所提及的一些問題,隨著互聯網資源的日益豐富,部分問題更加突出了。為了能讓學生通過課程設計更好的掌握數據結構的內容,我們設計了案例驅動的數據結構課程設計教學改革,實踐證明,該項教改能夠填補傳統教學過程的不足。

      2傳統教學過程中暴露的問題

      (1) 缺乏駕馭全局的能力。本科二年級學生計算機建模能力弱,沒有軟件工程的思想,因而缺乏駕馭全局的能力。軟件工程課程一般都開設在數據結構課程之后,在進行數據結構課程設計前,學生也基本沒有分析、編寫較大程序的經驗,這種情況造成了學生拿到問題后不知該從何下手和如何規劃好課程設計的整個過程。

      (2) 生搬硬套基本數據結構。數據結構教材中都是最原始的數據結構,不進行擴展和修改基本上是不能直接用到課程設計中解決實際問題的,而采用多種數據結構解決問題并加以比較找尋最優方案對于學生來說就更為困難。

      (3) 對高級程序語言掌握不到位。數據結構課程設計是需要用高級程序語言來編寫的,學生對該程序語言的掌握程度直接影響到課程設計的質量,常見的問題包括:變量定義不規范、函數功能劃分不合理、代碼可讀性較差、文件讀寫掌握不好、調試程序能力較弱等。

      (4) 照搬、照抄他人課程設計的現象存在。由于完成課程設計的時間有限,有的學生在無法自主完成的情況下,通過網絡、書籍等方式來查找解題方法。本來通過查閱資料消化吸收他人的解題思路來求解自己的課程設計問題是毋庸置疑的正規途徑,然而一方面課程設計的題目每個學校每屆學生都相對比較固定,致使存在抄襲往屆學生程序的現象,另一方面互聯網的發展使得查找相似題目的課程設計源代碼并非難事。此外,市面上還存在著大量快餐式的課程設計書籍在售,這類書籍良莠不齊,多是搜集、羅列了若干課程設計題目,源碼、光盤附上,草草分析講解了事。許多學生也習慣了這種快餐式的學習,能做到獨立思考、舉一反三的越來越少。

      3案例驅動的數據結構課程設計教學改革特點

      案例驅動的數據結構課程設計教學改革是將案例教學法引入數據結構課程設計教學中,教師通過講解一個完整的案例分析解決過程,輔以多媒體的手段與學生交流、互動,達到培養學生分析并解決實際問題的能力,鍛煉學生的設計創新能力的目的,同時也彌補了目前數據結構課程設計教學重實踐、輕講授的不足,豐富該項課程設計的教學內容。該方法有以下特點:

      (1) 提前熟悉軟件工程思想。案例的分析解決過程就是一個實踐軟件工程思想的過程,學生可以在講解的過程中體會軟件開發的完整流程,進而對自己的課程設計有全局性的考慮。

      (2) 舉一反三,定制合適的數據結構。對于案例講解中所涉及到的數據結構,教師將進行細致的分析。采用不同數據結構解決同一問題,在性能和功能上會有所區別,學生可以在與教師的互動討論中提高對各種數據結構的認識,從而設計適合解決自己課程設計的數據結構,甚至能夠采取多種解法。

      (3) 養成良好的編程習慣。優秀的代碼就像優美的文章一樣能使閱讀者心情舒暢,教師講解的案例都是代碼級別的,定義規范、流程清楚、可讀性強、具備參考價值,這樣就促使學生養成良好的編程習慣。教師以多媒體手段演示代碼的編制調試過程,使學生對編程環境更加熟悉,能夠靈活運用跟蹤、斷點等調試手段,開發過程事半功倍。

      (4) 最大限度避免抄襲課程設計的現象。大多數學生事實上都希望能夠自主完成課程設計,只是因為不會做才導致抄襲往屆學生或是市售相關書籍源碼的現象存在。授之以魚不如授之以漁,通過對典型案例的講授,教師教給了學生解決課程設計的方法,學生找到了突破口,便愿意通過自己的努力完成任務,自己能制作“大餐”,也就不再求助于“快餐”了。

      4典型數據結構課程設計案例分析

      “活期儲蓄帳目管理”是常見的數據結構課程設計題目,下面以其講解過程為例簡單描述一下案例驅動的數據結構課程設計教學的過程。

      此課程設計需要實現的功能一般是:(1)采用交互工作方式;(2)實現儲戶開戶;(3)實現儲戶銷戶;(4)向某賬戶存款;(5)從某賬戶取款;(6)排序顯示所有賬戶信息;(7)查詢某賬戶余額;(8)查詢某賬戶交易記錄;(9)所有賬戶及其交易信息存儲至文件,程序運行時從文件中讀入。該課程設計考察的知識點包括:選擇并構造數據結構;使用與特定數據結構相應的算法來實現具體功能;對文件讀寫結構化數據;對程序設計語言的靈活運用等。

      首先應對題目進行大致的分析,該題目包括兩方面的信息。一方面是儲戶的信息,可設計為包含賬號、姓名和余額等字段;另一方面是交易記錄信息,可設計為包括賬號、存取時間、存取標志、金額等字段,兩方面信息通過賬號字段關聯起來。使用順序存儲結構、鏈式存儲結構或樹形結構都可以存儲這些信息,但其中各有利弊。順序存儲結構設計簡單,但容量固定,賬戶插入刪除需要進行記錄的移動,單個賬戶的交易記錄信息存儲不易連續導致列舉時需要對全部交易記錄進行完整遍歷,對已排序順序表查找某一記錄時可以采用特定算法(如二分法)提高效率,總體上來說實用性和整體效率相對較差。鏈式存儲結構設計略復雜,容量不設上限,賬戶插入刪除較方便,采用鏈式結構存儲的交易記錄形式上連續,列舉時很方便,但在查找某一記錄時需要遍歷整個鏈表效率較低,總體上來說實用性和整體效率中上。樹形存儲結構相對最復雜,容量也不設上限,插入、刪除算法也相對復雜,采用特殊樹形結構(如二叉排序樹)能夠提高查找記錄時的效率,交易記錄仍可采用鏈式結構存儲,總體上來說實用性和整體效率較好,現實中的數據庫管理系統(DBMS)多是用樹形結構來實現的。從實現難度上來說,順序存儲最簡單,鏈式存儲次之,樹形存儲最難。因此,對學生一般要求其用鏈式存儲來實現,對能力較強的學生可以鼓勵其用樹形存儲來實現,以鏈式存儲為例繼續討論。

      賬戶信息和存取記錄之間是通過賬號來關聯的,在鏈式存儲結構中可以用指針來表示兩者的聯系,即每個賬戶節點(數據域可包含賬號、姓名和余額等字段)具有兩個指針域,一個指針指向下一個賬戶節點,另一個指針域指向該賬戶的存取記錄鏈表(存取記錄節點的數據域可包含存取時間、存取標志、金額等字段),如下圖所示。

      從功能上分析,儲戶開戶、儲戶銷戶就是在賬戶鏈表中進行插入和刪除操作;對賬戶存、取款時,首先找到相應賬戶,然后添加一條存取記錄,同時修正該賬戶的余額;排序顯示所有賬戶信息,就是對賬戶記錄依據某一關鍵字進行排序并顯示排序結果;查詢某賬戶余額,就是遍歷賬戶鏈表,找到對應記錄并顯示出來;查詢某賬戶交易記錄,就是先找到該賬戶,然后遍歷顯示該賬戶對應的存取記錄鏈表??梢钥闯?,對賬戶鏈表進行遍歷查詢在賬戶存取款、查詢余額和查詢存取記錄是都有用到,因此在設計時,可以考慮編寫查詢賬戶函數,以供其他功能模塊調用。

      在文件存取方面,存取時都是以存儲節點為單位進行的,即一次性存取一個結構體。該課程設計有其特殊之處,有兩種類型的結構體需要存取,即賬戶信息和存取款記錄,這兩種結構體所占用的空間不盡相同,若是都保存在一個數據文件中則需要一定的技巧。以保存記錄到文件為例,可以采用存一個賬戶信息,再存一個整形數,該整形數的數值為此賬戶對應存取記錄節點的數量,然后再逐一保存每條存取記錄,存儲完畢后再用相同方法保存下一個賬戶的記錄。讀取文件過程則是存儲過程的逆過程,這樣可以保證存取時,賬戶信息和存取記錄一一對應,不至于混淆。

      在確定了上述思路后,便可以著手編碼,值得注意的是數據結構的定義。由于采用了鏈式結構,許多同學便直接將鏈式結構的節點(包括指針域)直接存儲到文件中。事實上,這個指針域是沒有保存價值的,尤其在讀取時如果也將指針域讀出并賦值,將很有可能導致不可預知的錯誤。可以采取的方法是,先定義只包含數據域的數據結構體,再定義鏈表節點結構體將數據結構體封裝起來并加上指針域,在文件讀寫時只對數據結構體進行操作。給出該課程設計數據結構參考定義如下:

      typedef struct log //存取記錄

      {

      char DateTime[25]; //存取時間

      char W_D; //存取標志

      float Amount; //存取金額

      } log;

      typedef struct node_log //存取記錄節點

      {

      log data; //存取記錄

      struct node_log *next; //下一存取記錄節點指針

      } node_log, *p_node_log;

      typedef struct account //賬戶記錄

      {

      char ID[10]; //賬號

      char Name[10]; //姓名

      float Balance; //余額

      } account;

      typedef struct node_account //賬戶記錄節點

      {

      account data; //賬戶記錄

      struct node_log *nlog; //存取記錄節點指針

      struct node_account *next; //下一賬戶記錄節點指針

      } node_account, *p_node_account;

      其他功能模塊便可以參照數據結構教材上的相關算法設計實現。

      5結果與結論

      我們將來自3個不同專業(計算機、網絡工程、軟件工程)10個班級的57名同學分成了兩組,一組(試驗組)通過上述方法進行了課程設計教學,一組(對照組)仍采用傳統方法教學,課程設計題目相同。課程設計對比統計情況如下表,其中試驗組優良率達到44%,不合格率13%,對照組優良率21%,不合格率26%。同時,試驗組采用了多種方式來實現了課程設計,且雷同情況較少,對照組多數采用順序存儲方式實現,程序雷同情況較多。很明顯,試驗組的學生思路更加開闊,自主完成率更高。

      時代在變遷,信息獲取更加便捷,部分學生的學習積極性在某種程度上也發生了蛻變,隨之的教學方式也應有所改變,教師應從正面加以引導。在以案例驅動的數據結構課程設計教學改革實踐中,教師通過對典型案例的細致分析,比較不同數據結構的優缺點,一方面使學生更加牢固的掌握了數據結構知識,另一方面讓學生找到入手之門,激發學習興趣,提高動手能力,更重要的是能讓學生掌握分析和解決問題的方法,自主完成課程設計,這對今后其他課程的學習也是有所裨益的。

      參考文獻:

      [1] 張培,肖天慶. 基于網絡環境下教學設計與課程開發的合作模式研究[J]. 電化教育研究,2007,(9):60-63.

      [2] 吳宏偉,張殿龍,梅險. 高校網絡輔助教學的探索與實踐[J]. 計算機教育,2007,(7):18-21.

      [3] 張敏霞. 程序設計語言課程教學方法改革的探索與實踐[J]. 中國高教研究,2004,(2):90.

      第6篇

      (中北大學 計算機與控制工程學院,山西 太原 030051)

      摘要:介紹數據結構課程設計輔助教學平臺的設計過程,說明其構建思路、系統結構和實現方法,闡述該平臺集內容提供、多媒體資料庫瀏覽、流媒體播放和交流互動于一身,采用Adobe Flex、PHP、MySQL、Apache和flash Media Server等技術,以純Flash方式展現,指出使用該平臺可以更好地發揮教師引導、啟發、監控教學過程的主導作用,同時又能充分體現學生作為學習過程主體的主動性和創造性,有利于教師啟發教學和學生自主建構知識體系。

      關鍵詞 :數據結構;課程設計;教學平臺

      基金項目:國家自然科學基金項目(61379125);山西省自然科學基金項目(2012011015-3);山西省高等學??萍紕撔马椖浚?014143)。

      第一作者簡介:龐曉瓊,女,講師,研究方向為信息安全與密碼學,xqpang@nuc.edu.cn。

      0 引言

      數據結構是計算機相關專業的核心基礎課程,根據教學大綱安排,各章節安排相應教學內容的驗證性上機實驗,還設置針對課程內容的綜合設計實驗環節,這是考查學生理論聯系實際動手能力的重要環節,對鍛煉學生發現問題、解決問題的能力也很有裨益。數據結構課程設計實驗步驟如下:需求分析——選擇并構造合適的數據結構——功能函數設計——具體編碼實現——運行測試——完成課程設計說明書。在傳統的教學安排中,實驗過程由學生獨立完成,教師的作用主要是答疑、過程監督和成果驗收等方面,這種強調學生的“學”而忽視教師主導作用的教學過程雖然會涌現出一些優秀的作品,但也存在一些問題:一是學生自由度過大,容易偏離課程設計教學目標;二是部分學生由于缺乏專業訓練,沒有形成正解的思維方法,拿到題目無從下手,只能生搬硬套基本數據結構;三是代碼編寫不夠規范,可讀性差,也不注重文檔的整理;四是存在照抄他人課程設計的現象 [1-3] 。

      數據結構課程設計是個綜合性實踐環節,不僅需要數據結構知識,還是對計算機程序設計語言、離散數學和軟件工程等課程的綜合運用。學生的自主學習和教師的主導學習相結合十分重要,為更好地發揮教師引導、啟發、監控教學過程的主導作用,結合當前互聯網應用開發的主流技術,我們設計實現了數據結構課程設計輔助教學平臺,用于指導和幫助學生完成課程設計。

      1 設計過程

      1.1 目的與思想

      數據結構課程設計輔助教學平臺的主要目的包括:①通過優化學生自主學習環境,完善學習策略,充分發揮教師引導、啟發、監控教學過程的主導作用;②為學生自主建構知識體系創造條件,使學生系統掌握數據結構課程內容、鍛煉和提高編程能力,充分體現學生的主動性、創造性并得到成就感。設計思想主要體現在:①充分發揮互聯網作用,互聯網應用已成為學生課余生活的重要組成部分,教師應因勢利導,利用互聯網對學生進行指導和輔導;②要激發學生的興趣,興趣是最好的老師,教學平臺的界面要美觀大方和簡潔明朗,注重多媒體組件的選擇和使用;③學習環節的設計要貫穿整個課程設計過程,覆蓋不同知識層面的學生;④注重新媒介和新技術的使用,緊跟時展步伐;⑤尊重互聯網規律,在知識大爆炸時代,微課堂、“短平快”是主流,注重化繁為簡和突出重點。

      1.2 內容構建

      (1)教師可結合數據結構實驗環節的特點,挑選綜合性強、涉及知識面廣、適合學生自主創新的經典案例,由教師制作成設計分析講解、代碼編寫講解和運行測試講解等分段視頻,學生根據需要可自主點播。教師通過引導和啟發,開拓學生思維,鼓勵學生自主構造更合理的數據結構,實現更完善的功能。平臺選取的案例均可用多種數據結構實現,適用于不同層次的學生,同時也考查學生對于算法設計、內外排序、文件存取和實現效率等各方面知識點的掌握情況,是對學生綜合能力的考驗。

      (2)為了使學生能夠學以致用,教師可通過咨詢社會上相關領域的工程師、系統分析師和從業人員并對歷屆畢業、就業的學生進行問卷調查,在資源選擇和案例講解中注重理論聯系實際,著力從項目管理、軟件工程、測試驅動開發等方面傳授從業經驗,為提高學生的就業能力打下堅實基礎。

      (3)在教學資源的運用上,教師可提供視頻、音像、文檔、幻燈片、表格、圖形圖像和電子書籍等多種媒體形式,涵蓋數據結構課程設計涉及的C語言程序設計、C++語言、算法設計、離散數學等資源內容;尊重原創者的版權,培養學生的版權意識,對所有引用的資源均詳細標明來源及版權信息。

      (4)注重有教無類,使不同能力水平的學生都能從中汲取養分。對于初級水平的學生,通過學習視頻講解、參考優秀作品和閱讀教師點評,找到完成課程設計的入口,自主完成課程設計;對于能力強、學有余力的學生,通過查看共享資源和在自主探索中挑戰自我,鍛煉駕馭問題的能力,規范編程風格并實踐軟件工程。

      (5)注重溝通交流,授人以漁。平臺中開設釋疑解惑欄目和課程設計論壇,預留微信公眾賬號,學生可以提出問題及求解,促進和強化師生間、學生間的互動交流,從點點滴滴中積累學習。

      2 實現過程

      2.1 系統架構

      數據結構課程設計輔助教學平臺的系統架構如圖1所示。

      數據結構課程設計輔助教學平臺Web服務器采用Apache服務器,以純Flex技術實現,數據庫采用MySQL,由PHP從數據庫中讀取數據形成XML文件提供給Flex使用,用戶通過瀏覽器以HTTP協議訪問該平臺。媒體播放采用兩種形式:一是普通的媒體文件,均以Flash形式提供,包括幻燈片、課件、文檔和書籍等;二是流媒體,通過FMS(Adobe Flash Media Server)流媒體服務器以RTMP協議向客戶端推送。相對于下載后觀看的網絡播放形式而言,流媒體的典型特征是把連續的音頻和視頻信息壓縮后放到網絡服務器上,用戶可以邊下載邊觀看。采用流媒體方式和流媒體服務器還可以減輕服務器的訪問壓力,使得平臺能夠同時處理更多的用戶視頻點播請求。

      2.2 技術特點

      (1)平臺是一個典型的富互聯網應用(rich internet application,RIA),RIA的好處在于比用HTML能實現的接口更加健壯,反應更加靈敏,可視化特性更加出色。RIA的實現技術包括Ajax、Flex和Silverlight等,本平臺使用的是Flex技術。Flex結合了音頻、視頻和實時通訊,用戶體驗極佳,具備桌面應用程序的用戶交互感和傳統網絡應用的部署便利性。

      (2)平臺開發堅持跨平臺、跨瀏覽器的特性,使用技術及組件包括Adobe Flex、Apache、PHP、MySQL、Adobe Flash Media Server等,均具備良好跨平臺特性,后臺服務器支持Windows、Linux和Unix等不同操作系統。平臺以純粹的Flash形式展現,具備良好跨瀏覽器特性,只要裝有Flash Player的瀏覽器都能夠正常瀏覽,支持所有主流瀏覽器,如IE、火狐、UC、Chrome等,客戶端支持Windows、Linux等主流操作系統,同樣也支持移動互聯網以及基于Android、iOS的平板電腦、手機等便攜設備。

      (3)平臺中使用到的視頻、音像、文檔、幻燈片、表格、圖形圖像和書籍等統一轉換為flv格式文件,用戶只需要通過瀏覽器就可以在線查看上述各種形式的媒體資源,不需安裝任何其他插件或應用軟件(如Word、 Excel、 Powerpoint等),充分考慮了客戶端的跨平臺和多樣性。

      (4)視頻點播和視頻直播中采用了FMS(Adobe Flash Media Server)流媒體服務器,該技術是主流的視頻傳播實現技術。通過FMS,流媒體文件將通過RTMP協議向客戶端推送,圖像壓縮率更高,播放流暢清晰。與下載視頻文件到本地后觀看的網絡播放形式相比,流媒體的典型特征是用戶可以邊下載邊觀看,瀏覽速度快,播放中支持拖拽和定位。此外,FMS還具備良好的可擴展能力,可根據用戶群規模增加邊緣服務器(edge server)迅速提高訪問能力。

      (5)流媒體視頻講解中充分利用了電子黑板軟件,結合數位板硬件,在多媒體教學結合“板書”講解,既“現代”又“傳統”,讓教師能夠把握教學的主線,學生有充分的消化時間,彌補了多媒體教學中的不足。

      (6)設計細節上注重界面設計,功能分區清晰、導航明確、操作簡便、提示信息豐富;而Flash的動態特點可以增強平臺的動感效果,使得顏色搭配賞心悅目、色調把握得當并以CSS樣式表統一平臺的風格,提高學生的使用興趣。

      2.3 功能模塊

      平臺目前具備7個模塊,分別是首頁、影音中心、堂件集萃、資源共享、自主探索、優秀作品和釋疑解惑,如圖2所示。

      1) 首頁模塊。

      首頁模塊(如圖3所示)是平臺的門面,介紹平臺的目的和特色,展示最新的信息和媒體介紹。首頁分為4個功能區域:1是新聞區,用來最新的通知、相關信息、教師布置的作業等;2是最新媒體資源展示區;3是平臺的菜單導航區;4是網絡資源鏈接區。

      2) 影音中心模塊。

      影音中心模塊(如圖4所示)集中展現平臺中所有的媒體資源,包括flv形式的流媒體視頻,Flash形式的教學堂件、幻燈片,Flash形式的文檔、表格、書籍、代碼和資料,分為3個功能區域:1是資源類目區,以樹型結構展示;2是媒體放映區,支持各種格式的文檔(如圖5所示),也能進行視頻點播和在線視頻直播;3是資源區,顯示當前類目對應的視頻、幻燈和文檔資源。

      3) 堂件集萃模塊。

      堂件集萃模塊(如圖6所示)以圖像列表方式展現理論課堂教學和案例視頻教學中的堂件,每個堂件均配有標題、所屬類目、內容介紹等文字信息。所有堂件都是以Flash的形式展現,支持聲音、動畫、切換等功能(如圖7所示)。

      4) 資源共享模塊。

      資源共享模塊匯集教師和學生提供的電子書、國內外經典數據結構教材等信息資源和學習輔助材料,每個文檔均注明資源名稱、來源、所屬類目、內容介紹、版權信息等情況。該模塊以文字列表形式展現,通過點擊單條記錄可在線閱覽相應文檔。所有文檔資料均采用FlashPaper形式提供在線閱讀,不需安裝其他插件或軟件。

      5) 自主探索模塊。

      自主探索模塊提供一些課程設計實踐環節要求之外的、富有挑戰性的課題,方便學生開拓思維、勇攀高峰、鍛煉挑戰自我能力,促進學生自學。

      6) 優秀作品模塊。

      優秀作品模塊提供歷屆學生的優秀作品,這些作品均完成得較為出色且富有創新性,具有參考價值,可供廣大學生下載和學習。每個作品都包含作者信息,詳細注明題目要求和設計內容,有些還附有教師點評。

      7) 釋疑解惑模塊。

      釋疑解惑模塊(如圖8所示)是師生之間、學生與學生間互助學習的園地,分為3個功能區域:1區顯示既往學生提出的問題及教師的答復;2區是學生向教師提出問題的區域;3區提供“中北大學數據結構論壇”的鏈接。

      3 結語

      數據結構課程設計輔助教學平臺已在3屆計算機、網絡工程、軟件工程專業學生的數據結構課程設計過程中使用。通過指導教師和每個學生進行一對一答辯的結果來看,學生的課程設計水平有了明顯提高,對數據結構的運用更加靈活,思路也更加開闊,達到了建設該輔助教學平臺的初衷。下一步,我們將設計開發與該平臺對應的微信公眾賬號,使平臺成為師生課余交流的重要途徑。

      參考文獻:

      [1] 龐曉瓊. 案例驅動的數據結構課程設計教學改革實踐[J]. 計算機教育, 2009(1): 53-55.

      [2] 馬巧梅, 龐曉瓊, 楊秋翔. 數據結構課程設計案例教程[M]. 北京: 人民郵電出版社, 2012: 1-3.

      第7篇

      關鍵詞:數據結構;課程設計;教學過程;實施方法;評價標準

      中圖分類號: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.

      [2] 蘇仕華.數據結構課程設計[M].北京:機械工業出版社,2005.

      中文字幕一区二区三区免费看