史志才 施一萍 張輝
摘 要:作為計算機及相關專業的核心課程之一,“數據結構”的教學一直得到了廣大教師的高度關注和重視。文章分析了“數據結構”與其先修課程“C程序設計”間的關系,指出“C程序設計”對“數據結構”課程的教學效果具有重要影響,從專業的課程體系結構出發,認真梳理了兩門課程的知識體系,建議應合理組織和優化“C程序設計”課程的教學內容,加強實驗教學環節,為“數據結構”等后續課程的順利開設奠定基礎。
關鍵詞:數據結構;C程序設計;計算機教學
中圖分類號:G642 文獻標志碼:A 文章編號:2096-000X(2017)01-0060-02
Abstract: As one of the core courses of computer science and its related specialties, the teaching of "Data Structure" has always been attracting wide attention from teachers. The paper analyzes the relationship between this course and its prerequisite course "C Programming." It is pointed out that "C Programming" has an important influence on the teaching effect of "Data Structure." The knowledge architecture of these two courses is optimized according to the course architecture of the specialty. It is suggested to reasonably arrange the teaching content of "C Programming" and to enhance the experiment teaching, hoping to lay a good foundation for "Data Structure" and other subsequent courses.
Keywords: data structure; C Programming; computer teaching
一、概述
“數據結構”是計算機科學與技術、軟件工程、網絡工程等相關專業的一門專業基礎課,也是這些專業課程體系中的核心課程以及四門考研課程之一。在計算機科學與技術專業的課程體系中,“數據結構”課程具有承上啟下的重要作用,其教學內容不但鞏固了已修的“C程序設計”、“離散數學”、“計算機導論”等課程所學知識,還為“數據庫系統原理”、“操作系統”、“編譯原理”等后續課程的開設以及相關實驗教學環節的順利完成奠定基礎。教學實踐經驗表明,“數據結構”課程的教學效果與其先修課程的學習情況密切相關,尤其是“C程序設計”課程;“C程序設計”課程學習效果的好壞對“數據結構”等后續課程的教學會產生嚴重影響,因此對于“C程序設計”課程的教學應給予足夠的重視和高度關注。
二、“數據結構”與“C程序設計”
(一)“數據結構”的教學內容及教學目的
作為計算機專業的核心課,“數據結構”課程主要介紹用計算機解決一系列問題,特別是非數值計算類問題所用的各種數據組織方法、存儲結構,以及在各種結構上執行的插入、刪除、查找等操作。主要教學內容包括:數據結構和算法設計與分析的基本知識,線性表、堆棧、隊列、二叉樹、樹、圖等各種基本數據結構的定義、存儲結構,排序、查找等各種常用的非數值算法以及應用。
“數據結構”的教學目的是通過課程的學習,使學生熟練地掌握數據結構的內在邏輯關系及其在計算機中的表示方法(即存儲結構),以及有關基本操作的算法實現;熟悉它們在計算機科學中的基本應用。通過這門課程的學習,培養和訓練學生密切結合實際應用,在軟件開發過程中能夠根據求解的問題合理選擇數據結構、應用高級語言編寫有效算法的能力,并為學習《操作系統》、《編譯原理》、《數據庫系統原理》等后續課程和開發各種軟件奠定基礎[1]。
(二)“C程序設計”的教學內容及教學目的
“C程序設計”主要講授C語言中的數據類型、運算符、語句結構及其程序設計的基本方法,使學生掌握程序設計的基本概念、程序設計語言的成份和程序的組成,掌握結構化程序設計的基本思想和基本方法,最終目標是培養學生的程序設計能力,進而學會利用C語言解決一般應用問題,并為《數據結構》、《操作系統》等后續課程的順利開設奠定基礎。
(三)“數據結構”與“C程序設計”的特點及教學過程中存在的問題
與“數據結構”課程一樣,“C程序設計”作為計算機相關專業的一門專業基礎課,是計算機學科的核心課程,是學生學習程序設計的開端,是培養學生分析問題和解決問題的能力以及程序設計能力的主要課程,學生計算思維的形成也與“C程序設計”課程有著密切關系。C語言有著其它高級程序設計語言不可比擬的優點,該語言直觀,結構性和靈活性好,但其中的指針、結構體和動態鏈表等概念難以掌握;而這些內容卻是“數據結構”、“操作系統”等后續課程中要用到的主要知識。
作為“C程序設計”的后續課程,“數據結構”采用C語言來描述數據的邏輯結構和物理結構及其插入、刪除、查找、排序等操作和對應的算法;通過該課程的學習,進一步提高學生的數據描述能力和程序設計能力。“數據結構”課程的教學內容抽象,邏輯性強,相應的實驗環節要求較高,編程工作量大,許多概念需要通過上機編寫程序進行深入理解和鞏固,這些特點決定了該門課程無論是教,還是學,都具有較大的難度。在常規的教學過程中,“C程序設計”和“數據結構”這兩門課程是相對獨立、分開授課的,如果協調不好很容易導致兩門課的教學內容脫節,進而影響后續課程的教學效果。在實際教學過程中,“C程序設計”課程往往只注重C語言的語法體系、基本程序結構和控制語句。目前許多高校將“C程序設計”的授課學時壓縮到48課時(甚至32學時),其中還包括實驗上機環節,教學過程中往往沒有足夠的學時講授指針、結構體和動態鏈表等教學內容。學生的學習精力大多集中在基本概念及簡單程序的編寫上面,對數組、函數、指針、結構體和鏈表的學習深度不夠,這使得學生只能簡單地應用C語言而不能用于解決像動態存儲分配這樣的復雜問題。而“數據結構”課程的學習必須以數組、指針、結構體、動態鏈表等知識為基礎,要面對的是樹的存儲和遍歷、圖的存儲、最小生成樹、最短路徑、拓撲排序、堆、基數排序等一些復雜算法,C語言學習環節的薄弱給“數據結構”課程的開設造成了很大困難[2]。
為此,應該從專業的課程體系結構出發,將“數據結構”和“C程序設計”這兩門課程有機地結合起來,認真梳理兩門課程間的關系,構建C語言與數據結構的課程新體系,合理組織“C程序設計”課程的教學內容,為“數據結構”課程的順利開設奠定基礎。
三、“數據結構”與“C程序設計”課程模塊間的對應關系
“數據結構”課程通常包括線性表、堆棧、隊列、二叉樹、樹、圖、查找和排序等模塊,每個模塊涉及到“C程序設計”課程的不同內容。每種數據結構均包括順序存儲和鏈式存儲等兩種物理結構。順序表通常采用數組類型進行存儲,而鏈式存儲則采用動態鏈表。“C程序設計”課程包括基本語法、程序結構、控制語句、函數、數組、指針、結構體、文件等模塊。下面認真梳理一下“數據結構”與“C程序設計”兩門課程各知識模塊間的關系,從中指出為了保證“數據結構”課程的順利開設,“C程序設計”課程所應該講授的基本教學內容[3,4]。
線性表是由相同類型的數據元素(結點)組成的有限序列。數據元素可以是一個字符、一個數或一個記錄,也可以是更復雜的信息。組成線性表的各個數據元素形成了一對一的關系,即線性關系。兩個典型的線性表是堆棧和隊列,它們的順序存儲使用了數組類型,每個數組元素可能是一個結構體類型;而鏈式存儲采用了動態鏈表,其中涉及指針、結構體等類型。隊列和堆棧的操作涉及循環、選擇等C語句。
樹是一種非線性的層次結構,用于描述一對多的關系;而二叉樹是一種特殊的樹,其每個結點最多有兩個子結點;樹和二叉樹間可以相互轉換。樹在計算機中常采用雙親表示法、孩子鏈表表示法、孩子兄弟表示法等進行表示和存儲,其中可以采用數組進行順序存儲,也可以采用鏈表進行動態存儲,具體涉及到數組、指針、結構體等數據類型。二叉樹常采用鏈表進行存儲,但滿二叉樹和完全二叉樹因各個結點編號間存在特殊關系,也可以采用數組進行順序存儲。樹和二叉樹的建立、刪除、遍歷等操作涉及循環、選擇等C語句。
和樹一樣,圖也是一種非線性的數據結構,但比樹形結構更復雜。在圖狀結構中,任意兩個結點之間都可能相關,即結點之間的鄰接關系可以是任意的。圖在計算機中采用鄰接矩陣和鄰接表來存儲,其中鄰接矩陣采用二維數組來表示各個結點間的鄰接關系;而鄰接表包括兩部分:結點表和邊表。結點表采用一維數組表示各個結點的信息,每個數組元素為一個結構體類型,其中包括指向邊表的指針;邊表為一個動態鏈表,存儲與結點表中的結點有邊的各個結點。顯然,這里涉及數組、指針、結構體、動態鏈表等概念,其操作包括圖的遍歷、拓撲排序、尋找最小生成樹、最短路徑等,涉及大部分C語言知識。
排序和查找是在上述數據結構的基礎上,對數據進行排序和查找操作。當處理的數據規模較大時(如大數據的處理),還需要涉及文件等操作。冒泡排序和選擇排序方法在“C程序設計”中常被作為編程實例進行介紹,而快速排序、堆排序、基數排序等方法需要數組、指針等更多的C語言知識。
四、結束語
“數據結構”作為計算機科學與技術及其相關專業的一門核心課程,在專業課程體系中起到承上啟下的重要作用,也是培養學生計算思維和程序設計能力的一門重要課程。為了確保“數據結構”課程的教學質量和學習效果,應加強“C程序設計”等先修課程的教學;特別是“C程序設計”中的數組、指針、結構體、動態鏈表等內容對于“數據結構”課程的教學和學習非常重要;若學生沒有很好地掌握這些學習內容,就很難理解“數據結構”中堆棧、隊列、樹、二叉樹和圖等在計算機中的存儲表示形式,很難完成其中的實驗上機環節,進而影響“操作系統”、“編譯原理”等后續課程的學習。所以建議“C程序設計”課程在講授了基本語法和3種基本程序結構后,應把教學重點放在數組、指針、結構體、動態鏈表等教學內容上,特別是動態鏈表中結點數據類型的定義以及鏈表的創建、刪除、查找等操作;只有學生掌握了上述知識,才能夠學好“數據結構”,并為“操作系統”、“編譯原理”等后續課程的學習奠定基礎。
參考文獻
[1]蔣秀英.《數據結構》與《程序設計》的融合教學模式研究[J].山東師范大學學報(自然科學版),2008,3:130-131.
[2]陳紅琳.信管專業中“C語言”與“數據結構”課程的整合研究[J].電腦學習,2010,6:90-92.
[3]徐春雨.高職院校C語言與數據結構課程整合的探索與實踐[J].福建電腦,2010,10:201-202.
[4]吳清江,緱錦,葉雙,等.以數據結構為核心的計算機學科專業課程群建設方法[J].湖州師范學院學報,2009,1:128-131.