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