付勇智
[摘 要] 以廣義表為例,探討在數據結構教學中,如何抓住知識運用這個主題,激發學生的學習興趣,提高數據結構抽象能力。
[關 鍵 詞] 廣義表;json格式;數據抽象
[中圖分類號] G712 [文獻標志碼] A [文章編號] 2096-0603(2018)28-0116-01
一、概述
程序設計的主要任務就是數據表示和處理,數據表示又可以分為數據建模和數據的機內表示。數據建模即抽象出數據邏輯結構,是指反映數據元素之間的邏輯關系的數據結構,其中的邏輯關系是指數據元素之間的前后件關系,而與它們在計算機中的存儲位置無關。數據的機內表示分為數據元素的機內表示和關系的機內表示,即數據的物理結構,數據元素的機內表示一般是把數據元素中各個數據項組織成一個節點,放在一塊連續的
內存、數據元素之間關系的機內表示一般采用順序、鏈接、索引、散列等多種存儲形式。常用的存儲形式有順序存儲形式和鏈式存儲形式。數據結構課程主要是研究數據的邏輯結構與數據的物理結構。
多年的教學實踐中發現,學生很難把數據結構的知識與程序
設計聯系起來,用的最多的就是數組與鏈表,而這只是數據元素之間關系的機內表示。幾乎不會把實際問題抽象形成數據結構的課程中學到的各種典型結構。
本文選擇軟件開發中經常用的json結構與廣義表的關系研究,探討在廣義表的教學中如何做到使學生學以致用。
二、廣義表
廣義表是一種特殊的線性表,與線性表不同,廣義表的元素可以是一個簡單值,也可以是一個廣義表。廣義表一般表示為,LS={a,b,c,…,A,B,C,…},其中小寫字母表示單個元素,大寫一個廣義表,可以看出廣義表是一種嵌套表。
在軟件開發中,很多事物都適合用廣義表進行描述與存儲。例如,中國有很多省就可以這樣描述:中國=(“中國”,省1,省2,…);每個省又是一個線性表:省=(“名稱”,市1,市2…),等等。
廣義表中各個子廣義表的結構與長度可能都不同,所以一般
都用鏈式存儲結構,而且可能是異構節點的鏈表。如果用順序存儲,就要考慮定長,或者為子廣義表定義一個開始或結束標志。
由于廣義表的復雜性,加上各個語言的語法元素沒有直接的
語法元素對應,學生就不太愿意學。
三、Json
Json的元素可以是三種類型:
1.簡單值。 字符串、數值、布爾值和null。
2.對象。 對象表示一組有序的鍵值對,每個值可以是簡單數據類型值,也可以是復雜數據類型的值。
3.數組。 數組是一種復雜數據類型,表示一組有序值的列表,數組值可以是簡單值、對象或數組。
下面是中國行政區結構的json表示,包含json對象、json
數組。
{
{“name”:"中國",“province”:[{“name”:"黑龍江",“cities”:{“city”:["哈爾濱","大慶"] }},{“name”:"廣東",“cities”:{“city”:["廣州","深圳","珠海"] }}…]
}
四、案例設計
結合學生熟悉的現實場景,充分考慮廣義表與json的基本特
征,在教學中我們選擇了學校這個對象,一個學校有許多系,一個系有許多班級,每個班有許多學生的應用案例。
該案例的json就是:
學校={“名稱”:“學校名稱”,
“系”:[{“名稱”:“系1”,
“班”:[{“名稱”:“班1”,[“學生1”,“學生2”,…]}, {“名稱”:“班2”,[“學生1”,“學生2”,…]},…]},
{“名稱”:”系2” ,
”班”:[{“名稱”:“班1”,[“學生1”,“學生2”,…]}, {“名稱”:“班1”,[“學生1”,“學生2”,…]},…]},…]}
把信息進行抽象得到的廣義表描述如下:
學校=(“學校名稱”,“系1”,“系2”,…)
系=(“系名”,“班1”,“班2”,…)
班=(“班號”,“學生1”,“學生2”,…)
至此,學生就可以通過課堂學到的廣義表的存儲方式,理解json結構是如何存儲的。現在許多內存數據庫,用的就是json結構描述對象,進而通過這樣的抽象,學生也理解了一種面向對象數據庫存儲方式。
五、效果
近幾年教學實踐,這樣使學生理論聯系實際,很容易也很愿意學習廣義表了。
參考文獻:
[1]嚴蔚敏,吳為民.數據結構[M].清華大學出版社,2002(2).
[2][美]巴塞特.JSON必知必會[M].人民郵電出版社,2016.