
【摘 要】本文針對(duì)高職數(shù)據(jù)結(jié)構(gòu)課程教學(xué)的現(xiàn)狀和存在的問題,從數(shù)據(jù)結(jié)構(gòu)中數(shù)據(jù)類型的特點(diǎn)入手,設(shè)計(jì)了在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中應(yīng)用的生活實(shí)例,對(duì)線性表、棧、隊(duì)列、數(shù)組等數(shù)據(jù)類型的實(shí)例進(jìn)行分析講解,將抽象復(fù)雜的理論知識(shí)變得形象簡(jiǎn)單,總結(jié)出一種激發(fā)學(xué)生學(xué)習(xí)興趣、行之有效的提高教學(xué)質(zhì)量的方法。
【關(guān)鍵詞】高職;數(shù)據(jù)結(jié)構(gòu);生活實(shí)例;教學(xué)質(zhì)量
重慶城市管理職業(yè)學(xué)院于2012年開始啟動(dòng)中央財(cái)政支持專業(yè)發(fā)展項(xiàng)目軟件技術(shù)項(xiàng)目,數(shù)據(jù)結(jié)構(gòu)作為軟件技術(shù)專業(yè)的主干課程,進(jìn)行了課程建設(shè)改革。本文針對(duì)“數(shù)據(jù)結(jié)構(gòu)”課程教學(xué)的現(xiàn)狀和存在的問題進(jìn)行分析,并結(jié)合多年的教學(xué)經(jīng)驗(yàn),對(duì)“數(shù)據(jù)結(jié)構(gòu)”課程的教學(xué)方法改革進(jìn)行了探索。
一、高職“數(shù)據(jù)結(jié)構(gòu)”課程教學(xué)的現(xiàn)狀和存在的問題
1、高職“數(shù)據(jù)結(jié)構(gòu)”課程的特點(diǎn)。“數(shù)據(jù)結(jié)構(gòu)”是軟件技術(shù)專業(yè)的主干課程,該課程的主要目的是:使學(xué)生掌握如何將現(xiàn)實(shí)世界的客觀問題轉(zhuǎn)換成數(shù)據(jù)模型,然后選擇合適的方式存儲(chǔ)在計(jì)算機(jī)中,并對(duì)數(shù)據(jù)完成相關(guān)的操作。換言之,“數(shù)據(jù)結(jié)構(gòu)”課程主要研究數(shù)據(jù)的邏輯結(jié)構(gòu),數(shù)據(jù)在計(jì)算機(jī)內(nèi)的物理存儲(chǔ)結(jié)構(gòu),以及在此基礎(chǔ)上所進(jìn)行的各種算法。概括起來就是“四種邏輯結(jié)構(gòu),兩種物理結(jié)構(gòu),多種算法”。但是由于課程涉及到的概念多、原理多、算法多,理論性、抽象性和綜合性較強(qiáng),給學(xué)生的理解帶來極大困難。
2、學(xué)生學(xué)習(xí)基礎(chǔ)差,學(xué)習(xí)興趣不高。高職學(xué)生的生源結(jié)構(gòu)比較復(fù)雜,有普高生、三校生還有單招生,學(xué)生的學(xué)習(xí)基礎(chǔ)參差不齊。總的情況來看是學(xué)習(xí)基礎(chǔ)薄弱,抽象思維能力較差,缺乏空間想象力。而“數(shù)據(jù)結(jié)構(gòu)”是一門理論性較強(qiáng)的課程,其概念抽象且算法復(fù)雜,使很多學(xué)生難以理解,在做課后習(xí)題或上機(jī)實(shí)踐時(shí)往往無從下手,學(xué)習(xí)起來難度特別大,所以對(duì)學(xué)習(xí)“數(shù)據(jù)結(jié)構(gòu)”也就興趣不高了。
3、學(xué)生的前導(dǎo)課程基礎(chǔ)不牢。按照教學(xué)要求,學(xué)生在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)之前,必須學(xué)習(xí)一門程序設(shè)計(jì)語言,對(duì)程序設(shè)計(jì)語言掌握的程度,將直接影響學(xué)生對(duì)數(shù)據(jù)結(jié)構(gòu)算法的理解,從而影響學(xué)生的學(xué)習(xí)能力和學(xué)習(xí)信心。數(shù)據(jù)結(jié)構(gòu)課程的教材多數(shù)選擇C語言描述算法,所以很多學(xué)校開設(shè)的前導(dǎo)課程通常是C語言程序設(shè)計(jì),教學(xué)學(xué)時(shí)為64學(xué)時(shí)左右。通過多年的跟蹤調(diào)查,64學(xué)時(shí)的安排會(huì)導(dǎo)致C語言的一些重要內(nèi)容根本沒有時(shí)間去講授(比如指針),學(xué)生對(duì)這部分內(nèi)容完全是一片空白,給數(shù)據(jù)結(jié)構(gòu)的教學(xué)帶來比較大的困難。除此之外,由于學(xué)生的基礎(chǔ)較差,沒有良好的自主學(xué)習(xí)習(xí)慣和學(xué)習(xí)方法,對(duì)C語言程序設(shè)計(jì)中已經(jīng)講授的內(nèi)容也掌握得不好,學(xué)生的問題抽象能力、程序閱讀能力、程序設(shè)計(jì)能力都還處于初級(jí)階段,也直接影響了數(shù)據(jù)結(jié)構(gòu)的教學(xué)效果。
二、應(yīng)用生活實(shí)例提高教學(xué)質(zhì)量
針對(duì)數(shù)據(jù)結(jié)構(gòu)理論知識(shí)過于抽象,學(xué)生難以理解這一問題,結(jié)合多年的教學(xué)經(jīng)驗(yàn),我們發(fā)現(xiàn)在教學(xué)過程中應(yīng)用生活實(shí)例進(jìn)行講解,將會(huì)大大降低問題的抽象程度,使學(xué)生由抽象思維轉(zhuǎn)變?yōu)樾蜗笏季S,不僅可以提高學(xué)生對(duì)抽象問題的理解能力,也大大激發(fā)了學(xué)生的學(xué)習(xí)興趣。解決生活中的數(shù)據(jù)結(jié)構(gòu)問題,也使學(xué)生體會(huì)到數(shù)據(jù)結(jié)構(gòu)的實(shí)用性,提高了學(xué)生的學(xué)習(xí)主動(dòng)性。結(jié)合教學(xué)內(nèi)容可以應(yīng)用以下生活實(shí)例:
1、指針。如果在前導(dǎo)課程中沒有講授指針這部分內(nèi)容,可以在數(shù)據(jù)結(jié)構(gòu)課程的開始安排一次課補(bǔ)充指針的內(nèi)容。以學(xué)生當(dāng)前的座位為實(shí)例。將座位從左到右、從前到后依次編號(hào)(1~60號(hào)),學(xué)生們都是任意入座而不是按學(xué)號(hào)和座位號(hào)對(duì)號(hào)入座。如果要從學(xué)號(hào)為1號(hào)的同學(xué)開始找到學(xué)號(hào)為2號(hào)的同學(xué),很顯然不能去找2號(hào)座位,為了方便查找,每位同學(xué)的手中應(yīng)該要準(zhǔn)備一張卡片,記錄后續(xù)學(xué)號(hào)的那位同學(xué)的座位號(hào)。這樣,從1號(hào)同學(xué)出發(fā),我們能找到任何一位同學(xué)的座位,而這張卡片就相當(dāng)于指針,記錄了后續(xù)同學(xué)的座位(地址),“指針就是地址,地址就是指針”就可以很形象地深入到學(xué)生的腦海中。
2、線性表插入和刪除時(shí)如何移動(dòng)元素。插入:以某一列學(xué)生為例(此列每個(gè)座位都不空,最后的一位同學(xué)為H),假設(shè)在A同學(xué)之前要加入一位Z同學(xué),我們必須先把座位給Z同學(xué)留出來,也就意味著A同學(xué)及其以后的同學(xué)都要后移。關(guān)鍵問題是:移動(dòng)的順序是A——>B,B——>C……G——>H,還是反序G——>H,F(xiàn)——>G……B——>C,A——>B?如果選擇前者,將使A同學(xué)坐在B同學(xué)身上,如果是計(jì)算機(jī)中將導(dǎo)致B數(shù)據(jù)被A數(shù)據(jù)覆蓋(全班大笑),在笑聲中學(xué)生已經(jīng)很輕松地理解并掌握了移動(dòng)元素的方向問題(刪除也是同樣道理,不再贅述)。
3、棧。棧的操作原則是“后進(jìn)先出”,在啟發(fā)學(xué)生思考生活中的棧實(shí)例時(shí)學(xué)生有一定困難,不容易想到實(shí)例。老師可以引導(dǎo)學(xué)生思考:電梯超載時(shí)誰出電梯?當(dāng)然是后進(jìn)者先出!
電梯:假設(shè)電梯的寬度剛好容一個(gè)人,則電梯就是嚴(yán)格的后進(jìn)先出的棧的實(shí)例。
蒸籠:食堂里大師傅蒸饅頭的時(shí)候把蒸籠一格一格從下至上放上去(進(jìn)棧),蒸熟以后是從上至下一格一格取下來(出棧),這也是后進(jìn)先出棧的實(shí)例。
和學(xué)生的生活息息相關(guān)的實(shí)例,使學(xué)生對(duì)棧的操作原則一目了然。
4、隊(duì)列。隊(duì)列的操作原則是“先進(jìn)先出”,數(shù)據(jù)結(jié)構(gòu)中的隊(duì)列和生活中的隊(duì)列極為相似,排隊(duì)購(gòu)票、食堂打飯、排隊(duì)就醫(yī)等都是學(xué)生比較容易理解的隊(duì)列實(shí)例。另外,等待交通信號(hào)燈的汽車隊(duì)列“先到先走”也符合隊(duì)列“先進(jìn)先出”的原則,并且要對(duì)學(xué)生強(qiáng)調(diào)數(shù)據(jù)結(jié)構(gòu)中隊(duì)列不允許“插隊(duì)”和“中途離隊(duì)”。
5、數(shù)組。介紹數(shù)組元素存儲(chǔ)地址的計(jì)算時(shí)涉及到多維數(shù)組,學(xué)生對(duì)于多維數(shù)組難以想象也難以理解,正好我們學(xué)校教學(xué)樓的布局適合這個(gè)內(nèi)容,于是我就用教室作為實(shí)例進(jìn)行講解。
我們學(xué)校的整個(gè)教學(xué)樓由5棟平行的小教學(xué)樓連接而成,分別命名為A棟、B棟、C棟、D棟、E棟;每棟小教學(xué)樓有6層樓,每層樓有2行4列共8間教室,教室的編號(hào)用樓號(hào)+樓層號(hào)+兩位教室號(hào)組成,如B607。在此例中把每間教室當(dāng)成一個(gè)數(shù)組元素進(jìn)行處理,以上課的教室如B607作為待計(jì)算地址的數(shù)組元素。每層樓教室布局如表1所示:
圖1 教室的布局
下面以行序?yàn)橹餍虻拇鎯?chǔ)結(jié)構(gòu)為例進(jìn)行說明,假設(shè)每個(gè)數(shù)組元素占L個(gè)存儲(chǔ)單元,則只要知道任意數(shù)組元素的下標(biāo)都可以確定其存儲(chǔ)地址。根據(jù)線性表的存儲(chǔ)規(guī)律,實(shí)際上求數(shù)組元素存儲(chǔ)地址的關(guān)鍵就是要計(jì)算出目標(biāo)元素和數(shù)組首元素之間間隔了多少個(gè)數(shù)組元素。
二維數(shù)組:上課教室B607所在的一層樓,每間教室的下標(biāo)為(行,列),我們用(j1,j2)表示,第一維(行數(shù))長(zhǎng)度b1=2,第二維(列數(shù))長(zhǎng)度b2=4,則B607教室的下標(biāo)為(1,2)。
B607和B601之間間隔的元素個(gè)數(shù)為:4×1+2,其中數(shù)字的含義依次如下:
4:數(shù)組第二維的長(zhǎng)度b2;1:元素的第一維下標(biāo)j1;2:元素的第二維下標(biāo)j2;
推而廣之,二維數(shù)組中任意一個(gè)數(shù)組元素的存儲(chǔ)地址為:
LOC(j1,j2)=LOC(0,0)+(b2×j1+j2)L
三維數(shù)組:上課教室B607所在的一棟樓,每間教室的下標(biāo)為(層,行,列),我們用(j1,j2,j3)表示,第一維(層數(shù))長(zhǎng)度b1=6,第二維(行數(shù))長(zhǎng)度b2=2,第三維(列數(shù))b3=4,則B607教室的下標(biāo)為(5,1,2)。
B607和B101之間間隔的元素個(gè)數(shù)為:2×4×5+4×1+2,其中數(shù)字的含義依次如下:
2:數(shù)組第二維的長(zhǎng)度b2;4:數(shù)組第三維的長(zhǎng)度b3;5:元素的第一維下標(biāo)j1;4:數(shù)組的第三維的長(zhǎng)度b3;1:元素的第二維下標(biāo)j2;2:元素的第三維下標(biāo)j3;
推而廣之,三維數(shù)組中任意一個(gè)數(shù)組元素的存儲(chǔ)地址為:
LOC(j1,j2,j3)=LOC(0,0,0)+(b2×b3×j1+b3×j2+j3)L
四維數(shù)組:教學(xué)樓的5棟樓聯(lián)合編號(hào),每間教室的下標(biāo)為(棟,層,行,列),我們用(j1,j2,j3,j4)表示,第一維(棟數(shù))長(zhǎng)度b1=5,第二維(層數(shù))長(zhǎng)度b2=6,第三維(行數(shù))b3=2,第四維(列數(shù))b4=4,則B607教室的下標(biāo)為(1,5,1,2)。
B607和A101之間間隔的元素個(gè)數(shù)為:6×2×4×1+ 2×4×5+4×1+2,其中數(shù)字的含義依次如下:
6:數(shù)組第二維的長(zhǎng)度b2;2:數(shù)組第三維的長(zhǎng)度b3;4:數(shù)組第四維的長(zhǎng)度b4;1:元素的第一維下標(biāo)j1;2:數(shù)組第三維的長(zhǎng)度b3;4:數(shù)組第四維的長(zhǎng)度b4;5:元素的第二維下標(biāo)j2;4:數(shù)組第四維的長(zhǎng)度b4;1:元素的第三維下標(biāo)j3;2:元素的第四維下標(biāo)j4;
推而廣之,四維數(shù)組中任意一個(gè)數(shù)組元素的存儲(chǔ)地址為:
LOC(j1,j2,j3,j4)=LOC(0,0,0,0)+(b2×b3×b4×j1+b3×b4×j2+b4×j3+j4)L
然后我們對(duì)以上3個(gè)地址公式總結(jié)規(guī)律,最后推廣到N維數(shù)組,得到N維數(shù)組中任意元素的地址計(jì)算公式:
LOC(j1,j2,j3,……,jn)=LOC(0,0,0,
在教學(xué)過程中學(xué)生很主動(dòng)的就能計(jì)算數(shù)組元素的存儲(chǔ)地址,抽象的多維數(shù)組轉(zhuǎn)變成了形象的多維教室,學(xué)生興趣倍增,師生的互動(dòng)也加強(qiáng)了。
6、查找。可以用身邊的某種商品如茶杯,限定最高價(jià)格之后讓學(xué)生猜商品的價(jià)格。此例中我給出的茶杯限定最高價(jià)格為400元,真實(shí)的價(jià)格是275元。
順序查找:學(xué)生從高到低(或從低到高)依次猜茶杯的價(jià)格,老師提示是否猜中,學(xué)生根據(jù)這個(gè)提示繼續(xù)猜,直到猜中價(jià)格為止。此例中學(xué)生從400開始,依次減少到275,一共要猜126次才能猜中茶杯的價(jià)格。
折半查找:老師可以提示學(xué)生首先觀察價(jià)格序列的特點(diǎn):從1到400依次遞增,是一個(gè)有序的序列,每次猜中間的價(jià)格,老師對(duì)學(xué)生猜出的價(jià)格給予指導(dǎo)性意見:比真實(shí)價(jià)格高還是比真實(shí)價(jià)格低,學(xué)生根據(jù)這個(gè)提示在左區(qū)間或右區(qū)間繼續(xù)猜,這樣每次都可以縮小一半的查找范圍,速度比順序查找要快。
整個(gè)猜價(jià)格的過程如下所示(商下取整):
第一次取值區(qū)間:1~400
第一次價(jià)格:(1+400)/2=200-----比真實(shí)價(jià)格低,下次在右區(qū)間繼續(xù)猜
第二次取值區(qū)間:201~400
第二次價(jià)格:(201+400)/2=300-----比真實(shí)價(jià)格高,下次在左區(qū)間繼續(xù)猜
第三次取值區(qū)間:201~299
第三次價(jià)格:(201+299)/2=250-----比真實(shí)價(jià)格低,下次在右區(qū)間繼續(xù)猜
第四次取值區(qū)間:251~299
第四次價(jià)格:(251+299)/2=275-----和真實(shí)價(jià)格相同,猜中價(jià)格,游戲結(jié)束
此次折半查找,只用了四次就猜中了茶杯的價(jià)格。通過這個(gè)猜茶杯價(jià)格的游戲,學(xué)生能深切體會(huì)到:在數(shù)據(jù)量比較大的情況下,折半查找的效率比順序查找要高很多。
三、結(jié)語
在幾年的數(shù)據(jù)結(jié)構(gòu)教學(xué)過程中,通過不斷的摸索,總結(jié)出了一些通俗易懂的教學(xué)實(shí)例,對(duì)激發(fā)學(xué)生的學(xué)習(xí)興趣,提高數(shù)據(jù)結(jié)構(gòu)的教學(xué)質(zhì)量有比較好的效果。當(dāng)然除了引入生活實(shí)例輔助教學(xué),還可以采用多種教學(xué)手段,如FLASH動(dòng)畫等方式增強(qiáng)學(xué)生對(duì)原理、算法的理解,在今后的教學(xué)過程中,還需要不斷地探索,找出更多更好的生活實(shí)例來提高教學(xué)質(zhì)量。
【參考文獻(xiàn)】
[1]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,2007.
[2]王峰,魏秀然.軟件學(xué)院“數(shù)據(jù)結(jié)構(gòu)”教學(xué)改革探討[J].教育與職業(yè),2013(27).