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