1. 程式人生 > >基本概念和術語

基本概念和術語

程序語言 指針 dia 序表 單獨使用 做什麽 結點 定義 根據

數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。

數據(Data):數據是信息的載體。它能夠被計算機識別、存儲和加工處理,是計算機程序加工的"原料"。隨著計算機應用領域的擴大,數據的範疇包括:整數、實數、字符串、圖像和聲音等。

數據元素(Data Element):數據元素是數據的基本單位。數據元素也稱元素、結點、頂點、記錄。一個數據元素可以由若幹個數據項(也可稱為字段、域、屬性)組成。 數據項是具有獨立含義的最小標識單位。

數據結構(Data Structure):數據結構指的是數據之間的相互關系,即數據的組織形式。

1.數據結構一般包括以下三方面內容:
①數據元素之間的邏輯關系,也稱數據的邏輯結構(Logical Structure);
數據的邏輯結構是從邏輯關系上描述數據,與數據的存儲無關,是獨立於計算機的。數據的邏輯結構可以看作是從具體問題抽象出來的數學模型。

②數據元素及其關系在計算機存儲器內的表示,稱為數據的存儲結構(Storage Structure);
數據的存儲結構是邏輯結構用計算機語言的實現(亦稱為映象),它依賴於計算機語言。對機器語言而言,存儲結構是具體的。一般,只在高級語言的層次上討論存儲結構。

③ 數據的運算,即對數據施加的操作。
數據的運算定義在數據的邏輯結構上,每種邏輯結構都有一個運算的集合。最常用的檢索、插入、刪除、更新、排序等運算實際上只是在抽象的數據上所施加的一系列抽象的操作。所謂抽象的操作,是指我們只知道這些操作是"做什麽",而無須考慮"如何做"。只有確定了存儲結構之後,才考慮如何具體實現這些運算。

為了增加對數據結構的感性認識,下面舉例來說明有關數據結構的概念。
【例1.1】 學生成績表,見下表。
技術分享圖片

註意:在表中指出數據元素、數據項、開始結點和終端結點等概念

(1)邏輯結構:表中的每一行是一個數據元素(或記錄、結點),它由學號、姓名、各科成績及平均成績等數據項組成。表中數據元素之間的邏輯關系是:對表中任一個結點,與它相鄰且在它前面的結點(亦稱為直接前趨(Immediate Predecessor))最多只有一個;與表中任一結點相鄰且在其後的結點(亦稱為直接後繼(Immediate Successor))也最多只有一個。表中只有第一個結點沒有直接前趨,故稱為開始結點;也只有最後一個結點沒有直接後繼。故稱之為終端結點。例如,表中"馬二"所在結點的直接前趨結點和直接後繼結點分別是"丁一"和"張三"所在的結點,上述結點間的關系構成了這張學生成績表的邏輯結構。

(2)存儲結構:該表的存儲結構是指用計算機語言如何表示結點之間的這種關系,即表中的結點是順序鄰接地存儲在一片連續的單元之中,還是用指針將這些結點鏈接在一起?

(3)數據的運算:在上面的學生成績表中,可能要經常查看某一學生的成績;當學生退學時要刪除相應的結點;進來新學生時要增加結點。究竟如何進行查找、刪除、插入,這就是數據的運算問題。搞清楚了上述三個問題,也就弄清了學生成績表這個數據結構。

2.數據的邏輯結構分類

在不產生混淆的情況下,常將數據的邏輯結構簡稱為數據結構。數據的邏輯結構有兩大類:

(1)線性結構:
線性結構的邏輯特征是:若結構是非空集,則有且僅有一個開始結點和一個終端結點,並且所有結點都最多只有一個直接前趨和一個直接後繼。線性表是一個典型的線性結構。棧、隊列、串等都是線性結構。

(2)非線性結構:
非線性結構的邏輯特征是:一個結點可能有多個直接前趨和直接後繼。數組、廣義表、樹和圖等數據結構都是非線性結構。

3.數據的四種基本存儲方法

數據的存儲結構可用以下四種基本存儲方法得到:

(1)順序存儲方法:該方法把邏輯上相鄰的結點存儲在物理位置上相鄰的存儲單元裏,結點間的邏輯關系由存儲單元的鄰接關系來體現。由此得到的存儲表示稱為順序存儲結構(Sequential Storage Structure),通常借助程序語言的數組描述。該方法主要應用於線性的數據結構。非線性的數據結構也可通過某種線性化的方法實現順序存儲。

