劉麗穎 張博
在深入認識數(shù)據(jù)內(nèi)涵和價值的基礎上認識數(shù)據(jù)結(jié)構(gòu),是為基本數(shù)據(jù)結(jié)構(gòu)的學習奠定基礎,也是從數(shù)據(jù)到數(shù)據(jù)結(jié)構(gòu)的過渡。建議教師精選典型的精巧案例,由淺入深,將數(shù)據(jù)進行結(jié)構(gòu)化,體現(xiàn)不同結(jié)構(gòu)數(shù)據(jù)的不同含義,讓學生充分理解數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)為基礎的集合,集合中的數(shù)據(jù)存在某種特定關(guān)系,這種關(guān)系就稱之為集合中的數(shù)據(jù)的結(jié)構(gòu)。
厘清概念,梳理結(jié)構(gòu)
1.《初識數(shù)據(jù)結(jié)構(gòu)》概念圖(如下頁圖1)
2.概念辨析
(1)數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)類型
①數(shù)據(jù)結(jié)構(gòu)是相互之間存在的一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。概念講解中強調(diào)“數(shù)據(jù)結(jié)構(gòu)”一般通過“數(shù)據(jù)對象”和“數(shù)據(jù)關(guān)系”兩個維度進行定義,因此,即使“數(shù)據(jù)對象”相同,但數(shù)據(jù)對象之間的“數(shù)據(jù)關(guān)系”不同,它們也是不同的數(shù)據(jù)結(jié)構(gòu)。嘗試讓學生舉一反三體會相同數(shù)據(jù)對象、不同數(shù)據(jù)關(guān)系對應不同數(shù)據(jù)結(jié)構(gòu)(參考教材相應例子),讓學生認識到數(shù)據(jù)結(jié)構(gòu)可以根據(jù)自己的需求進行合理構(gòu)造。構(gòu)造數(shù)據(jù)結(jié)構(gòu)是解決問題的重要方法,要從待解決的問題中抽象出數(shù)據(jù)對象,繼而合理定義數(shù)據(jù)對象之間的特定關(guān)系,就可以定義屬于自己的數(shù)據(jù)結(jié)構(gòu)了。
②數(shù)據(jù)類型是一組相同的值的集合以及定義在這個集合上的一組操作的總稱。概念講解時可以從學生既有經(jīng)驗入手,如今的高中生在小學和初中階段都接觸過程序設計,無論哪種語言在使用時對數(shù)據(jù)類型的理解都是相通的。簡言之,數(shù)據(jù)類型學生早就接觸過、使用過,現(xiàn)在是從理論的角度重新認識數(shù)據(jù)類型。數(shù)據(jù)類型講解強調(diào)取值范圍和對應操作,練習時可以直接將所用版本教科書中的語言作為練習對象,進一步熟悉該語言數(shù)據(jù)類型,以便為后續(xù)學習打下基礎。
在理解數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型的基礎上理解抽象數(shù)據(jù)類型的概念,一般由數(shù)據(jù)對象、數(shù)據(jù)對象上的關(guān)系以及對數(shù)據(jù)對象的一組基本操作三個要素來定義。一般的計算機語言中已經(jīng)為用戶提供了部分數(shù)據(jù)類型,如數(shù)值型、字符型、邏輯型等,當這些基礎類型不能滿足解決問題的需求時,就要以抽象數(shù)據(jù)類型三要素為依據(jù)構(gòu)造自己需要的數(shù)據(jù)類型,以便于計算機處理,有效解決問題。
(2)邏輯結(jié)構(gòu)和物理結(jié)構(gòu)
①邏輯結(jié)構(gòu)是指結(jié)構(gòu)定義中的“關(guān)系”,描述的是數(shù)據(jù)元素之間的邏輯關(guān)系,通常分為線性結(jié)構(gòu)(線性表、棧、隊列、串)和非線性結(jié)構(gòu)(圖、樹)。
講解時可以用數(shù)據(jù)元素之間一對一、一對多、多對多的關(guān)系幫助學生理解邏輯結(jié)構(gòu),線性結(jié)構(gòu)對應一對一的關(guān)系,非線性結(jié)構(gòu)對應一對多或多對多的關(guān)系。
②物理結(jié)構(gòu)(存儲結(jié)構(gòu))是數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機中的表示。通常可以分為順序存儲和鏈式存儲兩種。
在講解數(shù)據(jù)在計算中的存儲時,建議結(jié)合存儲單元將常見數(shù)據(jù)類型的存儲進行講解,明確不同的數(shù)據(jù)類型在計算中占據(jù)不同字節(jié)的存儲空間,有利于學生應對存儲空間的計算題目和更好地理解順序存儲與鏈式存儲這兩種存儲結(jié)構(gòu)的區(qū)別和優(yōu)缺點。強調(diào)邏輯關(guān)系相鄰的數(shù)據(jù)在物理存儲上也相鄰就是順序存儲,需要較大的連續(xù)的存儲空間;邏輯上相鄰物理上不相鄰的存儲就是鏈接存儲,可以有效利用零散的內(nèi)存空間,但是由于需要記錄鏈接信息,可以引入指針來實現(xiàn),則每個數(shù)據(jù)元素比順序存儲時需要更多的存儲空間存放數(shù)據(jù)元素本身和指針信息。
(3)數(shù)組和鏈表
①數(shù)組是一組具有相同數(shù)據(jù)類型的數(shù)據(jù)元素的集合,占用一段連續(xù)的存儲空間,常用來實現(xiàn)數(shù)據(jù)的順序存儲。數(shù)組的定義和操作需要精講,可以結(jié)合所用的語言設計多個小程序,讓學生體會數(shù)組的初始化、賦值、查找元素、插入/刪除元素等操作,為后續(xù)學習打下堅實的基礎。
②鏈表是指多個結(jié)點(由數(shù)據(jù)域和指針域組成)鏈接成的序列。鏈表的特點是可以通過指針將內(nèi)存中不連續(xù)的存儲空間有效利用,因此指針中存放的是鏈表中下一個結(jié)點的地址,是鏈接存儲方式的索引。授課時要從“原理→示意圖→語句表達”三個階段進行教學,夯實每一個階段的學習要求,從原理上明確鏈式存儲的優(yōu)缺點,通過會畫示意圖檢驗學生是否掌握基本操作(定義、初始化、查找、插入、刪除等)時數(shù)據(jù)域和指針域的變化,最后再用程序?qū)崿F(xiàn)簡單操作。
順序存儲可通過數(shù)組實現(xiàn),鏈式存儲可通過鏈表實現(xiàn),建議教師可以引導學生利用思維導圖等工具將數(shù)組、鏈表、存儲方式等知識進行總結(jié)歸納,以此作為項目學習的一個重要考核內(nèi)容。
學科核心素養(yǎng)要求
①結(jié)合生活實際,理解數(shù)據(jù)結(jié)構(gòu)的概念,認識數(shù)據(jù)結(jié)構(gòu)在解決問題過程中的重要作用。(信息意識)
②理解抽象數(shù)據(jù)類型的概念,能夠?qū)μ囟ㄉ钋榫持械年P(guān)系進行抽象,認識抽象數(shù)據(jù)類型對數(shù)據(jù)處理的重要性。(信息意識)
③通過案例分析,理解數(shù)組、鏈表等基本數(shù)據(jù)結(jié)構(gòu)的概念,并能編程實現(xiàn)其相關(guān)操作。(計算思維)
④比較數(shù)組、鏈表的區(qū)別,明確上述兩種數(shù)據(jù)結(jié)構(gòu)在存儲不同類型數(shù)據(jù)時的應用,能根據(jù)不同的應用場景選擇合適的存儲方式。(數(shù)字化學習與創(chuàng)新)
上述核心素養(yǎng)只是重點提煉,教師可以根據(jù)具體情況具體分析,在學科教學中充分落實學科核心素養(yǎng),舉例時必須采用更多生活中的具象問題與抽象的數(shù)據(jù)結(jié)構(gòu)建立聯(lián)系,才能將抽象內(nèi)容具象化,幫助學生理解數(shù)據(jù)結(jié)構(gòu)的重要作用,從學科核心素養(yǎng)的培養(yǎng)上升到學生數(shù)字素養(yǎng)的養(yǎng)成。
項目學習舉例
1.項目活動設計思路
每個圖書館都有自己獨特的管理系統(tǒng),每天都要處理若干條圖書信息,實現(xiàn)對圖書的查詢、借閱和更新等操作。以學校讀書月活動的開展為契機,高二年級各班都儲備了大量書籍,結(jié)合本章主題學習項目,以班為單位開展本次項目活動設計,各班針對不同的特點選擇適合的數(shù)據(jù)結(jié)構(gòu)進行書目管理,在讀書月閉幕階段進行年級展示。
2.主題學習項目:我的圖書館
(1)項目目標
學生通過親自參與項目活動,體驗實現(xiàn)圖書管理的各個過程,感受不同的存儲結(jié)構(gòu)對圖書管理呈現(xiàn)不同的操作結(jié)果。研究圖書管理程序各項功能的基本操作,形成自己的理解并進行深入學習,最終實現(xiàn)比較完善的圖書管理程序。
(2)項目準備
①分組:每班按照不同的存儲方式進行分組,3~5人一組,明確分工,制訂項目規(guī)劃。
②分配任務,確定主題,學習數(shù)據(jù)結(jié)構(gòu)的基本概念。
③復習Python的基礎知識。
④運用不同的數(shù)據(jù)結(jié)構(gòu)存儲方式實現(xiàn)圖書管理程序,并測試程序功能,減少運行錯誤。
(3)項目過程
①小組討論并制訂項目規(guī)劃目標、實施方法,用思維導圖記錄規(guī)劃結(jié)果。
項目主題:我的圖書館。
實施方法:整理本班書目,包括書籍名稱、分類、冊數(shù)、捐贈者姓名等,結(jié)合本組特點,運用一種存儲方式進行管理,在計算機上形成程序運行。
成員分工:小組成員共計5人,分別為A、B、C、D、E。A為組長。第一周B負責整理數(shù)據(jù)對象,小組成員學習數(shù)據(jù)結(jié)構(gòu)基本概念。第二周C、D負責運用Python實現(xiàn)圖書管理存儲程序。第三周E負責測試程序功能,減少運行錯誤,全體完成項目報告撰寫。
預期成果:在第三周能夠?qū)崿F(xiàn)圖書管理存儲程序的基本功能操作。
②學習數(shù)據(jù)結(jié)構(gòu)的基本概念。通過教師準備的微課進行學習。
小組成員根據(jù)整理出來的書目(如上頁表1),按照邏輯結(jié)構(gòu)進行繪制。通常將邏輯結(jié)構(gòu)分為四種,即集合結(jié)構(gòu)、線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖狀結(jié)構(gòu)。以下邏輯結(jié)構(gòu)圖均以“序號”來標識每一本書的基本信息。
所有書籍同屬于班級整體書目,所有書籍構(gòu)成一個集合,數(shù)據(jù)元素之間并無其他關(guān)系,成為集合結(jié)構(gòu),如圖2所示。
將表1中書籍按照序號順序排列,數(shù)據(jù)元素之間為一對一的關(guān)系,構(gòu)成一個線性結(jié)構(gòu),如圖3所示。
書籍之間的分類也是分層的,有文藝和人文社科兩個大類,樹形結(jié)構(gòu)中,沒有父節(jié)點的數(shù)據(jù)元素稱作根節(jié)點,沒有子節(jié)點的數(shù)據(jù)元素稱作葉節(jié)點,構(gòu)成樹形結(jié)構(gòu),如圖4所示。
每位學生都可以閱讀自己和別人的書籍,相互之間的關(guān)系為多對多,彼此之間可以形成一個圖狀結(jié)構(gòu),如圖5所示。
在對數(shù)據(jù)結(jié)構(gòu)有了基本的了解之后,小組成員繼續(xù)根據(jù)本組特點,分別對表1進行了順序存儲和鏈式存儲示意圖的繪制,如下頁表2及下頁圖6所示。
③結(jié)合教材實例,用Python語言實現(xiàn)圖書管理存儲程序,完成不同存儲方式的基本操作,如增加、刪除等,突破教學難點。
以順序存儲為例,先初始化一個具有6個元素一維數(shù)組a,并將書籍名稱存入數(shù)組a中。主要程序如下頁圖7所示。
除此之外,還可以在順序結(jié)構(gòu)中進行增加書籍名稱和刪除書籍名稱的操作,但是需要挪動部分數(shù)組中的元素,存在一定的不便之處。
小組若以鏈式存儲為例,將書籍名稱存到鏈表當中,首先對鏈表進行初始化。主要程序如下頁圖8所示。
同理,在鏈表中也可以實現(xiàn)對數(shù)據(jù)元素的插入、刪除、查找,甚至整個鏈表的長度也可以計算,并且不影響其他元素的位置,但是每次查找操作都要從頭開始。
通過兩種不同的存儲方式,展示了對書目的不同操作要求,也意味著在這個過程中不同小組成員之間可以通過溝通進一步區(qū)別順序存儲和鏈式存儲的不同點,以及各自的特點,以便在今后的項目活動中選擇更加合適的存儲方式來解決問題。
④梳理并總結(jié)程序?qū)崿F(xiàn)過程,撰寫項目報告。在對程序功能進行調(diào)試、減少錯誤率之后,全組成員集體根據(jù)整個項目活動的參與過程,按照項目報告的書寫規(guī)范,及時進行總結(jié),并參考相關(guān)輔助資料。
設想:通過改進程序,今后不僅可以在程序中增加或刪除書目,還可以實現(xiàn)圖書與師生的借閱功能,并形成相應記錄。待系統(tǒng)更完善,可以和學校的圖書館聯(lián)合制訂相應的圖書管理制度,實現(xiàn)班級、年級乃至學校圖書館圖書信息的整體操作運行。
(4)項目總結(jié)
以“我的圖書館”為項目主題,在高二年級展開以班級為單位的圖書管理存儲程序的設計活動。通過充分的項目活動準備,小組成員與教師密切配合,在項目實施過程中認真學習相關(guān)知識體系,從認識數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)類型到數(shù)組與鏈表的基本概念和操作,根據(jù)已有基礎,完成Python程序設計,實現(xiàn)相應存儲功能,最終完成既定的項目目標。
(5)學生成果展示,項目活動評價與學生自主學習評價
項目活動評價表3及學生自主學習評價設計略。
教學評價建議
本模塊是選擇性必修模塊,本單元又是概念性比較突出的一個單元,教學評價一定要和教師的教學方式有效結(jié)合才能起到評價的助力作用,幫助學生及時糾正學習中的問題,提高學習效率,增強學習興趣和自信心,使評價成為教師與學生溝通的有效途徑。
建議評價可以通過課堂參與、課后關(guān)注、項目貢獻三個維度進行,采用等級制用自評、組間評價、教師評價綜合完成。
①課堂參與可以利用相關(guān)軟件統(tǒng)計學生的參與度以及提交課堂作業(yè)的次數(shù)和準確率進行合理采樣,通過數(shù)據(jù)分析支持評價。
②課后關(guān)注則要成立相關(guān)學習交流群,教師定期發(fā)送數(shù)據(jù)結(jié)構(gòu)相關(guān)知識讓學生學習反饋、討論交流,統(tǒng)計反饋情況和學生互動情況;學生個體、學習小組也可以在群內(nèi)提供學習資源,發(fā)表學習心得,教師根據(jù)學生表現(xiàn)進行評價。
③項目貢獻是教師根據(jù)學生以小組為單位提交的項目學習成果進行評價,通過項目分工及成果反饋評定學生在該項目中的貢獻度,這樣可以有效避免組內(nèi)個別學生學習過程不積極、全靠其他成員支撐的問題,客觀評價學生的付出,把評價落到實處。