詹澤梅
(長江大學(xué)計算機科學(xué)學(xué)院,湖北 荊州 434023)
數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)的一門重要基礎(chǔ)課程,它以程序設(shè)計語言為基礎(chǔ),培養(yǎng)學(xué)生進行復(fù)雜程序設(shè)計的能力。該課程也是后續(xù)一些重要專業(yè)課的基礎(chǔ)。由于學(xué)生在此課程之前通常只學(xué)習(xí)了一門或兩門編程課程,程序設(shè)計能力還比較薄弱,所以學(xué)生普遍認為數(shù)據(jù)結(jié)構(gòu)課程內(nèi)容繁多、復(fù)雜、抽象。為了提高教學(xué)質(zhì)量,教育者們研究了”混合式教學(xué)”[1-2]、分層教學(xué)法[3]、案例驅(qū)動[4]、融合式教學(xué)[5]等多種教學(xué)模式和方法,取得了一定的效果。針對數(shù)據(jù)結(jié)構(gòu)課程內(nèi)容繁多、復(fù)雜的情況,為各部分內(nèi)容設(shè)置統(tǒng)一的內(nèi)容綱要,將綱要貫穿整個教學(xué)過程,能幫助學(xué)生快速理清學(xué)習(xí)思路,降低內(nèi)容復(fù)雜程度,從而讓學(xué)生掌握課程內(nèi)容,達到較好的教學(xué)效果。
綱要貫穿式教學(xué)首先要有能概括各章或絕大部分教學(xué)內(nèi)容的綱要,而綱要的確定需要通過分析各章內(nèi)容得到。嚴蔚敏、吳偉民編著的《數(shù)據(jù)結(jié)構(gòu)(C語言版)》[6]被許多高校計算機專業(yè)選定為數(shù)據(jù)結(jié)構(gòu)課程的教材,至今累計發(fā)行已超400萬冊。筆者將以此書為教材,分析貫穿式綱要的設(shè)置。
縱觀各本數(shù)據(jù)結(jié)構(gòu)教材,其主要內(nèi)容是介紹各種不同結(jié)構(gòu)的數(shù)據(jù)類型,包括線性表、棧、隊列、字符串、樹和二叉樹、圖等。下面將分析教材中這些數(shù)據(jù)類型的主要內(nèi)容。表1-表6是對教材中各部分內(nèi)容的歸納。
表1 線性表
表2 棧
表3 隊列
表6 圖
表5 樹和二叉樹
從表1-表6可看出在介紹每一種數(shù)據(jù)類型時,首先需要先分析它的特點,介紹其抽象類型定義,讓學(xué)生了解這種數(shù)據(jù)類型的特征、元素之間的關(guān)系、常用操作。有的還會介紹本數(shù)據(jù)類型的相關(guān)概念,例如字符串、樹和二叉樹、圖都在本章開頭介紹了相關(guān)概念。
接著就要分析數(shù)據(jù)類型在計算機中的存儲表示。因為數(shù)據(jù)結(jié)構(gòu)在計算機中的存儲結(jié)構(gòu)有兩種:順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu),所以需要從順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)兩方面分析數(shù)據(jù)類型在計算機中的存儲表示。順序表、順序棧、循環(huán)隊列、串的定長順序存儲、串的堆分配存儲、二叉樹的順序表示這些都屬于順序存儲結(jié)構(gòu);線性鏈表、循環(huán)鏈表、雙向鏈表、鏈棧、鏈隊列、串的塊鏈存儲、二叉鏈表這些都屬于鏈式存儲結(jié)構(gòu)。樹和圖的結(jié)構(gòu)比較復(fù)雜,任意兩個元素之間都可能存在關(guān)系,所以很難用順序存儲結(jié)構(gòu),但可以借助數(shù)組表示元素之間的關(guān)系。例如樹的雙親表示法、圖的數(shù)組表示法。樹和圖的鏈式存儲結(jié)構(gòu)有:樹的子鏈表、樹的二叉鏈表、圖的鄰接表、圖的十字鏈表、圖的鄰接多重表。
最后,為了加強學(xué)生對數(shù)據(jù)類型的理解和對前面知識的應(yīng)用,教材上對每種數(shù)據(jù)類型都舉例講解了一個或多個實例。這些實例都是需要使用相應(yīng)數(shù)據(jù)類型的典型例子。
根據(jù)上面分析,可提煉出貫穿教材各種數(shù)據(jù)類型的一級講解綱要,如圖1。
圖1 一級綱要
在一級綱要中有順序存儲表示和實現(xiàn)、鏈式存儲表示和實現(xiàn)。從表1-表6中可看出教材2.2、2.3、3.1.2、3.4.2、3.4.3、4.2、6.2、6.3、6.4、7.2、7.3小節(jié)的內(nèi)容均屬于順序或鏈式存儲表示和實現(xiàn),這部分內(nèi)容也是課程的重點。分析這些內(nèi)容可發(fā)現(xiàn):對每一種數(shù)據(jù)類型,不管是介紹它的順序存儲表示,還是介紹它的鏈式存儲表示,都主要從兩方面講解,一是類型定義,二是基本操作的算法實現(xiàn)。合理的類型定義應(yīng)是基于其存儲特點給出的,因此,可先分析此數(shù)據(jù)類型的存儲特點,然后再用C語言描述其類型定義。當數(shù)據(jù)類型在計算機中采用不同的類型定義表示時,常用基本操作的算法也互不相同。對于每一個操作,可先用自然語言分析具體怎么做,再用類C語言描述出具體步驟,從而得到操作的算法函數(shù),最后分析算法時間復(fù)雜度。
根據(jù)上面的分析,可提煉出數(shù)據(jù)類型的每種存儲表示和實現(xiàn)的二級講解綱要,如圖2。
圖2 二級綱要
設(shè)置好貫穿整個教學(xué)過程的綱要后,就要在授課過程中使用綱要教學(xué)。數(shù)據(jù)結(jié)構(gòu)的教學(xué)一般分為理論教學(xué)和上機實踐。理論教學(xué)是實施綱要貫穿式教學(xué)的主要部分。
數(shù)據(jù)結(jié)構(gòu)課程第一章是緒論,從第二章開始就介紹各種不同結(jié)構(gòu)的數(shù)據(jù)類型,這時便可以采用綱要貫穿式教學(xué)。在講解每章內(nèi)容之前先擺出一級綱要,讓學(xué)生對本章內(nèi)容有一個大概了解。接著,便按綱要講解各部分內(nèi)容。在講解數(shù)據(jù)類型的兩種存儲表示時,也是先給出二級綱要,并對照綱要列出本數(shù)據(jù)類型的常用操作,然后再逐個操作講解。對于兩種存儲表示,既可以兩者都詳細講解,也可根據(jù)實際應(yīng)用情況詳細講解一種。例如線性表兩種存儲表示都比較常用,所以兩者都詳細講解。二叉樹的順序存儲表示比較適合于存儲完全二叉樹,對于非完全二叉樹采用順序存儲表示比較浪費存儲空間,所以只用詳細講解二叉樹的鏈式存儲表示。
每章內(nèi)容結(jié)束時,需要對照綱要進行總結(jié),幫助學(xué)生梳理本章內(nèi)容,讓學(xué)生對本章內(nèi)容有更清晰的認識。
講第一種數(shù)據(jù)類型時,學(xué)生可能對綱要認識比較模糊,但隨著在第二種、第三種等數(shù)據(jù)類型的講解中使用同樣的綱要,學(xué)生便會逐漸熟悉綱要,進而容易掌握每種數(shù)據(jù)類型的整體內(nèi)容。
數(shù)據(jù)結(jié)構(gòu)是一門理論性和實踐性都很強的課程,上機實踐是不可或缺的教學(xué)環(huán)節(jié),也是理論知識的鞏固和應(yīng)用。二級綱要對應(yīng)的是數(shù)據(jù)類型在計算機中的存儲表示和實現(xiàn),具體包含類型定義和常用操作的算法,與程序相關(guān),適合將其作為上機內(nèi)容。將二級綱要中的內(nèi)容貫穿于上機實踐中,這樣能加深學(xué)生對理論知識的深入理解。
根據(jù)二級綱要將單鏈表的上機任務(wù)設(shè)置為:定義單鏈表類型,實現(xiàn)單鏈表的創(chuàng)建操作、向單鏈表中插入一個元素操作、從單鏈表中刪除一個元素操作、查找第i個元素值的操作以及輸出單鏈表所有元素的操作。單鏈表上機任務(wù)如圖3所示。圖4至圖8分別展示了另外幾種數(shù)據(jù)類型根據(jù)二級綱要設(shè)置的上機任務(wù)。
圖3 單鏈表上機任務(wù)
圖8 圖上機任務(wù)
上機任務(wù)的內(nèi)容還可根據(jù)學(xué)生層次適當調(diào)整內(nèi)容。如果某個上機任務(wù)相對于學(xué)生來說比較簡單,可將應(yīng)用實例加入其中;如果某個上機任務(wù)比較復(fù)雜,可選取部分內(nèi)容。例如圖4所示的棧上機任務(wù)比較簡單,可將數(shù)值轉(zhuǎn)換或括號匹配實例加入其中。圖7所示的圖上機任務(wù)比較復(fù)雜,可從深度優(yōu)先遍歷、廣度優(yōu)先遍歷中選取一種遍歷操作實現(xiàn)。
圖4 棧上機任務(wù)
圖7 二叉樹上機任務(wù)
圖5 隊列上機任務(wù)
圖6 字符串上機任務(wù)
綱要貫穿式教學(xué)方法應(yīng)用于數(shù)據(jù)結(jié)構(gòu)的理論教學(xué)和上機實踐中。在理論教學(xué)中,通過統(tǒng)一的綱要貫穿各部分內(nèi)容,能幫助學(xué)生理清繁雜的教學(xué)內(nèi)容,讓學(xué)生快速掌握學(xué)習(xí)內(nèi)容。在上機實踐中,將綱要內(nèi)容轉(zhuǎn)換成程序,將理論應(yīng)用于實踐,能進一步加深學(xué)生對理論知識的理解。在教學(xué)實踐中,該方法可與其他教學(xué)方法相結(jié)合,運用多種教學(xué)方式,從而達到更好的教學(xué)效果。