(2)鏈接存儲方法:該方法不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系由附加的指針字段表示。由此得到的存儲表示稱為鏈式存儲結構(Linked Storage Structure)通常借助於程序語言的指針類型描述。

(3)索引存儲方法:該方法通常在儲存結點信息的同時,還建立附加的索引表。索引表由若幹索引項組成。若每個結點在索引表中都有一個索引項,則該索引表稱之為稠密索引(Dense Index)。若一組結點在索引表中只對應一個索引項,則該索引表稱為稀疏索引(Spare Index)。索引項的一般形式是:(關鍵字、地址),關鍵字是能唯一標識一個結點的那些數據項。稠密索引中索引項的地址指示結點所在的存儲位置;稀疏索引中索引項的地址指示一組結點的起始存儲位置。

(4)散列存儲方法:該方法的基本思想是:根據結點的關鍵字直接計算出該結點的存儲地址。

四種基本存儲方法,既可單獨使用,也可組合起來對數據結構進行存儲映像。同一邏輯結構采用不同的存儲方法,可以得到不同的存儲結構。選擇何種存儲結構來表示相應的邏輯結構,視具體要求而定,主要考慮運算方便及算法的時空要求。

4.數據結構三方面的關系

數據的邏輯結構、數據的存儲結構及數據的運算這三方面是一個整體。孤立地去理解一個方面,而不註意它們之間的聯系是不可取的。存儲結構是數據結構不可缺少的一個方面:同一邏輯結構的不同存儲結構可冠以不同的數據結構名稱來標識。

【例】線性表是一種邏輯結構,若采用順序方法的存儲表示,可稱其為順序表;若采用鏈式存儲方法,則可稱其為鏈表;若采用散列存儲方法,則可稱為散列表。

數據的運算也是數據結構不可分割的一個方面。在給定了數據的邏輯結構和存儲結構之後,按定義的運算集合及其運算的性質不同,也可能導致完全不同的數據結構。

【例】若對線性表上的插入、刪除運算限制在表的一端進行,則該線性表稱之為棧;若對插入限制在表的一端進行,而刪除限制在表的另一端進行,則該線性表稱之為隊列。更進一步,若線性表采用順序表或鏈表作為存儲結構,則對插入和刪除運算做了上述限制之後,可分別得到順序棧或鏈棧,順序隊列或鏈隊列。

數據類型(Data Type):所謂數據類型是一個值的集合以及在這些值上定義的一組操作的總稱。通常數據類型可以看作是程序設計語言中已實現的數據結構。

【例1.2】C語言的"整數類型"就定義了一個整數可取值的範圍(其最大值INT-MAX依賴於具體機器)以及對整數可施加的加、減、乘、除和取模等操作。

按"值"是否可分解,可將數據類型劃分為兩類:

①原子類型:其值不可分解。通常是由語言直接提供。

【例】C語言的整型、字符型等標準類型及指針等簡單的導出類型;

②結構類型:其值可分解為若幹個成分(或稱為分量)。是用戶借助於語言提供的描述機制自己定義的,它通常是由標準類型派生的,故它也是一種導出類型。
【例】C的數組、結構等類型。

總結:
1.數據結構一般包括以下三方面內容
①數據元素之間的邏輯關系,也稱數據的邏輯結構(Logical Structure);
②數據元素及其關系在計算機存儲器內的表示,稱為數據的存儲結構(Storage Structure);
③ 數據的運算,即對數據施加的操作。

2.數據的邏輯結構分類
①線性結構
②非線性結構

3.數據的四種基本存儲方法
①順序存儲方法:該方法把邏輯上相鄰的結點存儲在物理位置上相鄰的存儲單元裏,結點間的邏輯關系由存儲單元的鄰接關系來體現。
②鏈接存儲方法:該方法不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系由附加的指針字段表示。
③索引存儲方法:該方法通常在儲存結點信息的同時,還建立附加的索引表。索引表由若幹索引項組成。
④散列存儲方法:該方法的基本思想是:根據結點的關鍵字直接計算出該結點的存儲地址。

4.數據結構三方面的關系
數據的邏輯結構、數據的存儲結構及數據的運算這三方面是一個整體。孤立地去理解一個方面,而不註意它們之間的聯系是不可取的。存儲結構是數據結構不可缺少的一個方面:同一邏輯結構的不同存儲結構可冠以不同的數據結構名稱來標識。

基本概念和術語