數據結構概述

數據庫概述

數據結構討論現實世界和計算機世界中的數據及其相互之間的聯繫,這體現在邏輯和存儲兩個層面上,相應稱之爲邏輯結構和存儲結構。也就是說,在現實世界中討論的數據結構是指邏輯結構,在計算機世界中討論的數據結構是指存儲結構,又稱爲物理結構。

數據的邏輯結構總體上分爲種類型:集合結構、線性結構、樹結構和圖結構。數據的存儲結構總體上也分爲種類型:順序結構、鏈接結構、索引結構和散列結構。原則上,一種邏輯結構可以採用任一種存儲結構來存儲(表示)。

對於現實世界中的同一種數據,根據研究問題的角度不同,將會選用不同的邏輯結構;對於一種邏輯結構,根據處理問題的要求不同,將會選用不同的存儲結構。

對於複雜的數據結構,不論從邏輯層面上還是從存儲層面上看,都可能包含有多個嵌套層次。如假定一種數據結構包含有兩個層次,第一層(頂層)的邏輯結構可能是樹結構,存儲結構可能是鏈接結構;第二層(底層)的邏輯結構可能是線性結構,存儲結構可能是順序結構。第一層結構就是數據的總體結構,第二層結構就是第一層中數據元素的結構。

數據的邏輯結構通常採用二元組來描述,其中一元爲數據元素的集合,另一元爲元素之間邏輯關係的集合,每一個邏輯關係是元素序偶的集合,如<x,y>就是一個序偶,其中x爲前驅,y爲後繼。當數據的邏輯結構存在着多個邏輯關係時,通常對每個關係分別進行討論。

邏輯結構的另一種描述方法是圖形表示,圖中每個結點表示元素,每條帶箭頭的連線表示元素之間的前驅與後繼的關係,其箭頭一端爲後繼元素,另一端爲前驅元素。

數據的存儲結構通常採用一種計算機語言中的數據類型來描述,通過建立數據存儲結構的算法來具體實現。

數據的邏輯結構或存儲結構也時常被簡稱爲數據結構,讀者可根據上下文來理解。

下面通過例子來說明數據的邏輯結構。

假定某校教務處的職員簡表如表1.1所示。該表中共有10條記錄,每條記錄都由6個數據項組成。此表整體上被看爲一個數據,每個記錄是這個數據中的數據元素。由於每條記錄的職工號各不相同,所以可把職工號作爲記錄的關鍵字,在下面構成的各種數據結構中,將用記錄的關鍵字代表整個記錄。

表1.1教務處職員簡表

職 工 號

姓 名

性 別

出 生 日 期

職 務

部 門

01

萬明華

1962.03.20

處長

 

02

趙 寧

1968.06.14

科長

教材科

03

張 利

1964.12.07

科長

考務科

04

趙書芳

1972.08.05

主任

辦公室

05

劉永年

1959.08.15

科員

教材科

06

王明理

1975.04.01

科員

教材科

07

王 敏

1972.06.28

科員

考務科

08

張 才

1967.03.17

科員

考務科

09

馬立仁

1975.10.12

科員

考務科

10

邢懷常

1976.07.05

科員

辦公室

【例1.1】一種數據結構的二元組表示爲set=(K,R)其中

K={01,02,03,04,05,06,07,08,09,10}

R={}

在數據結構set中,只存在有元素的集合,不存在有關係,或者說關係爲空。這表明只考慮表中的每條記錄,不考慮它們之間的任何關係。把具有此種特點的數據結構稱爲集合結構。

集合結構中的元素可以任意排列,無任何次序。

【例1.2】一種數據結構的二元組表示爲linearity=(K,R)其中 

K={01,02,03,04,05,06,07,08,09,10}

R={<05,01>,<01,03>,<03,08>,<08,02>,<02,07>,<07,04><04,06>,<06,09>,<09,10>}

對應的圖形表示如圖1.1所示。

 

圖1.1數據的線性結構示意圖

結合表1.1,細心的讀者不難看出:R是按職員年齡從大到小排列的關係。

在數據結構linearity中,數據元素之間是有序的,每個數據元素有且僅有一個直接前驅元素(除結構中第一個元素05外),有且僅有一個直接後繼元素(除結構中最後一個元素10外)。這種數據結構的特點是數據元素之間的1對1(1∶1)聯繫,即線性關係。我們把具有這種特點的數據結構叫做線性結構。【1.3】一種數據結構的二元組表示爲tree=(K,R),其中

K={01,02,03,04,05,06,07,08,09,10}

R={<01,02>,<01,03>,<01,04>,<02,05>,<02,06>,<03,07>,<03,08>,<03,09>,<04,10>}

對應的圖形表示如圖1.2所示。

 

圖1.2 數據的樹結構示意圖

結合表1.1,細心的讀者不難看出:R是職員之間領導與被領導的關係。

圖1.2像倒着畫的一棵樹,在這棵樹中,最上面的一個沒有前驅只有後繼的結點叫做樹根結點,最下面一層的只有前驅沒有後繼的結點叫做樹葉結點,除樹根和樹葉之外的結點叫做樹枝結點。

在一棵樹中,每個結點有且只有一個前驅結點(除樹根結點外),但可以有任意多個後繼結點(樹葉結點可看作爲含0個後繼結點)。這種數據結構的特點是數據元素之間的1對N(1∶N)聯繫(N≥0),即層次關係,我們把具有這種特點的數據結構叫做樹結構,簡稱樹。

