數據結構[計算機存儲、組織數據方式]

數據結構[計算機存儲、組織數據方式]

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

基本信息

研究對象

數據結構數據結構
一、數據的邏輯結構:指反映數據 元素之間的邏輯關係的 數據結構,其中的邏輯關係是指數據元素之間的前後件關係,而與他們在計算機中的存儲位置無關。邏輯結構包括:

數據結構中的元素之間除了“同屬一個集合” 的相互關係外,別無其他關係;

2. 線性結構

數據結構中的元素存在一對一的相互關係;

3. 樹形結構

數據結構中的元素存在一對多的相互關係;

4. 圖形結構

數據結構中的元素存在多對多的相互關係。

二、數據的物理結構:指數據的 邏輯結構在計算機存儲空間的存放形式。

數據的物理結構是數據結構在計算機中的表示(又稱映像),它包括數據元素的機內表示和關係的機內表示。由於具體實現的方法有順序、連結、索引、散列等多種,所以,一種數據結構可表示成一種或多種存儲結構。

數據元素的機內表示(映像方法): 用二進制位(bit)的位串表示數據元素。通常稱這種位串為節點(node)。當數據元素有若干個數據項組成時,位串中與個數據項對應的子位串稱為數據域(data field)。因此,節點是數據元素的機內表示(或機內映像)。

關係的機內表示(映像方法):數據元素之間的關係的機內表示可以分為順序映像和非順序映像,常用兩種存儲結構:順序存儲結構和鏈式存儲結構。順序映像藉助元素在存儲器中的相對位置來表示數據元素之間的邏輯關係。非順序映像藉助指示元素存儲位置的指針(pointer)來表示數據元素之間的邏輯關係。

三、數據結構的運算。

研究內容

在計算機科學中,數據結構是一門研究非數值計算的程式設計問題中計算機的操作對象(數據元素)以及它們之間的關係和運算等的學科,而且確保經過這些運算後所得到的新結構仍然是原來的結構類型。

“數據結構”作為一門獨立的課程在國外是從1968年才開始設立的。 1968年美國唐納德·克努特(Donald Ervin Knuth)教授開創了數據結構的最初體系,他所著的《電腦程式設計藝術》第一卷《基本算法》是第一本較系統地闡述數據的邏輯結構和存儲結構及其操作的著作。“數據結構”在計算機科學中是一門綜合性的專業基礎課,數據結構是介於數學、計算機硬體和計算機軟體三者之間的一門核心課程。數據結構這一門課的內容不僅是一般程式設計(特別是非數值性程式設計)的基礎,而且是設計和實現編譯程式、作業系統、資料庫系統及其他系統程式的重要基礎。

計算機科學是一門研究用計算機進行信息表示和處理的科學。這裡面涉及到兩個問題:信息的表示,信息的處理 。

而信息的表示和組織又直接關係到處理信息的程式的效率。隨著計算機的普及,信息量的增加,信息範圍的拓寬,使許多系統程式和 應用程式的規模很大,結構又相當複雜。因此,為了編寫出一個“好”的程式,必須分析待處理的 對象的特徵及各對象之間存在的關係,這就是數據結構這門課所要研究的問題。眾所周知,計算機的程式是對信息進行加工處理。在大多數情況下,這些信息並不是沒有組織,信息(數據)之間往往具有重要的結構關係,這就是數據結構的內容。數據的結構,直接影響算法的選擇和效率。

計算機解決一個具體問題時,大致需要經過下列幾個步驟:首先要從具體問題中抽象出一個適當的 數學模型,然後設計一個解此數學模型的 算法(Algorithm),最後編出程式、進行測試、調整直至得到最終解答。

尋求數學模型的實質是分析問題,從中提取操作的對象,並找出這些操作對象之間含有的關係,然後用數學的語言加以描述。當人們用計算機處理數值計算問題是,所用的數學模型是用數學方程描述。所涉及的運算對象一般是簡單的整形、實型和邏輯型數據,因此程式設計者的主要精力集中於程式設計技巧上,而不是數據的存儲和組織上。然而,計算機套用的更多領域是“非數值型計算問題”,它們的數學模型無法用數學方程描述,而是用數據結構描述,解決此類問題的關鍵是設計出合適的數據結構,描述非數值型問題的數學模型是用線性表、樹、圖等結構來描述的。

計算機算法與數據的結構密切相關,算法無不依附於具體的數據結構,數據結構直接關係到算法的選擇和效率。運算是由計算機來完成,這就要設計相應的插入、刪除和修改的算法 。也就是說,數據結構還需要給出每種結構類型所定義的各種運算的算法。

數據是信息的載體,是可以被計算機識別存儲並加工處理的描述客觀事物的信息符號的總稱。所有能被輸入計算機中,且能被計算機處理的符號的集合,它是電腦程式加工處理的對象。客觀事物包括數值、字元、聲音、圖形、圖像等,它們本身並不是數據,只有通過編碼變成能被計算機識別、存儲和處理的符號形式後才是數據。

