數據結構范文
時間:2023-03-29 04:39:14
導語:如何才能寫好一篇數據結構,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務員之家整理的十篇范文,供你借鑒。
篇1
【關鍵詞】數據結構;知識體系;教學設計
1 課程的地位與作用
《數據結構》是計算機科學與技術專業的核心專業基礎課程,是計算機程序設計的重要理論和實踐基礎,是計算機理論與技術的重要基石。《數據結構》上承高級語言程序設計,下啟算法分析與設計,是計算機科學與技術人才素質框架中的脊梁骨,對學生能力培養至關重要,向來是計算機本科教學的重中之重。調查表明已畢業的學生通過他們的工作實踐認為《數據結構》是最有用的課程之一,這也從另一方面說明了該課程的重要性。
計算機科學與技術專業的培養目標之一是掌握計算機科學與技術的基本理論、計算機軟/硬件基本知識及應用技術,《數據結構》在培養目標的實現中具有舉足輕重的作用,是理解計算機科學與程序開發技術的關鍵課程。作為一門重要的專業必修課程,《數據結構》課程既是對以往課程的深入和擴展,也是為將來更加深入地學習其他專業課程打下基礎。課程中所學習的排序問題的算法,以及基本的樹、圖等數據結構,是計算機科學的基本功。B+樹等高級數據結構,也是數據庫、操作系統、編譯原理、計算機網絡等后續課程的基礎。《數據結構》是計算機專業考研的統考課程,也是很多大賽(“藍橋杯”、ACM等)必涉及的知識。
《數據結構》與其它課程關系如圖1所示。
圖1 《數據結構》與其它課程關系
《數據結構》在培養目標中的作用如圖2所示。
圖2 《數據結構》在培養目標中的作用
2 課程的教學目標與主要內容
2.1 課程的教學目標
學習本課程后,應達到下列基本要求:
(1)理解數據結構的基本概念;
(2)熟練掌握線性表、棧、隊列、樹、圖等常用數據結構的基本運算的實現及應用;
(3)熟練掌握排序和查找的常用算法及應用;
(4)能夠對算法進行時間復雜度度、空間復雜度的分析;
(5)培養學生分析數據、組織數據的能力,能夠根據實際問題來選擇合適的數據結構,設計有效的算法。
2.2 教材與主要參考資料
教材
耿國華《數據結構(用C語言描述)》,高等教育出版社,2011年
教材選擇的依據:
(1)該教材跟蹤技術發展需要,體系科學,是“十一五”國家級規劃教材。
(2)該教材理論的闡述由淺入深、通俗易懂。
(3)該教材理論結合實際,配有大量的例題、習題與實習題。
主要參考資料
[1]嚴蔚敏,吳偉民《數據結構(C語言版)》,清華大學出版社,2006年
[2]張銘,王騰蛟,趙海燕《數據結構與算法》,高等教育出版社,2008年
[3]朱戰立《數據結構――使用C語言(第4版)》,電子工業出版社,2009年
[4]王曉東《數據結構(C語言版).》電子工業出版社,2007年
[5]西北大學數據結構精品課程網站
http//:/datastr
[6]北大數據結構與算法課程網站
http:///pkujpk/course/sjjg/
[7]洛陽理工學院數據結構精品課程網站
http//:/sjjg
[8]洛陽理工學院數據結構精品資源共享課程網站
http//:/ds
2.3 知識體系
《數據結構》知識體系可分為分為三大塊,如圖3所示。
圖3 《數據結構》知識體系
數據結構課程的基本知識模塊是以數據的邏輯結構為主線,順序介紹線性結構(線性表、棧、隊列、串、數組、廣義表)、樹形結構、圖結構。在介紹每種數據結構時,再討論其存儲結構以及相關的算法。在介紹完基本的數據結構及其存儲結構和相關的算法后,介紹了兩種常用技術:查找和排序。
3 課程教學內容安排
3.1 課程重點、難點
重點:線性表、棧、隊列、二叉樹、圖典型數據結構的邏輯結構、存儲結構和操作的實現方法,各種典型的排序和查找算法思想。
難點:各種數據結構的操作實現和應用
第1章是對數據結構課程的認識,基本概念比較多,概念要講清楚、準確,第一章要通過豐富的例子講解如何分析算法時間復雜度,這是貫穿整門課程的內容,也是本課程的一個難點,第2章是整個課程的重要基礎,要講得十分詳細,為后面的章節打下良好的基礎,第3章的棧與遞歸的實現是本書的一個難點,要通過例子講透,并且在第6章還要進一步地講遞歸到非遞歸的轉換。第四章內容較簡單,而且學生在高級語言程序設計中學習過字符串,因此留給學生自學,也可以培養學生的自學能力。第五章數組和廣義表一般講解即可。第6章的二叉樹要詳細講解,第7章的幾個關于圖的算法較難,要結合例子講解,第8章中的難點是平衡二叉樹的調整和B樹,要通過例子把算法的思想講清楚,使學生能實際操作。第9章要把各種排序的思想、特點講清楚,特別是較難的希爾排序、快速排序、堆排序、基數排序一定要結合實例講解。
3.2 課時分配
表1 總課時:72;理論授課:58,實驗:14
4 課程實踐環節
數據結構是與實踐緊密結合的課程,學生學習的理論必須經過大量的實踐才能更好的掌握,因此必須強化實踐教學。數據結構實踐分兩部分:一部分是隨課程進行的實驗,另一部分是課程結束后為期一周的課程設計。通過合理、有效地設計上機題目,改進實驗考核方式,調動學生的積極性,啟發引導學生掌握基礎理論并能創新應用,增強學生綜合運用有關知識的能力。
實驗內容包括六個實驗項目,分別為:線性表的基本操作(2學時),棧的基本操作(2學時),隊列的基本操作(2學時),二叉樹的建立及遍歷(2學時),圖的遍歷的實現(2學時),宿舍管理查詢系統(4學時)。其中宿舍管理查詢系統實驗為三性實驗。
課程設計是課程結束后進行的很重要的實踐環節,本課程課程設計給出14個題目,這些題目都是綜合性的,學生可任選一題,完成后要寫出課程設計報告。通過課程設計,使學生進一步理解和掌握所學各種基本知識,培養學生綜合運用所學的理論知識和方法獨立分析和解決問題的能力;訓練學生用系統的觀點和軟件開發一般規范進行軟件開發,使學生具備軟件工作者所應具備的科學的工作方法和作風。
學生完成實驗后,不僅要求學生提交高質量的規范的實驗報告,還要引導學生互相交流,開闊視野。好的實驗作業要放到班級公共郵箱里和所有學生共享。
5 課程的建設情況
5.1 課程資源情況
該課程教學文件完備。通過多年的教學,積累了必要的一些輔助教學資料(包括教學參考書、參考課件、聲像、影像等),并且使用效果良好。補充的學習資料有:
(1)教學網站:http:///sjjg/
http:///ds/
(2)搜集了大量探討數據結構理論與算法、介紹學科前沿動態的中、英文學術論文和碩、博論文,對其分類整理后在課程教學網站上提供下載鏈接,以供學生深入研究、學習;
(3)自編《數據結構實驗指導書》;
(4)多媒體電子教案的紙制版和網絡版;
(5)數據結構與課程實驗指導書的紙制版和網絡版;
(6)自編的算法演示器;
(7)Flash課件和Flash算法演示;
(8)圖書館內,國外優秀的經典教材。
5.2 實驗實習條件
所有實驗在計算機系機房進行,機房現有的實驗平臺功能齊全,課程中所涉及的實驗項目均可在平臺上完成。目前課程實驗大綱中所列的實驗開出率達到100%,實驗教學效果良好。
5.3 課程成果
該課程2010年被評為河南省級精品課程,2012河南省級精品資源課程。
6 教學設計
《數據結構》是一門理論與實踐相結合的課程。由于理論的抽象性,學生難以建立起數據結構的相應算法概念,容易產生畏懼和茫然的情緒。因此教學中在積極引導學生、啟發學生,激發學生學習的積極性。教學以課堂講授為主,同時借助網絡教學平臺,拓展課堂講授的相關知識,便于同學自主學習、鞏固課堂所學內容。另外,組織獨立習題課,針對學生作業中出現的典型問題進行深入探討。
在教學中要貫徹“以理論學習為主線,以課程實驗、課程設計為補充”的教學思想。
6.1 精心組織教學內容
分析學生的需求和現實,同時緊緊抓住教學目的,參考相關院校的教材和教學計劃,取長補短,參考考研大綱、軟考大綱,對課程的內容進行嚴格的篩選,刪除一些較深且應用不是很廣泛的內容,對于重點的內容要精講、細講,而對于有些較簡單且與先修課程交叉的內容(如字符串與數組),就粗講,甚至可以留給學生去自學。這樣重點突出,簡潔明了。在課程內容的安排上由淺入深,循序漸進。對每種數據結構都按三個層次來組織教學內容,并且把這三個層次的思想貫穿于數據結構教學的各個環節。第一個層次,基本概念、方法,這是最基本的內容,學生必須掌握,在學生很好地掌握了這個層次的內容后,可進入第二個層次,基本概念、知識的簡單應用,這一層次是對基本概念、知識加深理解,這個層次學生必須達到。第三個層次就是基本概念、方法的深入應用,把所學的知識、方法串起來靈活運用。要達到這個層次,需經過大量的訓練才行。
6.2 實現數據結構課程與其先修和后續課程的無縫銜接
程序設計語言(如C語言)是本課程的一門非常重要的先修課程,數據庫原理、編譯原理、操作系統是該課程的后續課程,這些課程不能各自為政,而要無縫銜接,教這些課程的老師要互相交流,這樣在講程序設計語言時可以有的放矢的把和數據結構聯系緊密的內容預先告知學生,這樣學生就會對相關知識印象深刻,到數據結構課中就很容易用的得心應手。在數據結構課中講到各種后續課程中用到的數據結構時也告訴學生,并且在后續課程中用到相關數據結構時提醒學生這是這種數據結構在本課程中的應用。這樣使學生的知識一脈相承,使學生在學習各門課程時把知識融會貫通。
6.3 精講多練,加強實踐環節,培養學生分析問題解決問題的能力
數據結構既有大量的理論又是實踐性很強的課程,學生要很好地掌握這門課,必須要有一定的理論知識,又要經過大量的上機實踐。因此,針對應用型本科的特點,在教學過程中,即注重理論,又重視實踐,加大上機實踐的力度。實踐由與理論課同時進行的上機實驗和理論課講授完畢后的課程設計兩部分組成。對所學的每一部分內容都要要求學生完成相應的實驗習題。整個實踐過程要結合教學進度與學生的實際情況,制定實踐的內容。每部分的實驗習題必須精心挑選,和上述三個層次對應,分為基礎與驗證型實驗、設計與綜合型實驗,開發與創新型實驗。既要把基本知識掌握好,又要會靈活運用。基礎與驗證型實驗是基本的、較簡單的題目,主要結合課堂理論教學內容展開,學生可以對在課堂上學到的基本算法進行驗證;設計與綜合型實驗是具有挑戰性的較難的新穎有趣的題目,讓學生充分利用所學的理論知識進行相對較復雜的應用設計,培養學生綜合能力;開發與創新型實驗培養學生的創新意識,提高綜合能力和創新實踐能力。
6.4 多樣化的教學方法
6.4.1 啟發式教學
教師主要起引導的作用,激發學生的學習興趣,發揮學生的學習積極性,與學生進行互動,鼓勵學生對教學內容提出問題,師生共同討論,提高教學和學習水平。鼓勵學生多動腦子進行思考,在學習過程中不拘于以往的解法,對同一個問題可以提出不同的解法,深化對問題的理解。另外還要強調學生自己學會對知識的總結、梳理、推演和挖掘。總結是教學中一個非常重要的環節,不可忽視。通過對所學內容的總結、梳理、推演和挖掘,理清內容的內在聯系,使知識條理化、系統化,加強對知識的理解和掌握,培養學生的歸納總結能力和思維創造能力,對所學內容提煉出精華的東西。(下轉第260頁)
(上接第167頁)6.4.2 對比式教學
對同一問題,引導學生從不同的角度去思考,找出多種方法來解決。比如,在解決約瑟夫環問題時,可以采用循環鏈表作存儲結構,或采用線性表的順序存儲結構,也可以采用數組作存儲結構。這種對同一問題尋找不同算法實現的教學方式,有效地開闊了學生的思路,同時通過對不同算法的比較,加深了學生對算法的理解和掌握。
6.4.3案例教學
通過實例引入知識點。比如講最小生成樹可以通過城市間建立通信聯絡網為例引入最小生成樹及其求解算法,再比如講最短路徑可以通過去旅游選擇最短路徑為例引入最短路徑及其求解方法。
6.5 把課程與考研、軟考、相關競賽有機的結合起來
數據結構是計算機專業考研和軟考的必考科目,在教學過程中有意識地把考研和軟考引入教學中,使學生學完本課程后能夠從容應對考研和軟考中的數據結構題目。組織和鼓勵學生參加程序員,高級程序員證書考試,輔導學生參加各種編程競賽比如ACM大賽。
7 考核方法
要加強平時的學習過程管理,不定時地進行一些隨堂的小測試,課堂提問等。考試以學生完成日常作業和實驗環節為必要條件,期末考試采用筆試方式。成績評定由三部分組成:期末考試占總成績的60%,平時成績占總成績的20%,實驗占總成績的20%,綜合考核學生該科成績。
8 結語
《數據結構》對計算機科學與技術專業的學生來說是非常重要的課程,組織好教學,使學生通過該課程的教學,很好地掌握數據結構的相關知識,為今后的學習奠定良好的基礎是非常重要的。
【參考文獻】
篇2
關鍵詞:數據結構;實踐教學;指針;結構體;C語言
中圖分類號:TP311.12
1 指針和結構體的概念
在程序中定義一個變量,如int x;在編譯時系統就根據定義的變量類型,給這個變量分配相應的內存單元。內存中每個字節都有一個編號,稱為“地址”,在地址所標識的內存單元中存放數據。在程序中,一般通過變量名對內存單元進行存取操作,稱為“直接訪問”,如x=7;printf(“%d”,x);假設定義一個變量p,用于存放整型變量x的地址,int*p=&x;則變量p稱為“指針變量”,我們稱指針p指向x。通過指針p訪問x,稱為“間接訪問”,如*p。
因此定義指針變量的格式是:基類型 *指針變量名;
引用指針變量的格式是:*指針變量名。
結構體將不同類型的數據組合成一個有機的整體,定義一個新的數據類型,格式:typedef struct
{成員列表}結構體名;
結構體變量的引用格式:結構體變量名.成員名。
2 線性結構中指針和結構體的使用
線性結構中數據元素之間是1:1的線性關系,線性表是最基本的線性結構,有順序存儲結構和鏈式存儲結構兩種存儲方法。順序存儲結構是在內存中用一段連續的存儲單元來依次存儲線性表的數據元素,用元素在機內的物理位置相鄰表示邏輯相鄰關系,常借助于數組來表示數據存儲區域。因此順序表類型定義如下:
#define MaxSize 100 // MaxSize是數組的容量,便于后期進行插入運算
typedef char DataType; //程序中的DataType設定為char型,便于統一修改
typedef struct{
DataType data[MaxSize];//data數組用于存放數據元素
int Last;//整型變量last存放當前順序表中最后一個數據元素的下標值
}SeqList;//SeqList為順序表的數據類型
SeqList*L;//定義一個指針變量L
L=new SeqList;//new用來申請順序表的存儲空間,L指向此順序表
順序表表長:L->Last+1
順序表中的數據元素:L->data[0]~L->data[L->Last]
比如順序表的插入運算Insert_SeqList(SeqList *L,int i,DataType x)基本語句如下:
for(j=L->last;j>=i-1;j--)
L->data[j+1]=L->data[j];//從最后一個元素到第i個元素逐一后移
L->data[i-1]=x; //在i位置處插入元素x
L->last++; //表長加1
鏈式存儲結構是用一組任意的存儲單元存放線性表的數據元素,邏輯次序和物理次序不一定相同,元素之間的邏輯關系用指針表示。單鏈表的類型定義如下:
typedef struct Node{
DataType data;//數據域,存儲數據元素
struct Node * next;//指針域,存儲后繼結點的地址
}Lnode,*LinkList;
LNode*p;//定義一個LNode類型的指針變量p
p->data //p所指結點的數據域
p->next //p所指結點的指針域,即后繼結點的存儲地址
LinkList:指向LNode類型的指針變量,通常用于定義頭指針的數據類型,如
LinkList head; //定義了一個頭指針head
比如在p所指向的數據元素之后插入新結點,基本語句為:
LNode*s;//定義一個LNode類型的指針變量s
s=new LNode;//申請結點空間
s->data=x;
s->next=p->next;
p->next=s;//注意:兩個語句的操作順序不能交換。
3 樹形結構中指針和結構體的使用
樹形結構中數據元素之間是一對多的關系,以二叉樹為例,一般采用鏈式存儲結構,便于進行插入、刪除運算。二叉樹類型定義如下:
typedef struct node{
DataType data; //數據域
struct node *lchild,*rchild; //左右指針域
}BiTNode;
typedef BiTNode *BiTree; //指向二叉樹結點的指針類型
如構造二叉樹算法如下:
void CreateBiTree( BiTree*t) //構造二叉鏈表
{ char ch;
scanf("\n%c",&ch);
if(ch=='0') *t=NULL; //讀入0時,將相應結點置空
else{*t=new BiTNode; //申請結點空間
(*t)->data=ch;
CreateBiTree(&(*t)->lchild); //構造二叉樹的左子樹
CreateBiTree(&(*t)->rchild); //構造二叉樹的右子樹
} }
4 圖形結構中指針和結構體的使用
圖形結構中數據元素之間是多對多的關系,一般采用鄰接矩陣進行存儲,存儲頂點和邊(或者弧)的信息。以鄰接矩陣存儲圖的類型定義:
typedef struct{
int visited[MaxV]; //頂點表
int edges[MaxV][MaxV]; //邊表
int vertexN,edgeN; //頂點數和邊數
}Graph;
比如圖的深度優先遍歷算法如下:
void DFS (Graph*G,int v){
int w;
G->visited[v]=1;
for(w=0;wvertexN;w++){
if(G->edges[v][w] && !G->visited[w]) { DFS(G, w); }
} }
5 結束語
指針和結構體在數據結構中頻繁使用,希望通過本文的講解,幫助學生理解結構體定義數據類型的方法,掌握利用指針完成操作的方法,學好《數據結構》這門課程,為后續專業課奠定良好的基礎。
參考文獻:
[1]譚浩強.C程序設計(第二版)[M].北京:清華大學出版社,2002.
[2]劉振鵬.數據結構(第六版)[M].北京:中國鐵道出版社,2010.
[3]楊麗萍.數據結構中指針的應用及分析[J].計算機時代,2012(02).
[4]孔兵.數據結構實驗中指針相關問題[J].教育教學論壇,2014(01).
篇3
關鍵詞:數據結構;教學模式;教學方法
中圖分類號:G424文獻標識碼:A文章編號:1009-3044(2008)24-1219-02
Discussion on the Tteaching Practice of "Data Structure"
CHEN Pei-zheng, ZHANG Hao-ming
(Department of Medical Informatics, Guangdong College of Pharmacy, Guangzhou 510003, China)
Abstract: The course of "Data Structure" is the foundation of computer theory and technology, which is abstruse and hard to understand. It is a discussable topic on the teaching pattern and teaching method. In this paper, to prompt the teaching effect, how to take good teaching method on the process of teaching the course of "Data Structure" are discussed.
Key words: data structure; teaching pattern; teaching method
1 引言
《數據結構》是計算機應用專業的專業基礎課程,也是整個計算機學科體系中的四大支柱課程之一。該課程主要介紹各種離散結構(如表、向量、集合、樹、圖等)在計算機上的存儲和處理,以及一些常用算法。《數據結構》也是一門理論性很強的課程,是從事計算機軟件開發的基礎,對培養學生良好的編程思想和風格也有很大的幫助作用。《數據結構》重在理論,其概念的抽象性、算法的經典性和復雜性、描述語言的先進性,導致在以往的教學中,理論教學和實踐教學未能很好的結合起來,加上通常大學學生的編程經驗相對較少,學習起來難度特別大,被公認為是高校計算機課程中最難學好的課程之一。
2 《數據結構》教學方法和措施
《數據結構》課程具有較高的抽象性,學生普遍反應難學。針對學生的特點,筆者在《數據結構》的課程教學實踐中總結了一些教學方法和措施,并取得了較好的效果。主要體現在以下幾個方面:
2.1 使學生合理認識《數據結構》課程
在課程開始階段,首先要強調這門課程的重要性,及其在計算機學科體系中的地位。數據結構對于計算機專業的學生來說很重要,特別是對于從事計算機專業,特別是軟件開發的人心里都清楚這點。有些愛好計算機的發燒友,自己學習了某種開發工具(編程語言),也能動手編程,但編出的程序總是顯得很“業余”,很難再做修改,或者進行移植,為什么呢?這就是缺乏了學習數據結構這門課程。事實上,凡是真正學習了這門課程,都會認為它是計算機專業與非專業的一個分水嶺。它不僅是計算機專業的核心課程, 也是其他理工科專業的熱門選修課,特別是非計算機專業攻讀計算機輔修專業的學生,或者學習計算機程序設計的其他人員必須要學習的。
2.2 介紹《數據結構》課程的特點和學習方法
說明這門課程的特點。很多同學反映數據結構很抽象、很難學而且內容又多。確實,本課程需要一門程序設計語言的知識(例如C++語言),還需要一些離散數學的知識。有些同學由于沒有這方面的基礎,導致在看書時無法理解各種算法的思想,更無法看懂實現這些算法的程序。針對這種現狀,就要求這些學生首先要補習相關知識,如有必要,還要專門增加課時進行補習。在介紹課程的主要內容時,需要用明白易懂而又概括性強的語言來描述。
數據結構中涉及很多C++算法,學生直接閱讀很困難,事實上所有計算機程序都這樣,讀別人的程序,如果不清楚算法的思想,可能比自己寫程序還難,即使自己寫的程序,過了較長一段時間,再讀會很困難。因此,本人制作的教學課件中,將一些比較重要又較難的算法做成了動畫演示,這樣其中的算法思想看起來就很直觀,易懂。然后,再對照C++算法的每一條語句,來演示其實際變化過程,這樣一步一步理解整個算法,這對同學的幫助很大。還有,準備一些由淺到深的算法過程,讓同學來讀算法寫結果,幫助同學理解算法的意義。
另外,由于數據結構涉及的內容很多,教學中必須說明、區分重點內容,否則教師和學生將花費太多的精力和時間(事實上,輔導時間也不允許)。例如,針對算法描述,我會說明算法思想更重要,而算法的C++函數定義只重點要求幾個基本而典型的算法。事實上,中央電大歷屆的考題是這樣,電大學生的實際狀況也是這樣。在平時教學過程中,特別是期末復習時,我會重點要求各種算法的基本思想,再針對部分算法的C++語言描述重點要求掌握。對這些重點內容,不僅要多講解習題來印證,還要求同學下來完成平時作業,并適當補充一些往屆考題。
2.3 實例教學,形象生動
所謂“實例教學”,就是對課程中的重點、難點內容,選配適當的例題、運用恰當的比喻進行演示和說明,把抽象的內容具體化、形象化,幫助學生理解掌握這些內容,并適當加以引伸,引導并激發學生作進一步的思考和探索。
應該結合學生實際情況,使用更加通俗、形象、生動、直觀的教學語言和教學方法進行講授,注重激發學生的學習興趣,更有效地幫助學生理解和掌握課程內容。例如在講解堆棧和隊列的時候,學生對這兩個概念比較陌生,于是我們通過與日常生活中的疊盤子、食堂排隊買飯等現象聯系起來進行比喻說明,學生不僅聽起來較有興趣,易于理解,而且效果也遠比只單純地念定義要強得多。
從學生的角度來看,通過一個比較有趣的實例,學生可以較容易地弄懂一個較復雜的知識點,在克服困難的過程中會不斷地獲得成就感,從而更大程度地激發他們的求知欲望,逐步形成一個感知心智活動的良性循環,更能激發其繼續學習的欲望。
2.4 重視上機實踐,提高學生的學習興趣
本門課程強調對上機實驗的要求,專門有實驗指導教材,并要求每個實驗都要寫出實驗報告,就這門課程而言,不同教材采用不同的程序設計語言,以前還有自定義的一種語言,而現在都采用實際的計算機語言,例如Pascal語言,C語言,C++語言等,之所以要用一門計算機語言來數據結構的算法,就是要達到這樣一個目的:讓學生在實際上機實踐操作時,在程序的運行、調試過程中,也即與計算機交流的過程,體會計算機解決問題的方式。而當學生意識到這一點后,就會體會到軟件開發的奧秘,激發其興趣,慢慢就會自己上路從事軟件開發工作了。這就是學習數據結構,學習數據組織和對已組織好的數據的基本處理對計算機專業,特別是軟件開發專業學生的深刻影響。
2.5 聯系實際,學以致用
《數據結構》是一門理論性課程,重在對編程思想和風格的培養,簡單的死記硬背一些概念、定義沒有任何的用處,我們講課的目的就是要讓學生在學習完《數據結構》之后,能夠主動的將書中的知識靈活運用到生活中去,所以在教學的過程中聯系實際非常重要。在教學過程中,我們努力使每個知識點都與具體的應用實際聯系起來,促進了學生的理解,提高了他們的實踐應用能力。
例如我們在講授圖的概念時,學生不理解圖的最小生成樹有何用處,于是我們列舉了網絡布線,城市道路建設,郵遞員送信等大量應用實例,同時啟發學生自己去發現其他的一些應用實例。結果學生很感興趣,對這個知識點記憶非常深刻。
2.6 多課程結合,融會貫通
幾乎每一門課程都有前驅和后續課程,《數據結構》也不例外。而且《數據結構》作為一門專業基礎課程,同時又是計算機學科的支柱課程之一,其中的很多知識將貫穿計算機知識學習的整個過程。所以講授《數據結構》更應該注重與其他相關課程的聯系,通過《數據結構》的講解使學生對整個計算機課程有一個較全面的了解,讓學生在頭腦中形成一條清晰的學科主線。
例如在講解稀疏矩陣的時候,我們先簡單回顧《多媒體》課程中圖像壓縮的方法,然后告訴學生之所以可以壓縮圖像,是因為圖像中含有大量的稀疏矩陣,同時,稀疏矩陣的存儲方法和訪問方法會直接影響圖像的壓縮效果和壓縮效率。通過這個例子,學生不但理解了稀疏矩陣的相關概念,同時也將本門課程同《多媒體》課程中的相關知識有機地聯系起來了。
3 結束語
由于《數據結構》是計算機專業的骨干、核心課程,也是大多數學校研究生入學考試的必考課程。因此,對于該課程的教學不僅要從理論上進行探討,還要從內容結構、教學方法等方面進行研究,作者根據自己的教學經驗和體會完成本文,與各位同行交流,希望共同搞好《數據結構》課程的教學工作。
參考文獻:
[1] 周婭.“數據結構”課堂教學與學生創新思維培養[J].桂林電子工業學院學報,2006,26(4):326-328.
篇4
關鍵詞 數據結構 微課 碎片時間
中圖分類號:G642 文獻標識碼:A
數據結構是計算機專業一門重要的基礎課程,其中涉及到了大量難度較大的算法描述,例如在模式匹配中的KMP算法,樹中的二叉樹搜索樹和圖中的迷宮,最短路徑問題等。
學習過程中,學生們普遍遇到的問題是,經常當堂無法領悟難度較大的算法,或者當堂領悟了,過后由于算法的復雜度較高,個別知識點的的遺忘造成無法理順整個思路。但幾乎所有從事計算機編程的學生都會有這樣的反饋:數據結構在實際應用中非常重要且實用。綜上所述,如何提高數據結構課程的當堂授課效果,或者提供一些學生可以很容易自學的課下輔助教學平臺,是非常有意義和值得探討的問題。
“微課”是指以視頻為主要載體,記錄教師在課堂內外教育教學過程中圍繞某個知識點(重點難點疑點)或教學環節而開展的精彩教與學活動全過程。與傳統的教學視頻相比,“微”體現在時間的短和內容的精悍,能夠充分滿足人們生活的快節奏所帶來的利用“碎片時間”進行學習的需求,而移動互聯網的迅猛發展,為這一需求提供了必要的硬件基礎,以手機為載體,隨時隨地觀看微小視頻進行知識的學習和補充成為可能。數據結構課程的微課化是指,利用微課形式,通過視頻,將數據結構中的難點算法進行有效的講解和展示,讓學生或自學人員可以不受時間、地點的限制,進行相關知識點的學習,跟傳統的視頻教學相比,克服了時長(一般為40到60分鐘)所帶來的畏難心理,以10分鐘左右為一個單元,可以在短時間內輕松獲取知識。但這也對視頻的制作和知識點的提煉、組織提出了更高的要求,短小而又精悍,給人以深刻的印象,又能達到學會的目的,是微課制作的難點所在。
以數據結構中的二叉搜索樹為例,二叉搜索的概念其實在現實生活中就經常使用,例如看商品猜價格,就用到了二叉搜索的方式,設計該微課時,就可以以此為切入點,首先通過看商品猜價格游戲的方式進行知識點的引入,在猜價格的過程中,通過軟件編程控制,提示價格猜高或者猜低,最終引導用戶猜中價格,根據用戶猜測的次數給出一個不同的提示,如果成績不理想,用戶可以進一步學習失敗的原因(猜測策略),然后提高猜中效率。興趣是最好的老師,通過這個有趣的開端,大家就有了進一步學習的欲望。接下來是二叉搜索樹的創建,一組需要查找的無序數據,如果組織,才能盡可能地高效地完成搜索任意一個數據的過程,利用二叉搜索樹,可以在避免傳統排序的基礎上,進行高效的查找,于是如何建立出這樣一棵二叉搜索樹,成為大家進一步關心的知識點。通過前期自動演示,學習者可以很容易地掌握算法的思想,然后借助于一些交互功能較強的軟件,可以實現由用戶自己創建二叉搜索樹的過程。通過這一系列的演示過程,用戶可以很容易地學到二叉搜索樹的相關知識點。
以上所說,對于制作微課的人員來講,技術上的難度是存在的,制作者要求會錄制,編輯視頻,還要掌握一些交互式課件的制作軟件,以及聲音的錄制,多媒體合成等等,但教授數據結構課程的教師,不同于其他專業,本身就是從事計算機技術的,有著這方面的獨特優勢,因此,只要根據需求稍加學習,就能很快地掌握這些技術,這也是數據結構課程可以微課化的一個優勢條件。微課質量的好壞,關鍵還在于設計,好的設計可以彌補技術上不足,因此千萬不要因為過于重注技術而忽略設計。
隨著移動互聯網技術的發展,通過網絡進行隨時隨地的學習已經成為一種必然的方式,對于數據結構中較難的知識點,傳統的課堂視頻錄制時間長、效果差,不便于學生利用碎片時間學習,通過巧妙的設計,利用多種形式,多種技術將其呈現為可視化的小視頻,可以大幅度提高學生的學習效果。通過微課這種新型的教學手段,可以讓類似數據結構這種難度大、難理解的課程,更好地輔助學生完成知識點的回顧和難點的掌握,快速地完成復雜算法的學習,為后續課程的學習打下堅實的基礎,對全面提升學習效率有著積極的意義。
篇5
關鍵詞:數據結構;Floyd最短路徑算法;醫院選址;C語言
中圖分類號:G642.41 文獻標志碼:A 文章編號:1674-9324(2014)36-0280-02
一、引言
《數據結構》課程是計算機類、信息管理類、電子商務、經濟類及相關專業的一門重要的專業基礎課程。早在1968年,美國一些學校的計算機系就開設《數據結構》課程。20世紀70年代中后期,我國也開設《數據結構》課程作為計算機專業的核心課程。開設該課程的目的在于讓學者了解數據的計算機外部邏輯結構和計算機內部的存儲結構以及相關操作,它為后續的專業課程,如編譯原理、數據庫原理、操作系統、系統分析與設計等課程提供必要的知識和技能準備。本人認為數據結構學習中的難點包括遞歸程序的閱讀、非線性結構中圖和樹的相關算法,尤其是圖的最短路徑、拓撲排序、關鍵路徑的基本應用,學習難點在于:圖的存儲結構、圖中頂點的定位、圖中各個頂點的訪問方法等。本文試圖就圖的最短路徑算法的學習過程進行探討。在學習中,我們發現:在圖形結構中,節點之間的關系可以是任意的,圖中任意兩個元素之間都有可能相鄰,如果對圖進行操作或者遍歷的話,必須先確定圖中第一個訪問的頂點,才能對其他頂點進行訪問(操作),因此,圖是一種比線性表和樹更為復雜的非線性數據結構。圖之所以仍然作為《數據結構》課程的重要內容出現,是因為圖的存儲結構容易定義和掌握,但是需要通過圖的形式化定義及其相關操作來實現具體問題的求解,這就是我們所說的在《數據結構》的圖中需要掌握的重要知識點。圖的運算已經成為人們解決實際問題的重要工具,比如通過Prim算法或Kruskal算法求最小生成樹以構造最低價的通信網;通過關鍵路徑求解確定一個工程中的“關鍵工程”;通過Dijkstra算法求某個源點到其余各個頂點的最短路徑,解決物流配送的最短路徑選擇;通過Floyd算法計算每一對頂點之間的最短路徑,用于確定設施的選址。本文重點討論Floyd算法在醫院選址問題中的應用。
醫院是社會的重要基礎設施,醫院建設的選址必須本著以人為本、服務社會、經濟效益的原則,如何使群眾就醫路徑較短,是醫院選址需要充分考慮的問題,本文以患者就醫路徑最短為切入點,選址問題轉化為數據結構圖論中的求解最短路徑的問題,并采用Floyd算法對最短路徑問題進行求解,為醫院的選址問題提供定量分析。
二、Floyd算法基礎概念
1.圖:頂點和連線的集合,G=(V,VR),其中V是圖中頂點的有窮非空集合,VR是兩個頂點的關系的集合,即圖中連線的集合。若VR中頂點對是有序的,則為有向圖,否則為無向圖。
2.連通圖:在無向圖或者有向圖G=(V,VR)中,若任意兩個頂點v,w都能找到一條路徑連接v和w,G即為連通圖。
3.網:帶權值的圖稱為網。
4.鄰接矩陣:表示頂點之間連接關系的矩陣。網的鄰接矩陣定義如下:
A[i,j]=w■,(v■,v■)或∈VR∞,其他
三、Floyd算法基本思想
最短路徑問題是數據結構圖論中的一個典型問題,這里的最短路徑,不僅僅指的是距離的長短,還可以引申為經濟費用、時間等廣義上的最短。在數據結構中求解網絡中任意兩個頂點之間的最短路徑的典型算法是Floyd算法。
Floyd算法的基本思想是:從帶權鄰接矩陣出發,若(vi,vj)存在,則存在路徑長度D[i][j],但該路徑不一定是最短路徑,需要進行n次試探。如果存在一個k,且D[i][k]+D[k][j]
四、實例應用
(一)醫院選址問題建模
現假設給定n個村莊之間的交通圖,現在要從這n個村莊中選擇一個村莊建一所醫院,要求離醫院最遠的村莊到醫院的路程最短。
上述問題中,可將地理信息中的交通網絡抽象為數學模型,以頂點表示村莊,以連線表示村莊之間的道路,因此交通圖轉化為由有限頂點和有限條邊組成的無向圖,圖中頂點之間的關系由權值表示,定義權矩陣為前述網的帶權鄰接矩陣,wij的值為村莊之間的道路距離。這樣醫院選址問題就轉化為在全部頂點之間最短距離的最大值中尋找最小值的問題,按照Floyd算法進行運算。
(二)醫院選址算法示例
1.假設有6個村莊,村莊v0、v1之間道路距離為12,v0、v2為3,v0、v4為9,v0、v5為10,v1、v3為2,v1、v4為6,v2、v3為2,v2、v5為6,v3、v4為4,v3、v5為7,v4、v5為4。將6個村莊作為頂點,有直接道路的村莊之間連線,頂點之間的邊所對應的權值為村莊之間的道路距離。
2.按照上文的算法,建立帶權鄰接矩陣D0。
3.第一次迭代,插入v0后計算最短路徑,即兩點之間可以有一個中間點的最短路徑,D1[i][j]=min{D0[i][j],D0[i]+D0[j]}。
4.第二次迭代,插入v1,D2[i][j]=min{D1[i][j],D1[i]+D1[j]},在D1的基礎上構建D2。
5.第三次迭代,插入v2,D3[i][j]=min{D2[i][j],D2[i]+D2[j]},在D2的基礎上構建D3。
6.第四次迭代,插入v3,D4[i][j]=min{D3[i][j],D3[i]+D3[j]},在D3的基礎上構建D4。
7.第五次迭代,插入v4,D5[i][j]=min{D4[i][j],D4[i]+D4[j]},在D4的基礎上構建D5。
8.第六次迭代,插入v5,D6[i][j]=min{D5[i][j],D5[i]+D5[j]},在D5的基礎上構建D6,D6就是最后求得的最短距離矩陣。
9.以各個頂點為源點的最短距離的最大值maxdis={9,9,6,7,9,9},min{maxdis[i]}=6,對應頂點為v2,因此本例的最終醫院選址為v2村莊。
(三)選址算法的C語言實現
1.圖的鄰接矩陣存儲結構表示。
#define MAX_VERTEX_NUM 20 //最大頂點個數
#define INF 100000 //代替∞
vexs; //頂點向量,用于存儲頂點名稱
arcs; //鄰接矩陣
typedef int VRType;
typedef int VertexType;
//圖的鄰接矩陣存儲表示
typedef struct
{
VRType adj;
}AdjMatrix;
typedef struct
{
VertexType vexs; //頂點向量,用于存儲頂點的信息(名稱)
AdjMatrix arcs;
int vexnum,arcnum; //頂點數和弧數
}MGraph;
typedef int DistancMatrix; //距離矩陣
2.主要算法。
void shortesPath_Floyd(MGraph G, DistancMatrix * D)
{
?搖for(v=0;v
for(w=0;w
(*D)[v][w]=G.arcs[v][w].adj;
for(u=0;u
for(v=0;v
for(w=0;w
if((*D)[v][u]+(*D)[u][w]
?搖 ?搖?搖(*D)[v][w]=(*D)[v][u]+(*D)[u][w];//更新最短距離
}
void compare(MGraphG,DistancMatrixD)
{
?搖 for(i=0;i
?搖{
maxdis[i]=0;
for(j=0;j
if(maxdis[i]!=INF&&maxdis[i]
{
maxdis[i]=D[i][j];
maxi[i]=G.vexs[i];
}
}
for(i=0;i
if(maxdis[i]>maxdis[i+1]) //比較maxdis中的最小值,mini為醫院選址
{
min=maxdis[i+1];
mini=maxi[i+1];
}
}
五、結論
實際應用中,醫院選址問題需要考慮眾多因素,可以設置權值為各項耗費總值。本文運用Floyd算法將醫院選址問題進行了量化,并采用C語言實現,在實際的設施合理選擇中,具有一定的理論意義和實用價值。除了選址問題,物流配送的路線選擇、旅游中最短路線的設計等問題都可以通過建立數學模型進行算法設計。在數據結構的學習過程中,我們更需要學會的是如何將實際問題抽象為合理的數學模型,然后設計一個解決該模型的算法,最后進行編程、測試得到最終解答。
參考文獻:
[1]陳燕,曹妍,賈紅雨.數據結構(C語言版)[M].北京:科學出版社,2014.
[2]王軍,王偉,公長春.基于多因素評價法下的社區醫院投資研究[J].中國全科醫學,2010,13(10A):3143-3144.
[3]嚴蔚敏,吳偉民.數據結構(C語言版)[M].北京:清華大學出版社,2009.
[4]王曉東.算法設計與分析[M].北京:清華大學出版社,2011.
[5]趙麗娜,李慧.基于Floyd最短路徑算法的教材中心選址問題[J].中國教育技術裝備,2014,(4):40-42.
篇6
關鍵詞邏輯結構存儲結構操作運算橫向聯系縱向聯系
1引言
數據結構作為計算機核心學科,其主要研究內容:邏輯結構,物理存儲結構,操作(或算法)[1]。通常,算法的設計取決于數據的邏輯結構,算法的實現取決于數據的物理存儲結構。
根據數據元素之間不同特性,把數據結構劃分四種基本結構:(1)集合,(2)線型結構,(3)樹型結構,(4)圖狀結構或網狀結構。針對每種數據結構均從邏輯結構、存儲結構和操作運算等方面進行研究,是貫穿數據結構研究始終的“紅線”,也是數據結構研究的共同切入點,稱之為數據結構的“橫向聯系”。從集合、線型結構等基本數據結構入手,以實現樹形結構、圖或網狀結構等較復雜結構研究,實現數據元素間的關系從簡單到復雜探討,稱之為“縱向聯系”。
2邏輯結構、存儲結構、操作運算的思想模式——數據結構間的橫向聯系
邏輯結構的定義、存儲結構的實現、操作運算的實現是對數據結構研究的基本思想,一種數據結構的研究首先對這三方面內容有一個清晰的探討。
集合數據結構與數學中集合概念是一致的,其邏輯結構元素間只是同屬關系。存儲結構實現只是在計算機內存儲,它的操作就是一些交、差、并、補等。
線型結構是N個數據元素的有限序列,至于每一個數據元素的具體的含義在不同的情況下各不相同,其長度可根據需要增長或縮短,其邏輯結構就是它的數據元素間的線形關系,即一個對一個,一個元素最多有一個前驅,最多有一個后繼。它的存儲結構的實現一般有順序存儲和鏈式存儲兩種方法。順序表是指用一組地址連續的存儲單元依次存儲線性結構中的數據元素,這是一種隨機存取的存儲結構;鏈式存儲是數據元素之間的邏輯關系由結點中的指針來表示并且每一個結點有且只有一個指針域。線性結構的操作中,最基本的操作是在線性結構中插入、刪除數據元素。存儲結構為順序存儲有線性順序表、數組、串等。存儲結構為鏈式存儲結構時有鏈表等。根據線性表的操作的不同便產生了兩種重要的數據結構即棧和隊列,這兩種數據結構是線性結構的典型例子[2]。
樹型結構是一種重要的非線性結構,其中的樹和二叉樹最為常用。直觀看來,樹是以分支關系定義的層次結構,其邏輯結構是一對多的關系,而在二叉樹中是一個根結點對應左右兩個孩子的層次關系。存儲結構的實現當采取順序存儲時用一組地址連續的存儲單元依上而下、自左向右存儲樹中的結點元素。在鏈式存儲結構中可采用二叉鏈表表示法即鏈表中結點的兩個鏈域分別指向該結點的第一個孩子和下一個兄弟結點,樹形結構的最基本的操作是遍歷,其它復雜的操作大部分就是遍歷操作的衍生與擴展。在樹型結構中最有特色的一種數據結構就是二叉樹,其獨特的邏輯結構是每個結點至多有二棵子樹并且還有左右之分,這就決定著它獨特的鏈式存儲結構,每個數據元素有且只有兩個指針分別指向該結點的左右孩子。二叉樹的最基本的操作是遍歷二叉樹,對每個結點的訪問是對其它復雜操作的基礎,例如統計結點個數、統計葉子結點數、交換二叉樹的左右孩子等一些復雜的操作運算均是遍歷二叉樹操作的擴展和衍生。基于二叉樹的遞歸定義可得到遍歷二叉樹遞歸算法,前序遍歷、中序遍歷、后序遍歷二叉樹。
圖狀結構是一種較線型結構和樹更復雜的數據結構,圖的邏輯結構是多對多的關系即在圖形結構中結點之間的關系是任意的。因此在存儲結構中無法以數據元素在存儲區中的物理位置來表示數據元素間的關系。即圖沒有順序映象但可以借助數組的數據類型表示元素之間的關系,用兩個數組分別存儲數據元素(頂點)的信息和數據元素之間的關系信息[3]。另一方面圖的存儲結構也可由多重鏈表實現,即一個由一個數據域和多個指針域組成的結點來表示圖中的一個頂點,其中數據域存儲該頂點的信息,指針域存儲指向鄰接點的指針,但由于圖中各個結點的度各不相同,結點的指針域設定不易確定,則圖的鏈式存儲結構可用鄰接多重表表示法,對圖中每個頂點建立一個單鏈表,第一個單鏈表的結點表示依附于頂點V的邊,每個結點由三個域組成其中鄰接點域指示頂點V的鄰接點在圖中的位置,鏈域指示下一條邊或弧的結點,數據域存儲和邊或弧相關的信息,如權值等。每個鏈表附有一個表頭結點。在表頭結點中除了設有鏈域指向鏈表中第一個結點外還設有存儲頂點的名或其它有關信息的數據域,這樣實現了圖的鏈式存儲。遍歷是最基本的操作也是最重要的操作運算,它是求解圖的連通性、拓撲排序和求關鍵路徑的基礎,然而圖的遍歷比樹的遍歷復雜的多,因為圖的任一頂點都有可能和其余的頂點相鄰接。所以在訪問某個頂點之后可能沿著某條路徑搜索之后又回到該頂點上。因此要設有一個輔助數組V[0..n-1],它的初始值置為假,一旦訪問頂點Vi,便置V[i]為真,這樣避免了同一個頂點被訪問多次,對圖的遍歷有深度優先搜索和廣度優先搜索。圖的深度優先搜索遍歷類似樹的先根遍歷,是樹的先根遍歷的推廣。廣度優先搜索類似樹的按層次遍歷的過程。圖狀結構中復雜的操作大部分都是以圖的遍歷為基礎。
因此無論對于線型結構、樹性結構、網狀或圖,它們都遵循著邏輯結構的定義、存儲結構的實現、操作運算方法的實現模式來實現每種數據結構的類型。在數據結構研究中對每種數據結構的研究只有對它的這三個方面內容的研究,才能對它進行探索、掌握、改進。這是數據結構研究中的基本思想。在數據結構研究中當前面向各專門領域特殊問題的多維數據結構和從抽象數據類型的觀點來討論數據結構,都不能背離這個思想。
3由棧和隊列實現樹、圖的遍歷——縱向聯系
遍歷操作對樹、圖結構是很基礎、很重要的運算,它是實現一個數據結構的核心部分,雖然根據樹、圖的遞歸定義能設計出樹、圖的遍歷的遞歸算法,但從線型結構到樹、圖的發展也是數據結構從簡單到復雜的逐步發展過程。線型結構中棧和隊列是兩個非常重要的數據結構,對于樹、圖的遍歷可用棧和隊列來實現。對樹、圖復雜的數據結構,可通過棧和隊列的操作來實現復雜數據結構的操作,體現了數據結構間的“縱向聯系”。
用棧實現二叉樹的前序遍歷算法:
Statuspreorder(bitreet)
{P=t;
Initstack(s);
Push(s,p);
While(!stackempty(s)){
pop(s,p)
while(p){
visit(p);
push(s,prchild);
p=p-lchild;}
}}
用棧實現二叉樹的中序遍歷算法:
Statusinorder(bitreet)
{p=t;
Initstack(s);
Push(s,p);
P=Plchild;
while(!stackempty){
while(p){
push(s,p);
p=p-lchild;}
pop(s,p);
visist(p);
p=prchild;}}
用棧來實現二叉樹的后序遍歷算法:
Statuspostorder(bitreet){
P=t;
inistack(s);
While(p||!stackempty(s)){
If(p){
push(s,p);
P=plchild;}
ElseIf(!stackempty(s)){
pre=null;
Gettop(s,p);
While(prchild==pre){pop(s,p);
Visit(p);
Pre=p;
Gettop(s,p);}
P=prchild;}
}}}
用隊列實現二叉樹層次遍歷算法:
VoidLayers(bitreet){
if(t){
p=t;
Initqueue(q);
Enqueue(q,t);
while(!empty(q)){
p=Dlqueue(q);
visit(p);
if(Plchild)Enqueue(q,plchild);
if(prchild)Enqueue(q,prchild);}
}
用隊列實現圖的廣度優先搜索算法:
VoidBfs(Graphg,intv){
Visit(v);
Visited[v]=true;
Enqueue(q,v);
While(!emptyqueue(q)){
Dlqueue(g,vex);
For(w=firstadjvex(g,vex),w,w=nextadjvex(g,vex,w)){
If(!visited[w]){visit(w);
Visited[w]=true;
Enqueue(q,w);}}
}}
VoidDfs(Graphg,intv){
Visit(v);
Visited[v]=true;
Push(s,v);
While(!emptystack(s)){V=gettop(s);
For(w=fistadjvex(g,v);w&&!visited[w];w=nextadjvex(g,v,w))
If(!w)pop(s)
Else{visit(w);
Visited[w]=true;
Push(s,w);}}
因為二叉樹、圖的其它的操作大部分是對遍歷基本操作的拓展或綜合應用,靈活運用棧和隊列可實現,并且算法描述比較直觀。線性結構是數據結構學科的基礎,樹、圖的發展在線性結構的基礎上而發展,因樹、圖發展促進著線性結構中和一些算法的完善和改進,線型結構、樹型結構、圖狀結構是緊密相聯的。
4抽象數據類型的研究
數據結構間縱橫聯系明顯且緊密。運用與把握這種“縱橫聯系”,對從抽象數據類型的角度來進行數據結構的學習與研究有著重要的借鑒意義。
抽象數據類型(ADT)的研究越來越被人所重視[4-8],它可理解為數據類型的進一步抽象。即把數據類型和數據類型上的運算捆在一起,進行封裝。引入抽象數據類型的目的是把數據類型的表示和數據類型上運算的實現與這些數據類型和運算在程序中的引用隔開,使它們相互獨立。對于抽象數據類型的描述,除了必須描述它的數據結構外,還必須描述定義在它上面的運算(過程或函數)。抽象數據類型上定義的過程和函數以該抽象數據類型的數據所應具有的數據結構為基礎。它仍遵循邏輯結構、存儲結構、操作運算的數據結構基本思想,所有的抽象數據類型都可有簡單的分類策略獲得,這個策略就是抽象數據類型對象像什么和對它們做些什么。邏輯結構定義、存儲結構表示、操作的實現在抽象類型中它們被稱為數據類型說明、抽象數據類型的表示和抽象數據類型的實現[3]。抽象數據類型具體的表示和實現依賴所采用的語言,用戶可以用某高級語言的固有數據類型和自定義類型并借助于過程和函數來表示和實現抽象數據類型。
5結論
邏輯結構、存儲結構、操作運算等核心方面是貫穿數據結構研究與發展的一條基本線,也是數據結構研究中所看到數據結構間的“橫向聯系”。應用基本數據結來實現復雜數據結構的方法與途徑,這是對數據元素之間關系從簡單到復雜的探討,即為“縱向聯系”。數據結構聯系是對數據結構的整體把握,體現在這種“橫向聯系”和“縱向聯系”之中。靈活運用與把握這種數據結構間的關系,對抽象數據結構類型的研究有重要的借鑒意義,同時對數據結構的實際教學過程有著一定的指導意義。
參考文獻
[1]陸松年.數據結構教程[M].北京:科學出版社.2002年
[2]嚴蔚敏.數據結構(C語言版)[M].北京:清華大學出版社.1997年
[3]帥訓波.數據結構間普遍整體聯系[D].曲阜:曲阜師范大學計算機科學學院.2003年
[4]藍雯飛.數據結構的面向對象描述方法研究[J].計算機工程與應用,2006;42(26):79-80
[5]劉毅.關于Treap數據結構問題的研究[J].計算機應用與軟件,2005;22(8):36-38
[6]胡澤明,岳瑞生,王志剛.嵌入式GIS線要素無縫拼接的數據結及實現算法[J].測繪科學,2006;31(5):102-103
篇7
【關鍵詞】數據結構;算法;軟件設計
1.經典算法的選擇
選擇經典算法的重要性,PASCAL語言的創始人、著名的計算機科學家N.沃思說得好“程序=數據結構+算法”,足以見得算法在程序設計中的重要地位。在合理的數據結構基礎上,算法是對數據結構的操作(運算),是數據處理的核心。在《數據結構》中介紹的基本數據結構有線性表、堆棧、隊列、數組、樹、二叉樹、圖以及相應的算法。一個算法是建立在某種數據結構的基礎上,一個算法不可能脫離數據結構而孤立存在。只有通過學習算法,才能真正掌握某種數據結構。可以說學習《數據結構》的過程基本上是學習各種算法的過程。在眾多的算法中有簡單的、有復雜的、有容易的、有難度大的,在有限的學時情況下,不可能也沒有必要逐一講解每一個算法。大多數的算法,要靠學生自己理解消化。在這種情況下,如何選擇少量的經典算法進行分析講解,顯得尤其重要。一個經典算法往往能起到以一當十、以點帶面的關鍵作用。通過經典算法的分析,一方面讓學生加深對數據結構基本理論的理解另一方面讓學生學習程序設計方法。
選擇好經典算法后下一步就是要對其展開綜合分析,下面以具體的算法為例進行討論。
2.利用經典算法說明基本原理
2.1 經典算法應能體現某個數據結構的基本特征
我們知道線性表順序存儲時其優點是能夠對每個數據元素隨機訪問,存儲密度高,其缺點是插入、刪除操作時需要移動大量的數據元素,操作效率低。“向有序(由小到大或由大到小)的線性表(順序存儲)插入一個新的數據元素”,這一經典算法集中反映了線性表順序存儲的這些特點。
分析:將一個值為X的數據元素插入到有序(由小到大或由大到小)的線性表(順序存儲)中,可以分兩步進行,首先查找到值為X的數據元素在線性表中應有的位置,采用從頭到尾循環比較的方法確定其位置I,然后,將第I個以后的全部數據元素向后移動一個存儲單元,最后將值為X的數據元素存放到第I個位置上,線性表元素個數增1。
【算法1】
PROCEDURE INSERT(V,m,n,X)
//將值為X的數據元素插入到V數組中,(線性表順序存貯在V中)m為最多元素個數,n為當前實際元素個數
IF (m=n) THEN{“OVERFLOW”; RETURN}
FOR I=1 TO n DO
IF (X〈V(I))THEN BREAK
FOR J=n TO I BY -1 DO V(J+1)=V(J)
V(I)=X
n=n+1
RETURN
分析:【算法1】的優點是簡單,便于理解,缺點是:
①循環體內有提前退出語句,不利于結構化程序設計;
②確定新數據元素位置和移動數據元素分兩步進行,有重復操作,可以改進之,將兩步合并一步完成,即將循環比較與移動數據元素同時進行。從線性表的尾部開始向前循環比較,比新數據元素大者后移,直到小于等于時停止。
【算法2】
PROCEDURE INSERT(V,m,n,X)
IF(m=n)THEN{“OVERFLOW”;RETURN}
I=n
WHILE (I〉=1)AND (V(I)〉X)DO {V(I+1)=V(I);I=I-1}
V(I+1)=X
n=n+1
RETURN
分析:注意【算法2】中循環條件,當循環結束后I=0或V(I)〈=X,新數據元素的位置為I+1,【算法1】的時間復雜度為0(2n),而【算法2】的時間復雜度為0(n),效率提高一倍。循環結構是結構化程序設計中最基本最核心的部分,歸納循環條件是關鍵。【算法2】能進一步推廣。
2.2 利用經典算法學習算法設計
經典算法能給學習者以啟示、示范作用。
分析:可以將【算法2】用于對線性表(順序存儲)排序算法中。在直接插入排序算法中,其算法思想是從第2個數據元素開始直到第n個數據元素,逐一插入到已有序的子線性表中。
【算法3】
PROCEDURE SORT(V,n)
FOR I=2 TO n DO
{ Y=V(I)
J=I-1
WHILE (J〉=1) AND (V(J)〉Y) DO {V(J+1)=V(J);J=J-1}
V(J+1)=Y }
RETURN
分析:【算示3】其結構分為雙重循環,外循環完成逐一取數據元素,即取第I個數據元素,內循環完成將第I個數據元素插入到前I-1個已有序的子線性表中。內循環完成的功能可以獨立成為一個子函數(子過程),可以借用【算法2】。這正是結構化程序設計思想的體現,即主程序完成任務的劃分,說明“做什么”,子函數(子過程)完成任務的具體實現,說明“如何做”。結構化程序設計方法采取“分解”的手段來控制系統的復雜性,將大系統劃分為若干個相對獨立的、功能單一的子模塊。一方面子函數(子過程)可以實現軟件的重用性,在不同的程序段有相同的處理過程時調用子函數(子過程),減少軟件開發的工作量;另一方面子函數(子過程)對具體的實現技術細節進行隱藏,便于開發人員集中精力把握軟件開發的核心和主要問題,降低了軟件開發難度,從而保證軟件質量。在利用【算法2】時要稍加修改,見【算法4】。
【算法4】
PROCEDURE INSERT(V,I,X)
//將值為X的數據元素插入到已有序的前I-1個數據元素中
J=I-1
Y=X
WHILE (J〉=1) AND (V(J)〉X) DO {V(J+1)=V(J);J=J-1}
V(J+1)=Y
RETURN
相應的主程序也要作修改,見【算法5】
【算法5】
PROCEDURE SORT(V,n)
FOR I=2 TO n DO
INSERT(V,I,V(I))
RETURN
3.結束語
在眾多的算法中選擇好少量的經典算法對于教好、學好《數據結構》至關重要;經典算法要有助于學生理解對應的數據結構,經典算法的分析要側重于程序設計能力的提高。
參考文獻
[1]歐建圣.數據結構教學研究――經典算法的綜合分析[J].武漢工程職業技術學院學報,2004,16(1):58-60.
篇8
關鍵詞:數據結構;教學效果;存在問題;改革總結
一、課程的重要性
《數據結構》課程是計算機專業中一門重要的專業基礎必修課,它為操作系統、數據庫原理、編譯原理、單片機原理等后續專業課程的學習奠定了基礎。其次,數據結構課程是計算機相關專業的考研專業課之一。該課程的重要性顯而易見。
二、教學中存在的問題
《數據結構》課程的教學目標是全面系統地介紹數據的邏輯結構、存儲結構和算法實現,并介紹常用的非數值計算方法,如數據插入、刪除、排序、查找檢索等,使學生掌握各種數據結構的特點和算法思想,并能結合具體應用,運用各種數據結構和算法解決實際問題。但大部分高校《數據結構》課程的教學效果都不盡如人意,影響課程學致有如下原因:
1.程序設計課程掌握較差,基礎薄弱。
2.實踐機會少,動手能力差。
3.缺乏課外輔導,學生自學時障礙重重。
三、解決方法
鑒于以上幾點,可以從這幾方面進行教學改革:
1.加大對先行課程的重視程度。首先加大C程序設計課程的課時。C程序設計課程是數據結構課程的直接先行課,因此,學好C語言,為后續若干課程的學習打好堅實的基礎。另外,增加數學及線性代數課程的課時。學習算法離不開數學的思想,學習數組的存儲結構也離不開線性代數的應用。最后,增加了32課時的C程序設計課程設計。
2.實際操作方面,計算機專業要求有很高的實際操作技能,而我們的學生在長期被動的學習過程中卻養成了勤于動腦,懶于動手的學習特點,這樣教出的學生卻是不能滿足實際工作要求的。因此,數據結構的實驗教學要緊密配合理論教學,通過相關實驗與課程設計,幫助和加深對數據結構的整體理解,所以在本課程結束前安排兩周實踐進行課程設計,不要求實現過多的項目,但每個學生都要動手去做,親身經歷從需求分析到算法分析,最后的代碼編寫與調試這樣的過程,從而更深刻的理解數據結構的邏輯結構、存儲結構以及在某種具體的存儲結構下的運算及其實現方法。
3.構建《數據結構》網絡視頻課程,加強師生互動環節。為了彌補課外輔導的缺陷,制作與《數據結構》課程內容相適應的視頻,尤其是該課程中典型的算法及其實現過程,學生在課外學習時遇到問題可隨時登錄校園網觀看視頻,進行查漏補缺,達到鞏固知識的效果。另外,在網站上可以設置在線答疑或留言功能,從而實現師生互動。
四、改革成果
根據以上改革方法,經過實施,數據結構課程教學效果頗見成效,簡單做以總結:
1.加大C語言程序設計課程的課時,教師能夠在足夠的課堂時間將課程內容系統化的進行講解,尤其是數組、指針、結構體等重要知識。從而給數據結構課程的學習打下了夯實的基礎。
2.網絡視頻的構建,給學生提供了更為豐富的學習參考資料。學生在課外復習時遇到不理解的算法,隨時登錄校園網觀看視頻,好像再一次回到了課堂,從而解決了疑難問題。另外,校園網上開通了該課程的在線答疑功能,學生可以通過在線答疑功能隨時和任課教師進行溝通。
3.加強數據結構課內實踐與課程設計的實施,學生可以將課堂上的理論知識應用于實踐中。尤其是課程設計的開設,如:簡單文本編輯器的設計與實現、科學計算器的設計與實現等,通過案例讓學生真正體會到數據結構課程的實用性,并從本質上理解該課程的內容。
五、結束語
《數據結構》不僅是計算機科學與技術專業的專業基礎課,也是大多數院校研究生入學考試的專業必考課,因此,《數據結構》課程教學的討論將會持續下去,最終能找到一條行之有效的教學方法。以上是作者結合自己多年教學經驗和體會,提出的若干改革方法,不足之處會繼續探討研究。
參考文獻:
[1]李春葆.數據結構(C語言)[M].北京:清華大學出版社,2013
[2]嚴蔚敏.數據結構(C語言)[M].北京:清華大學出版社,2011
篇9
關鍵詞 數據結構課程;MOOC教學模式;教學設計
中圖分類號:G642.3 文獻標識碼:B
文章編號:1671-489X(2017)01-0037-03
1 引言
隨著互聯網時代的到來,涌現出來一種大規模開放在線課程(MOOC)教育模式。那么什么是MOOC呢?MOOC一詞是由加拿大學者Dave Cormier和Bryan Alexander提出的[1]。MOOC(Massive Open Online Course)是指大規模的免費網絡開放課程。參與MOOC學習的人數規模龐大,全球各地的參與者都可以免費注冊使用MOOC,參與信息提供、評價過程[2]。MOOC的核心是教學設計的改變以及參與者的互動性。
2012年,MOOC在美取得空前成功,Coursera、edX、
Udacity三大課程提供商的興起,給更多學生提供了系統學習的可能[3]。國內的知名大學如北京大學、清華大學、浙江大學等紛紛MOOC課程。MOOC的到來為高等教育帶來新的機遇,可以促進優質教育資源共享和教育公平[4]。
高等教育的傳統教學方式作為主流的教學模式[5-8]不會被替代,但MOOC將導致現有教學體系的全面革新,幾千年來低效率的課堂教學將在今后若干年內有根本性的改變[9]。
在MOOC框架下如何利用一些新技術和新手段提高課程的教學質量?數據結構課程是計算機相關專業的核心專業課程,是一門實用性很強又抽象程度比較高的課程,課程內容抽象、復雜,涉及很多概念和算法技術,學習起來較困難。長期以來,傳統的數據結構課程通過以教師為主體、學生被動學習的模式開展教學,使得學生的學習困難增加,學習興趣得不到激發,教學效果并不理想。本文通過探討數據結構課程的MOOC教學模式,希望通過MOOC提供給學生一種與傳統課堂教學和網絡公開課不同的學習渠道,激發學生的學習興趣,引導學生探索知識,更好地掌握數據結構這門課程。
2 傳統數據結構課程教學存在的問題
通過長期的數據結構一線崗位的實踐摸索和對學生學習情況的調查分析,總結數據結構課程教學過程中主要存在的幾點問題。
學生學習難度大,學習興趣低 數據結構課程主要是培養學生分析解決問題能力,但由于該課程抽象程度高,對學生的抽象思維和邏輯思維能力要求較高,學生學習起來難度較大。如果教學過程中運用生動形象的教學方法,讓學生自發參與學習,不僅教師能夠取得較好的教學效果,提高教學質量,學生也不再是為了考試而死記硬背知識點,而是能真正把所學的知識點與實際應用相結合
傳統教學模式不能滿足教學需求 一直以來,數據結構課程的傳統教學模式都是把教師作為主體,用講授式的教學方法把相關知識點大量傳輸給學生。然而數據結構課程涉及繁多的概念和算法,傳統的教學模式顯然已不能滿足這門邏輯思維能力要求很高的課程,否則教學目的、教學效果都會和預期相差甚大。另外,傳統的教學方式主要是運用黑板和PPT,但PPT很多時候只是代替黑板和粉筆,演示數據結構的算法得到改進,直觀性更強,而學生對數據之間的繁雜關系還是很難想象。并且信息量更大后,難以一直吸引學生的注意力,互動及延續性不能得到很好的改進,教學效果也受到很大影響。
3 數據結構課程MOOC教學模式設計
數據結構課程MOOC制作流程 在進行MOOC課程規劃設計時,要充分了解MOOC教學模式的特點,以期能夠有針對性地對課題進行規劃。數據結構課程的MOOC制作流程如圖1所示。
MOOC課程制作要想做得引人入勝,容易學習消化,需要專業技術團隊的配合,經過專業技術團隊的錄制和后期制作,內容質量和視覺風格都會得到很好的提升,使得課程脫穎而出,取得理想的傳播影響力。
數據結構課程的MOOC教學內容必須合理碎片化 傳統教學是教師把學生召集到指定教室一起學習,這種強有力的組織性形成外在驅動力。在這個驅動力下,學生雖然學習動力低,也會從枯燥的教學內容和呆板的教學方式中學到部分知識點。另外,傳統教學的教學對象是年齡相仿、教育基礎相仿的學生,教師的教學內容容易組織準備。然而,MOOC的學習對象有不同學習目的,來自不同的地方,有著不同的年齡,教育基礎也不相同,因此,MOOC教學模式與傳統教學模式相比,挑戰性更大。開展MOOC教學模式要想增加吸引力,教師要在自己的課程內容設計上下功夫,增強吸引力,推動學生向前走。
在數據結構傳統50分鐘課堂上,一般教師會講授至少30分鐘抽象復雜的知識點。各種心理學研究顯示,人類的注意力最有效的集中時間段是6~10分鐘,超過這段時間就會下降,接受信息的能力也會隨之降低,因此,信息獲取的趨勢必須是碎片化,如此才能被人類更好地接收。MOOC課程教學設計的一個重要內容就是把系統化的知識轉化為碎片化的信息。在數據結構的MOOC教學設計中要把傳統課堂50分鐘教學內容,切分為多個10分鐘的小視頻,把整個課程精確地切分轉化成多個獨立的小視頻講授。這樣不同學習目標的學生可以選擇需要的小視頻學習,每個學生還可以根據自己的業余時間隨時隨地學習,在注意力最集中的時間里學到相關知識點。
碎片的內容要緊扣主題,切割碎片時,內容不可以太長。比如堆排序,如果切割成一個視頻,必然要至少20分鐘,就要把內容進一步碎化,但又要使切割后的內容各成一主題。因此,如何使得內容切割的碎片更合理,使得邏輯組織更清晰,需要在PPT制作部分就考慮這個問題。
數據結構課程MOOC教學小視頻制作要有吸引力和實效 視線引導是吸引學生注意力的一種方式。在傳統課堂上,學生的視線跟隨教師多樣的肢體語言和教鞭等教學工具的指引發生變化,視線也會跟著講臺上教師位置的移動發生變化,增強了對學生的吸引力,讓學生的思路跟隨教師的節奏。在MOOC小視頻制作中,可以通過講授者的動作、動畫播放、PPT放映中文字或者圖片的層次進入以及視頻編輯軟件提供的高亮、筆畫等功能達到同樣的效果。至于講授者和課件是穿插出現的,出現的比例、頻率到底應該多少為宜,并沒有具體的標準,關鍵是保持屏幕上要盡量變化,并且變而不亂、引人入勝。像靜止的畫面,或者充滿文字的畫面,在視頻中不能持續較長時間。
思路引導較視線引導更為重要。課件設計風格應該是簡單的,對所有課件中動畫的設計,原則上是對思考過程的展示,所有無助于此的元素都不必出現。例如:在展示一個復雜算法的偽代碼時,并不是一次性將全部偽代碼放映出來,再逐行講解其功能――這是計算機執行的過程,并不是人類思考的過程;應從整體思路入手,先根據算法流程展示出代碼框架,再逐步演示框架內各個模塊的細化過程,必要時輔以實例的動畫演示。
數據結構課程MOOC教學模式的互動性 傳統課堂上教師習慣于通過提問、設問的方式進行互動,在MOOC教學過程中可以通過在視頻炔迦胩崳省⒃謔悠導湎恫迦氬庋櫚姆絞澆行師生互動,有助于增強教學效果。
在MOOC視頻內插入提問,等同于傳統課堂上教師提出一個簡單問題,用來吸引學生的注意力,避免學生的思維懈怠。在傳統課堂上,教師提出問題后,懈怠的學生可能不會思考,只是等其他學生的回答。但在MOOC教學過程中,看視頻的所有學生必須對插入的問題做出思考及回答,才能繼續觀看視頻。
在MOOC視頻之間插入測驗,是在一個小視頻播放結束后,插入前一段小視頻的相關測驗,學生給出回答結果,MOOC系統會自動判題,立即給出測驗結果。這樣學生盡快發現問題,掌握自己對知識點的理解程度,對于不明白的還可以再次觀看前一段視頻。然而傳統課堂測驗會對教學進度造成影響,而且教師課后批改測驗的工作量會增加,學生存在的問題也不能及時反饋。因此,在師生互動方面,MOOC比傳統課堂的互動效果要更好。
MOOC的互動性優點,除了師生互動,還有生生互動。學生提交的作業是需要交流和分享的,并且還有學生的互評,這是MOOC的一個創新。通過互相之間的分享、觀摩,可以提高學生的學習積極性,端正學習態度,這是傳統的教學互動層次做不到的。
4 總結
數據結構課程重在培養學生的實踐能力,在教學過程中希望通過教學手段如互動式學習等方式來激發學生的學習動力。在設計和實施數據結構課程MOOC教學時,重點要考慮如何組織教學內容,使得碎片化后的內容組織更合理,以滿足不同對象的學習需求,以及如何制作更有吸引力的視頻、動畫或數字特效等,能突出算法的設計、清晰問題的求解思路以及不同方法之間的特點。
參考文獻
[1]王文禮.MOOC的發展及其對高等教育的影響[J].江蘇高教,2013(2):53-57.
[2]楊丹.MOOC(慕課)初探[J].教育教學論壇,2014(12):
105-106.
[3]張銘,奚春燕,彭遠紅.微課:唱響中國MOOC的前奏[J].計算機教育,2013(20):11-13.
[4]蘇小紅,趙玲玲,張彥航,等.MOOC浪潮下,我們該做些什么[J].計算機教育,2015(7):64-68.
[5]邢立峰,邢立群,張曉燕.翻轉課堂模式在計算機基礎課程中的應用研究[J].計算機光盤軟件與應用,2014(24):
231-232.
[6]劉華敏.“翻轉課堂”教學模式的探討:以《數據結構》課程教學為例[J].廣東技術師范學院學報,2016(5):70-72.
[7]張小剛.CDIO理念下的“數據結構”課程實踐教學改進探索[J].赤峰學院學報:自然科學版,2016(10)20-21.
篇10
【中圖分類號】G642 【文獻標識碼】A 【文章編號】2095-3089(2014)04-0147-01
1.引言
隨著計算機處理數據量的劇增,數據之間的關系也越來越復雜。“數據結構”的前期基礎課程有高等數學、離散數學和C語言程序設計等課程;同時又是專業課程操作系統、數據庫原理、圖像處理等課程的基礎,具有承上啟下的作用。由于該門課程實驗性很強,內容抽象不易理解,所以近年來圍繞如何上好該門課程,學校實施了一系列的課程改革,培養學生運用各種算法編寫程序的能力,并初步取得了不錯的效果。
實驗課程是理論課程的檢驗者和發揮者,通過實驗,學生不僅可以驗證一些理論知識的正確性,同時還可以通過靈活多樣性的實驗題目提高上機編程能力,進一步提高軟件設計能力、提高學習的積極性和能動性,并逐漸形成科學的思維方法和嚴謹的科學態度。
2.“數據結構”實驗教學的措施
數據結構實驗課程的改革是以課堂教學為基礎,以實驗課為中心,以學生為主體的模式,重在培養學生獨立自主、創新動手能力,因此實驗課之前的準備工作很重要。實驗課程改革實施過程主要有以下幾個方面構成:
2.1 修訂實驗大綱和實驗指導書
進行實驗教學改革,首先對原來的實驗大綱和實驗指導書進行重新修訂,應該遵循培養學生實際動手能力的的特點,體現以理論為基礎,以實驗為檢驗手段的學科特色。通過實驗課程的教學,讓學生明白理論課程中的哪些內容是基礎點,哪些內容是難點和重點,并讓學生有針對性的進行實驗鍛煉。在2011年的數據結構理論和實驗教學中,課題組成員老師按照理論教學大綱,幾次討論研究,從而形成了新的實驗大綱和實驗指導書。2011年新的實驗大綱和實驗指導書開始實施,效果比較良好。
2.2 合理設計實驗題目
對于實驗題目,按照內容和難易程度共分為三個層次,即驗證型、綜合型和設計型題目。按照循序漸進的順序進行,最開始的幾個題目由于理論知識講授較少,讓學生做的是驗證型的題目;隨著所學知識的增加,開始讓學生解決綜合性的實驗題目,這部分題目需要學生融會貫通前后的知識點才可以完成;最后,在課程的收尾階段,為了檢驗學生掌握該門課程的情況,老師提出實驗目的和要求,學生自行設計,完成實驗內容。設計型的題目一般安排在課后進行,學生可以根據要求去圖書館查閱資料,不僅豐富了學生的第二課堂,而且大大培養了學生動手解決實際問題的能力。
實驗內容上去掉了部分抽象性比較強的題目,增加了幾個競賽內容題目。這部分內容的增加不僅提高了學生的興趣,并為以后參加程序設計大賽打下了堅實的基礎。
2.3 內容講解和上機實驗
實驗課一般先安排老師進行實驗理論知識的大致介紹和實驗內容的詳細講解,時間大致掌握在二十分鐘左右,剩下時間是學生進行驗證和自行編程時間。在這個時間如果個別學生有疑問,實驗老師可以進行有針對性的講解,同時逐步引導學生排除錯誤。另一方面,學生在老師講解完畢后要對實驗內容進行全面分析,對驗證型實驗內容要在實驗完畢后鞏固所學理論知識;對于綜合型實驗內容要聯系各個知識環節,綜合解決復雜問題。
為了及時解答學生在做實驗中遇到的問題,教師可以不時在學生中巡回一下,以便幫助學生排憂解難,確保學生的問題可以及時有效的解決。另外,在實驗結束后必須要撰寫實驗報告,提交實驗結果。
2.4 內容考核
為了驗證學生掌握實驗的情況,必須進行實驗課程考核。按照數據結構大綱要求,平時成績、實驗成績和理論課程考試比例為1:4:5。同時針對實驗成績,又分為平時成績占30%,實驗考核成績占70%,這樣可以有效的避免學生最后單憑考試成績一錘定音的情況。
對完成的實驗內容進行驗收時,盡量做到公平、公正。可以分為多個考核指標,分別進行實物驗收和答辯情況打分。老師根據每個同學的演示、匯報、提問回答情況給出一個綜合成績,再結合該同學平時的實驗課表現情況,給出一個綜合的實驗成績。
3.實施效果
數據結構實驗課程改革,從修訂實驗大綱到制定合適的實驗題目,最后到考核環節,每一階段都是以提高學生的學習興趣、加強學生的掌握力度和培養學生的實際能力為主要導向。實驗課程的改革在這實施的兩年中,根據觀察和實驗考核情況,有效提高了學生遇到問題、分析問題和解決問題的能力。
經過實驗教學的改革和實踐,我們取得了明顯效果,在2012年的廣西大學生程序設計競賽中,學院選派的代表對,分別取得了一、二、三等獎的好成績。實踐證明,通過實驗課程的改革,學生的編程能力有了明顯提高,為日后工作打下良好基礎。
4.結束語
從進行數據結構課程改革以來,我們一直致力于這門課程的建設,從修訂大綱、選用教材、師資隊伍、課程教學、實驗教學等各個環節進行了不斷的探索和實踐。在這2年多的實踐教學中,取得了比較滿意的教學效果。通過課程實踐,學生不僅深入理解了數據結構的基本原理和基礎知識。同時,學生普遍感覺自己的動手能力得到提高,遇到問題、分析問題和解決問題的能力得到了鍛煉。
參考文獻:
[1]嚴蔚敏. 數據結構(C語言版)[M]. 北京:清華大學出版社,2001
[2]汪沁. 基于“數據結構”實驗的探討和研究[J]. 中國教育信息化,2007.(1):17-19
[3]徐大華. 程序設計語言教學方法探討[J]. 高等理科教育,2007(1):36-38