【例1.4】一種數據結構的二元組表示爲graph=(K,R),其中

K={01,02,03,04,05,06,07}

R={<01,02>,<02,01>,<01,04>,<04,01>,<02,03>,<03,02>,

<02,06>,<06,02>,<02,07>,<07,02>,<03,07>,<07,03>,

<04,06>,<06,04>,<05,07>,<07,05>}

對應的圖形表示如圖1.3所示。

從圖1.3可以看出,RK上的對稱關係。爲了簡化起見,我們把〈x,y〉和〈y,x〉這兩個對稱序偶用一個無序對(x,y)或(y,x)來代替;在示意圖中,我們把x結點和y結點之間兩條相反的有向邊用一條無向邊來代替。這樣R關係可改寫爲:

R={(01,02),(01,04),(02,03),(02,06),(02,07),(03,07),(04,06),(05,07)}

對應的圖形表示如圖1.4所示。

如果說R中每個序偶裏的兩個元素所代表的職員是好友的話,那麼R關係就是人員之間的好友關係。

 

1.3 數據的圖結構示意圖

1.4 的等價表示

從圖1.31.4可以看出,結點之間的聯繫是MNM∶N)聯繫(M≥0N≥0),即網狀關係。也就是說,每個結點可以有任意多個前驅結點和任意多個後繼結點。我們把具有這種特點的數據結構叫做圖結構,簡稱圖。

從圖結構、樹結構和線性結構的定義可知,樹結構是圖結構的特殊情況(即M=1的情況),線性結構是樹結構的特殊情況(即N=1的情況)。爲了區別於線性結構,我們把樹結構和圖結構統稱爲非線性結構。

集合結構是整個數據結構中的一種特殊情況,其元素之間不存在任何關係。

【例1.5】一種數據結構的二元組表示爲B=(K,R),其中

K={k1,k2,k3,k4,k5,k6}

R={R1,R2}

R1={<k3,k2>,<k3,k5>,<k2,k1>,<k5,k4>,<k5,k6>}

R2={<k1,k2>,<k2,k3>,<k3,k4>,<k4,k5>,<k5,k6>}

若用實線表示關係R1,虛線表示關係R2,則對應的圖形表示如圖1.5所示。

 

1.5 帶有兩個關係的一種數據結構示意圖

從圖1.5可以看出:數據結構B是圖結構。但是,若只考慮關係R1則爲樹結構,若只考慮關係R2則爲線性結構。

下面簡要討論數據的存儲結構。

存儲數據不僅要存儲數據中的每個數據元素,而且要存儲元素之間的邏輯關係。具體地說,若數據是集合結構,則只需要存儲所有數據元素,不需要存儲它們之間的任何關係;若數據是線性結構、樹結構或圖結構,則除了要存儲所有數據元素外,還要相應存儲元素之間的線性關係、層次關係或網狀關係。

數據的存儲結構分爲順序、鏈接、索引和散列4種。

順序存儲對應一塊連續的存儲空間,該空間的大小要大於等於存儲所有元素需佔有的存儲空間的大小,存儲元素之間的聯繫(即邏輯結構)通常不需要附加空間,而是通過元素下標之間的對應關係反映出來,只要簡單的計算就可以得到一個元素的前驅或後繼元素的下標。順序存儲空間一般需要通過定義數組類型和數組對象來實現。

在鏈接存儲結構中,元素之間的邏輯關係通過存儲結點之間的鏈接關係反映出來,每個存儲結點對應存儲一個元素,同時存儲該元素的前驅和後繼元素所在結點的存儲位置,或者說同時存儲指向其前驅元素結點和後繼元素結點的指針,通過這些指針能夠直接訪問到其前驅元素和後繼元素。鏈接存儲空間通過定義元素的存儲結點類型和對象來實現,所有存儲結點可以佔用連續的存儲空間(即數組空間),也可以佔用不連續的存儲空間,此空間是由動態分配的每個結點的空間形成的。

索引存儲是首先把所有數據元素按照一定的函數關係劃分成若干個子表,每個子表對應一個索引項,然後採用一種存儲結構存儲所有子表的索引項和採用另一種存儲結構存儲所有子表中的元素。如存儲漢字字典時,需要採用索引存儲,首先按偏旁部首劃分所存漢字爲若干子表,得到偏旁部首表,對於每個部首再按所屬漢字的筆畫多少劃分子表,得到檢字表,檢字表中的每個漢字對應漢字解釋表(即字典主體)中的一個條目;然後再分別存儲部首表、檢字表和漢字解釋表。這裏檢字表是漢字解釋表的索引,而偏旁部首表又是檢字表的索引,它是漢字解釋表的二級索引。當存儲的數據量很大時,通常都需要採用索引存儲,並且時常使用多級索引。

在索引存儲中,各級索引表和主表(即數據元素表)通常都以文件的形式保存在外存磁盤上,訪問任一數據元素時,都要根據該數據元素的特徵依次訪問各級索引表和最後訪問主表,存取外存的次數至少等於建立索引的級數加1

散列存儲方法是按照數據元素的關鍵字通過一種函數變換直接得到該元素存儲地址的方法,該存儲地址爲相應數組空間中的下標位置。用於散列存儲所有數據元素的相應數組空間稱爲散列表。通過定義用於計算散列存儲地址的函數和定義存儲數據元素的散列表能夠實現散列存儲結構。

轉載,來源不詳

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章