數據元素是數據的 基本單位,在電腦程式中通常作為一個整體考慮。一個數據元素由若干個 數據項組成。數據項是數據結構中討論的最小單位。有兩類數據元素:若數據元素可再分,則每一個獨立的處理單元就是數據項,數據元素是數據項的集合;若數據元素不可再分,則數據元素和數據項是同一概念,如:整數"5",字元 "N" 等。例如描述一個學生的信息的數據元素可由下列6個數據項組成。其中的出生日期又可以由三個數據項:"年"、"月"和"日"組成,則稱"出生日期"為組合項,而其它不可分割的數據項為原子項。

關鍵字指的是能識別一個或多個數據元素的數據項。若能起唯一識別作用,則稱之為 "主" 關鍵字,否則稱之為 "次" 關鍵字。

數據對象是性質相同的數據元素的集合,是數據的一個 子集。數據對象可以是有限的,也可以是無限的。

數據處理是指對數據進行 查找、 插入、刪除、合併、 排序、統計以及簡單計算等的操作過程。在早期,計算機主要用於科學和 工程計算,進入八十年代以後,計算機主要用於數據處理。據有關統計資料表明,計算機用於數據處理的時間比例達到80%以上,隨著時間的推移和 計算機套用的進一步普及,計算機用於數據處理的時間比例必將進一步增大。

結構分類

數據結構是指同一數據元素類中各數據元素之間存在的關係。數據結構分別為 邏輯結構、 存儲結構( 物理結構)和數據的運算。數據的邏輯結構是從具體問題抽象出來的數學模型,是描述數據元素及其關係的數學特性的,有時就把邏輯結構簡稱為數據結構。邏輯結構是在計算機存儲中的映像,形式地定義為(K,R)(或(D,S)),其中,K是數據元素的有限集,R是K上的關係的有限集。

根據數據元素間關係的不同特性,通常有下列四類基本的結構: ⑴集合結構。該結構的數據元素間的關係是“屬於同一個集合”。 ⑵線性結構。該結構的數據元素之間存在著一對一的關係。 ⑶樹型結構。該結構的數據元素之間存在著一對多的關係。 ⑷圖形結構。該結構的數據元素之間存在著多對多的關係,也稱網狀結構。 從上面所介紹的數據結構的概念中可以知道,一個數據結構有兩個要素。一個是數據元素的集合,另一個是關係的集合。在形式上,數據結構通常可以採用一個二元組來表示。

數據結構的形式定義為:數據結構是一個二元組 :Data_Structure=(D,R),其中,D是數據元素的有限集,R是D上關係的有限集。 線性結構的特點是數據元素之間是一種線性關係,數據元素“一個接一個的排列”。在一個 線性表中 數據元素的類型是相同的,或者說線性表是由同一類型的數據元素構成的線性結構。在實際問題中線性表的例子是很多的,如學生情況信息表是一個線性表:表中數據元素的類型為學生類型; 一個字元串也是一個線性表:表中數據元素的類型為字元型,等等。

線性表是最簡單、最基本、也是最常用的一種線性結構。 線性表是具有相同數據類型的n(n>=0)個數據元素的有限序列,通常記為: (a1,a2,… ai-1,ai,ai+1,…an) ,其中n為表長, n=0 時稱為空表。 它有兩種存儲方法:順序存儲和鏈式存儲,它的主要基本操作是插入、刪除和檢索等。

數據結構在計算機中的表示(映像)稱為數據的物理(存儲)結構。它包括數據元素的表示和關係的表示。數據元素之間的關係有兩種不同的表示方法:順序映象和非順序映象,並由此得到兩種不同的存儲結構:順序存儲結構和 鏈式存儲結構。

順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的 存儲單元里,結點間的邏輯關係由存儲單元的鄰接關係來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常藉助於程式設計語言中的數組來實現。

連結存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關係是由附加的 指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程式設計語言中的指針類型來實現

索引存儲方法:除建立存儲結點信息外,還建立附加的索引表來標識結點的 地址。

散列存儲方法:就是根據結點的關鍵字直接計算出該結點的存儲地址。

數據結構中,邏輯上(邏輯結構:數據元素之間的邏輯關係)可以把數據結構分成線性結構和非線性結構。線性結構的順序存儲結構是一種順序存取的存儲結構, 線性表的鏈式存儲結構是一種 隨機存取的存儲結構。線性表若採用鏈式存儲表示時所有結點之間的存儲單元地址可連續可不連續。邏輯結構與數據元素本身的形式、內容、相對位置、所含結點個數都無關。

結構算法

