摘要:《數(shù)據(jù)結(jié)構(gòu)》是一門重要的課程,但是又是學(xué)生反映難學(xué)的課程。通過(guò)教學(xué)改革的探索,分析了《數(shù)據(jù)結(jié)構(gòu)》的教學(xué)內(nèi)容和高職的狀況,提出高職的就業(yè)教育決定高職《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革重在應(yīng)用的思想。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);教學(xué)改革;應(yīng)用
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2009)36-10155-02
The Teaching Reform and Exploration of the Course of Data Structure in High Vocational Education
WANG Yong-hong
(Jiangsu Animal Husbandry Veterinary College,Taizhou 25300, China)
Abstract: Data structure is an important course, but it is difficult for students to learn it in high vocational education. Through the exploration of teaching reform, this text analyses the Data structure teaching contents and status of vocational education, proposes the idea that the character of vocational education decide application about Data StructureTeaching Reform.
Key words: Data Structures; Teaching Reform; application
《數(shù)據(jù)結(jié)構(gòu)》是計(jì)算機(jī)應(yīng)用技術(shù)、軟件技術(shù)、網(wǎng)絡(luò)技術(shù)等專業(yè)的重要專業(yè)基礎(chǔ)課,是計(jì)算機(jī)科學(xué)的算法理論基礎(chǔ)和軟件設(shè)計(jì)的技術(shù)基礎(chǔ),也是我校計(jì)算機(jī)大類專業(yè)教學(xué)改革的重點(diǎn)課程之一。
《數(shù)據(jù)結(jié)構(gòu)》研究的對(duì)象是數(shù)據(jù)之間的邏輯結(jié)構(gòu),以及如何把它們存儲(chǔ)起來(lái)并便于訪問(wèn)和處理[1]。組織數(shù)據(jù)時(shí),數(shù)據(jù)之間有四種邏輯結(jié)構(gòu)(集合、線性結(jié)構(gòu)、層次結(jié)構(gòu)和網(wǎng)狀結(jié)構(gòu))。存儲(chǔ)數(shù)據(jù)時(shí),也有四種存儲(chǔ)結(jié)構(gòu)(順序結(jié)構(gòu)、鏈接結(jié)構(gòu)、索引結(jié)構(gòu)和散列結(jié)構(gòu)),它們的組合可以構(gòu)成更復(fù)雜的存儲(chǔ)結(jié)構(gòu)[2-3]。對(duì)數(shù)據(jù)進(jìn)行處理通常包括輸入、輸出、查找、更新、排序、插入和刪除等運(yùn)算。當(dāng)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)不同時(shí),相應(yīng)運(yùn)算的實(shí)現(xiàn)算法也不同。
在高職《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革中,如何更好地進(jìn)行教學(xué),取得好的教學(xué)效果,是我們一直探索的問(wèn)題。
1 《數(shù)據(jù)結(jié)構(gòu)》學(xué)習(xí)中的問(wèn)題
1.1 高職的性質(zhì)和特征
我們《數(shù)據(jù)結(jié)構(gòu)》教學(xué)的對(duì)象是高職學(xué)生,而高職教育就是就業(yè)教育。計(jì)算機(jī)專業(yè),如軟件專業(yè),其出口是符合企業(yè)崗位入門需求,具有相當(dāng)于一年軟件開發(fā)經(jīng)驗(yàn)的軟件開發(fā)工程師(資格證書)[4]。就業(yè)教育的特征是以就業(yè)為導(dǎo)向,以就業(yè)崗位的需求為基礎(chǔ),明確培養(yǎng)目標(biāo)和教學(xué)的程度。以實(shí)用技能為核心,選擇課程內(nèi)容,學(xué)以致用。以動(dòng)手能力為突破點(diǎn),培養(yǎng)自學(xué)能力、解決問(wèn)題能力。以項(xiàng)目經(jīng)驗(yàn)為學(xué)習(xí)目標(biāo),了解行業(yè)規(guī)則?!稊?shù)據(jù)結(jié)構(gòu)》也應(yīng)緊緊圍繞這一特征展開教學(xué)。
1.2 《數(shù)據(jù)結(jié)構(gòu)》教學(xué)的狀況
從以往《數(shù)據(jù)結(jié)構(gòu)》教學(xué)的情況看,效果沒(méi)有完全達(dá)到,高職學(xué)生的來(lái)源、現(xiàn)狀、特點(diǎn),如學(xué)生理論應(yīng)用能力欠缺,不能正確認(rèn)識(shí)課程的作用,學(xué)習(xí)積極性不高等,影響了課程的教學(xué)[5]。在《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革中,我們從課程本身入手,分析存在的問(wèn)題,課程理論偏多,使得高職學(xué)生掌握困難,實(shí)踐課程難度偏大,起不到應(yīng)有作用,應(yīng)用不具體,缺乏應(yīng)用示例。我們提出,高職《數(shù)據(jù)結(jié)構(gòu)》課程的改革不宜理論太抽象,而應(yīng)重在應(yīng)用。
2 《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革重在應(yīng)用
2.1 《數(shù)據(jù)結(jié)構(gòu)》教學(xué)理解
數(shù)據(jù)結(jié)構(gòu)是指數(shù)據(jù)間的相互關(guān)系。具體到計(jì)算機(jī)環(huán)境,一種結(jié)構(gòu)自然地聯(lián)系著作用在這種類型的數(shù)據(jù)上的運(yùn)算,為了執(zhí)行運(yùn)算,必須把數(shù)據(jù)以某種方式存儲(chǔ)在計(jì)算機(jī)中。因此,我們認(rèn)為,數(shù)據(jù)結(jié)構(gòu)就是由某種邏輯關(guān)系組織起來(lái)的一批數(shù)據(jù),按一定的存儲(chǔ)方法被存儲(chǔ)于計(jì)算機(jī)中,并在這些數(shù)據(jù)上定義一個(gè)運(yùn)算的集合[6]。
通常,算法的設(shè)計(jì)取決于數(shù)據(jù)的邏輯結(jié)構(gòu),算法的實(shí)現(xiàn)取決于數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)。每種數(shù)據(jù)結(jié)構(gòu)從邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和操作運(yùn)算等方面進(jìn)行教學(xué),全篇從集合、線性結(jié)構(gòu)等基本數(shù)據(jù)結(jié)構(gòu)入手,實(shí)現(xiàn)層次結(jié)構(gòu)和網(wǎng)狀結(jié)構(gòu)等較復(fù)雜結(jié)構(gòu)教學(xué),這是《數(shù)據(jù)結(jié)構(gòu)》教學(xué)的共同切入點(diǎn)[7]。
2.2 高職《數(shù)據(jù)結(jié)構(gòu)》教學(xué)應(yīng)發(fā)生變化
在《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革中,我們研究認(rèn)為,由于高職自身的特點(diǎn)和辦學(xué)的現(xiàn)狀,作為高職《數(shù)據(jù)結(jié)構(gòu)》的教學(xué),其內(nèi)容和要求應(yīng)有所變化,側(cè)重點(diǎn)適當(dāng)改變,理論的教學(xué)在內(nèi)容和課時(shí)上應(yīng)減少,課程的重點(diǎn)應(yīng)轉(zhuǎn)移到數(shù)據(jù)結(jié)構(gòu)的應(yīng)用上。最終的目的是學(xué)生應(yīng)能夠把基本的數(shù)據(jù)結(jié)構(gòu)作為對(duì)象來(lái)看待,能夠把常用的數(shù)據(jù)結(jié)構(gòu)與面向?qū)ο蟮某绦蛟O(shè)計(jì)方法聯(lián)系起來(lái),進(jìn)而掌握常用的線性表、堆棧、隊(duì)列、二叉樹、向量等數(shù)據(jù)結(jié)構(gòu)及各種排序、查找算法應(yīng)用[8],達(dá)到高職學(xué)生學(xué)了《數(shù)據(jù)結(jié)構(gòu)》能夠在系統(tǒng)開發(fā)中應(yīng)用數(shù)據(jù)結(jié)構(gòu)的目的。
具體地說(shuō),通過(guò)課程的教學(xué),學(xué)生能夠具備常用的基本數(shù)據(jù)結(jié)構(gòu)主要算法的應(yīng)用能力;具備常用的排序、檢索和索引算法應(yīng)用能力;具備在進(jìn)行程序設(shè)計(jì)、調(diào)試、測(cè)試的課程項(xiàng)目訓(xùn)練過(guò)程中,能夠合理地組織數(shù)據(jù)、有效地表示數(shù)據(jù)、有效地處理數(shù)據(jù),書寫的程序結(jié)構(gòu)清楚、正確易讀,提高程序設(shè)計(jì)的質(zhì)量等能力[6]。
所以,教學(xué)重點(diǎn)也應(yīng)隨著相應(yīng)改變?yōu)?基本數(shù)據(jù)結(jié)構(gòu)在解決實(shí)際問(wèn)題中的應(yīng)用;基本的算法策略在解決實(shí)際問(wèn)題的應(yīng)用;新興數(shù)據(jù)結(jié)構(gòu)的相關(guān)問(wèn)題;新興算法的相關(guān)問(wèn)題及實(shí)踐;經(jīng)典問(wèn)題的經(jīng)典算法;典型系統(tǒng)的計(jì)算機(jī)模擬;需自行設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)和算法來(lái)解決的實(shí)際問(wèn)題[9]。
算法描述語(yǔ)言采用廣為程序員所使用的面向?qū)ο蟮恼Z(yǔ)言,使得ADT (抽象數(shù)據(jù)類型)的概念得到更自然的體現(xiàn),更本質(zhì)地體現(xiàn)數(shù)據(jù)結(jié)構(gòu)的思想,而且所定義的數(shù)據(jù)結(jié)構(gòu)類能夠方便地被重用[6]。
3 《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革實(shí)踐
以線性表為例闡述《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革的思路?!稊?shù)據(jù)結(jié)構(gòu)》線性表在全篇中處于基礎(chǔ)、入門的地位。我們?cè)诮虒W(xué)改革中,按照先講清概念,再結(jié)合圖像、動(dòng)畫理解邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu),重點(diǎn)講解線性表的應(yīng)用的方式進(jìn)行教學(xué),有意識(shí)地弱化理論性,強(qiáng)調(diào)動(dòng)手能力的培養(yǎng)。講解應(yīng)用時(shí),采用了Java語(yǔ)言作為描述語(yǔ)言,因?yàn)镴ava語(yǔ)言提供了許多預(yù)定義好的和已經(jīng)實(shí)現(xiàn)的標(biāo)準(zhǔn)庫(kù),能夠直接全面支持?jǐn)?shù)據(jù)結(jié)構(gòu)原理[10]。
在講解線性表的概念時(shí),通過(guò)舉例,學(xué)生能夠理解具有相同屬性的數(shù)據(jù)元素的有限序列,邏輯結(jié)構(gòu)通過(guò)示意圖講解也能接收。但線性表如何實(shí)現(xiàn),就涉及到數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu),存儲(chǔ)結(jié)構(gòu)有順序、鏈接、散列多種方式。我們講解兩種基本的存儲(chǔ)結(jié)構(gòu)。
在講解存儲(chǔ)結(jié)構(gòu)時(shí)采用圖像示意,加在其上的算法采用動(dòng)畫演示,但算法的具體代碼描述已不再是重點(diǎn)。學(xué)生聽懂后,重點(diǎn)轉(zhuǎn)向數(shù)據(jù)結(jié)構(gòu)的應(yīng)用。就線性表而言,順序表采用ArrayList類實(shí)現(xiàn),鏈表采用LinkedList類實(shí)現(xiàn)。在Java語(yǔ)言中,與《數(shù)據(jù)結(jié)構(gòu)》一樣,ADT是一個(gè)僅保存數(shù)據(jù)類型和可能在這個(gè)數(shù)據(jù)類型上進(jìn)行的操作定義。開發(fā)者只能通過(guò)ADT的操作方法來(lái)訪問(wèn)ADT的屬性,無(wú)需知道ADT內(nèi)部操作如何實(shí)現(xiàn)[11]。這就為我們《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革的重在應(yīng)用提供了可能性。
所以,線性表無(wú)論是采用何種存儲(chǔ)結(jié)構(gòu),對(duì)外的接口總是不變。ArrayList類、LinkedList類都是List接口的實(shí)現(xiàn)。List接口中void add(int index,Object element)在指定位置index上添加元素element,Object remove(int index)刪除指定位置上的元素,Object get(int index)返回List中指定位置的元素,int indexOf(Object o)返回第一個(gè)出現(xiàn)元素o的位置,如果沒(méi)有該元素則返回-1,int size(),List subList(fromIndex, toIndex)等方法,ArrayList類、LinkedList類同樣具有。LinkedList類增加特有的方法,如void addFirst(Object o),void addLast(Object o),Object getFirst( ),Object getLast( ),Object removeFirst( ),Object removeLast( )。
該處數(shù)據(jù)結(jié)構(gòu)應(yīng)用舉例為模擬撲克發(fā)牌。采用ArrayList實(shí)現(xiàn)。首先生成52張撲克牌,然后用Collections.shuffle( )方法打亂牌的順序,這個(gè)操作即模擬撲克洗牌操作,之后根據(jù)運(yùn)行參數(shù)進(jìn)行模擬撲克發(fā)牌。發(fā)牌方法dealHand(List deck,int n),參數(shù)n指明每人發(fā)牌張數(shù)。部分代碼如下:
public static List dealHand(List deck,int n){//發(fā)牌
int deckSize=deck.size();
List handView=deck.subList(deckSize-n,deckSize);
List hand=new ArrayList(handView);
handView.clear();
return hand;
}
再通過(guò)調(diào)用main()方法來(lái)調(diào)用dealHand(deck,cardsPerHand)。
int numHands=4;//發(fā)牌人數(shù)
int cardsPerHand=11;//每人發(fā)牌張數(shù)
String[]suit=new String[]{\"spades\",\"hearts\",\"diamonds\",\"clubs\"};//四種花式
String[]rank=new String[]{\"Ace\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"Jack\",\"Queen\",\"King\"};//13張牌
List deck=new ArrayList();//
for(int i=0;i for(int j=0;j deck.add(rank[j]+\" of \"+suit[i]); Collections.shuffle(deck);//打亂牌的順序,模擬洗牌操作 for(int i=0;i System.out.println(dealHand(deck,cardsPerHand));//發(fā)牌 當(dāng)我們將 for(int i=0;i System.out.println(dealHand(deck,cardsPerHand));//發(fā)牌 增加在 Collections.shuffle(deck);//打亂牌的順序,模擬洗牌操作 之前,可以對(duì)照洗牌前后的線性表的元素,順序發(fā)生了變化,加強(qiáng)了對(duì)有序概念的理解。 這樣的數(shù)據(jù)結(jié)構(gòu)講解,學(xué)生特別有興趣,在不知不覺中,理解了數(shù)據(jù)結(jié)構(gòu)的概念,學(xué)會(huì)了線性表的應(yīng)用,達(dá)到了《數(shù)據(jù)結(jié)構(gòu)》課程的教學(xué)目的。 4 結(jié)束語(yǔ) 《數(shù)據(jù)結(jié)構(gòu)》課程是我校的精品課程,通過(guò)多年教學(xué)改革,我們做了許多有益的探索,學(xué)生通過(guò)共享教學(xué)改革的成果,對(duì)《數(shù)據(jù)結(jié)構(gòu)》課程的學(xué)習(xí)收到了很好的效果。通過(guò)不斷努力探索,我們將《數(shù)據(jù)結(jié)構(gòu)》課程的教學(xué)從理論較重,改變?yōu)樽⒅貞?yīng)用,走出一條適合高職學(xué)生的教學(xué)之路。 參考文獻(xiàn): [1] 馬秋菊.數(shù)據(jù)結(jié)構(gòu)[M].北京:中國(guó)水利水電出版社,2006. [2] 唐策善,黃劉生.數(shù)據(jù)結(jié)構(gòu)[M].北京:高等教育出版社,2004. [3] 嚴(yán)尉敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)[M].北京:清華大學(xué)出版社,2000. [4] 全國(guó)高等院校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)[M].高職院校計(jì)算機(jī)教育經(jīng)驗(yàn)匯編. 北京:中國(guó)鐵道出版社,2007. [5] 劉建國(guó).高職《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)方法改革探討[J].北京市經(jīng)濟(jì)管理干部學(xué)院學(xué)報(bào).2007.6:78-80. [6] 張銘,等.數(shù)據(jù)結(jié)構(gòu)課程的知識(shí)體系和教學(xué)實(shí)踐[J].計(jì)算機(jī)教育.2004.3:89-91. [7] 帥訓(xùn)波,等.數(shù)據(jù)結(jié)構(gòu)間的縱橫聯(lián)系,計(jì)算機(jī)與信息技術(shù)[J].2007.8:39-41. [8] 王志華,等.高等職業(yè)教育中《數(shù)據(jù)結(jié)構(gòu)》課程建設(shè)研究[J].忻州師范學(xué)院學(xué)報(bào).2007.4:59-61. [9] 李治軍,等.數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)教學(xué)模式的探討[J].計(jì)算機(jī)教育.2006.2:54-57. [10] J. Pinson著,羅英偉等譯,Java數(shù)據(jù)結(jié)構(gòu)與面向?qū)ο缶幊袒A(chǔ)[M].北京:人民郵電出版社,2002. [11] 孫杰,Java程序設(shè)計(jì)[M].北京:中國(guó)計(jì)劃出版社,2007.