算法的設計取決於數據(邏輯)結構,而算法的實現依賴於採用的存儲結構。數據的存儲結構實質上是它的邏輯結構在計算機 存儲器中的實現,為了全面的反映一個數據的邏輯結構,它在 存儲器中的映象包括兩方面內容,即數據元素之間的信息和數據元素之間的關係。不同數據結構有其相應的若干運算。數據的運算是在數據的邏輯結構上定義的操作算法,如檢索、插入、刪除、更新和排序等。

數據的運算是數據結構的一個重要方面,討論任一種數據結構時都離不開對該結構上的 數據運算及其實現算法的討論。

數據結構不同於 數據類型,也不同於數據對象,它不僅要描述數據類型的數據對象,而且要描述數據對象各元素之間的相互關係。

數據類型是一個值的集合和定義在這個值集上的一組操作的總稱。數據類型可分為兩類:原子類型、結構類型。一方面,在程式設計語言中,每一個數據都屬於某種數據類型。類型明顯或隱含地規定了數據的取值範圍、存儲方式以及允許進行的運算。可以認為,數據類型是在程式設計中已經實現了的數據結構。另一方面,在程式設計過程中,當需要引入某種新的數據結構時,總是藉助 程式語言所提供的數據類型來描述數據的存儲結構。

計算機中表示數據的最小單位是二進制數的一位,叫做位。我們用一個由若干位組合起來形成的一個位串表示一個數據元素,通常稱這個位串為元素或結點。當數據元素由若干數據項組成時,位串中對應於各個數據項的子位串稱為數據域。元素或結點可看成是數據元素在計算機中的映象。

一個 軟體系統框架應建立在數據之上,而不是建立在操作之上。一個含抽象數據類型的軟體模組應包含定義、表示、實現三個部分。

對每一個數據結構而言,必定存在與它密切相關的一組操作。若操作的種類和數目不同,即使邏輯結構相同,數據結構能起的作用也不同。

不同的數據結構其操作集不同,但下列操作必不可缺:

1,結構的生成;

2.結構的銷毀;

3,在結構中查找滿足規定條件的數據元素;

4,在結構中插入新的數據元素;

5,刪除結構中已經存在的數據元素;

6,遍歷。

抽象數據類型:一個數學模型以及定義在該模型上的一組操作。抽象數據類型實際上就是對該數據結構的定義。因為它定義了一個數據的邏輯結構以及在此結構上的一組算法。抽象數據類型可用以下 三元組表示:(D,S,P)。D是數據對象,S是D上的關係集,P是對D的基本操作集。 ADT的定義為:

ADT 抽象數據類型名:{數據對象:(數據元素集合),數據關係:(數據關係二元組結合),基本操作:(操作函式的羅列)}; ADT抽象數據類型名;抽象數據類型有兩個重要特性:

數據抽象

用ADT描述程式處理的 實體時,強調的是其本質的特徵、其所能完成的功能以及它和外部用戶的 接口(即外界使用它的方法)。

數據封裝

將實體的外部特性和其內部實現細節分離,並且對外部用戶隱藏其內部實現細節。

數據(Data)是信息的載體,它能夠被計算機識別、存儲和加工處理。它是電腦程式加工的原料,應用程式處理各種各樣的數據。計算機科學中,所謂數據就是計算機加工處理的對象,它可以是 數值數據,也可以是非數值數據。數值數據是一些整數、實數或複數,主要用於 工程計算、科學計算和商務處理等;非數值數據包括字元、文字、 圖形、圖像、語音等。數據元素(Data Element)是數據的基本單位。在不同的條件下,數據元素又可稱為元素、結點、頂點、記錄等。例如,學生 信息檢索系統中學生信息表中的一個記錄等,都被稱為一個數據元素。

有時,一個數據元素可由若干個數據項(Data Item)組成,例如, 學籍管理系統中學生信息表的每一個數據元素就是一個學生記錄。它包括學生的學號、 姓名、性別、籍貫、出生年月、成績等數據項。這些數據項可以分為兩種:一種叫做初等項,如學生的性別、籍貫等,這些數據項是在數據處理時不能再分割的最小單位;另一種叫做組合項,如學生的成績,它可以再劃分為數學、物理、化學等更小的項。通常,在解決實際套用問題時是把每個學生記錄當作一個基本單位進行訪問和處理的。

數據對象(Data Object)或數據元素類(Data Element Class)是具有相同性質的數據元素的集合。在某個具體問題中,數據元素都具有相同的性質(元素值不一定相等),屬於同一數據對象(數據元素類),數據元素是數據元素類的一個實例。例如,在交通諮詢系統的交通網中,所有的頂點是一個數據元素類,頂點A和頂點B各自代表一個城市,是該數據元素類中的兩個實例,其數據元素的值分別為A和B。 數據結構(Data Structure)是指互相之間存在著一種或多種關係的數據元素的集合。在任何問題中,數據元素之間都不會是孤立的,在它們之間都存在著這樣或那樣的關係,這種數據元素之間的關係稱為結構。

相關詞條

熱門詞條

聯絡我們