數據結構

數據結構

計算機存儲數據方式
數據結構是計算機存儲、組織數據的方式。數據結構是相互之間存在着某種關系的數據元素的集合。數據結構包括三方面的内容:邏輯結構、存儲結構和數據的運算。[1]通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。
  • 中文名:數據結構
  • 解釋:計算機存儲、組織數據的方式
  • 作者:許卓群
  • 具體指向:特定關系的數據元素的集合
  • 出版時間:2001
  • 有關:檢索算法和索引技術
  • 開本:16

定義

數據結構(data structure)是帶有結構特性的數據元素的集合,它研究的是數據的邏輯結構和數據的物理結構以及它們之間的相互關系,并對這種結構定義相适應的運算,設計出相應的算法,并确保經過這些運算以後所得到的新結構仍保持原來的結構類型。簡而言之,數據結構是相互之間存在一種或多種特定關系的數據元素的集合,即帶“結構”的數據元素的集合。“結構”就是指數據元素之間存在的關系,分為邏輯結構和存儲結構。  

數據的邏輯結構和物理結構是數據結構的兩個密切相關的方面,同一邏輯結構可以對應不同的存儲結構。算法的設計取決于數據的邏輯結構,而算法的實現依賴于指定的存儲結構。  

數據結構的研究内容是構造複雜軟件系統的基礎,它的核心技術是分解與抽象。通過分解可以劃分出數據的3個層次;再通過抽象,舍棄數據元素的具體内容,就得到邏輯結構。類似地,通過分解将處理要求劃分成各種功能,再通過抽象舍棄實現細節,就得到運算的定義。上述兩個方面的結合可以将問題變換為數據結構。這是一個從具體(即具體問題)到抽象(即數據結構)的過程。然後,通過增加對實現細節的考慮進一步得到存儲結構和實現運算,從而完成設計任務。這是一個從抽象(即數據結構)到具體(即具體實現)的過程。

研究對象

數據邏輯結構

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

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

2.線性結構:數據結構中的元素存在一對一的相互關系;  

3.樹形結構:數據結構中的元素存在一對多的相互關系;  

4.圖形結構:數據結構中的元素存在多對多的相互關系。  

數據物理結構

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

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

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

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

數據存儲結構

數據的邏輯結構在計算機存儲空間中的存放形式稱為數據的物理結構(也稱為存儲結構)。一般來說,一種數據結構的邏輯結構根據需要可以表示成多種存儲結構,常用的存儲結構有順序存儲、鍊式存儲、索引存儲和哈希存儲等。  

數據的順序存儲結構的特點是:借助元素在存儲器中的相對位置來表示數據元素之間的邏輯關系;非順序存儲的特點是:借助指示元素存儲地址的指針表示數據元素之間的邏輯關系。

研究内容

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

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

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

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

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

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

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

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

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

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

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

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

結構分類

數據結構有很多種,一般來說,按照數據的邏輯結構對其進行簡單的分類,包括線性結構和非線性結構兩類。  

線性結構

簡單地說,線性結構就是表中各個結點具有線性關系。如果從數據結構的語言來描述,線性結構應該包括如下幾點:  

1、線性結構是非空集。  

2、線性結構有且僅有一個開始結點和一個終端結點。  

3、線性結構所有結點都最多隻有一個直接前驅結點和一個直接後繼結點。  

線性表就是典型的線性結構,還有棧、隊列和串等都屬于線性結構。  

非線性結構

簡單地說,非線性結構就是表中各個結點之間具有多個對應關系。如果從數據結構的語言來描述,非線性結構應該包括如下幾點:  

1、非線性結構是非空集。  

2、非線性結構的一個結點可能有多個直接前驅結點和多個直接後繼結點。  

在實際應用中,數組、廣義表、樹結構和圖結構等數據結構都屬于非線性結構。 

常用數據結構

在計算機科學的發展過程中,數據結構也随之發展。程序設計中常用的數據結構包括如下幾個。  

數組(Array)

數組是一種聚合數據類型,它是将具有相同類型的若幹變量有序地組織在一起的集合。數組可以說是最基本的數據結構,在各種編程語言中都有對應。一個數組可以分解為多個數組元素,按照數據元素的類型,數組可以分為整型數組、字符型數組、浮點型數組、指針數組和結構數組等。數組還可以有一維、二維以及多維等表現形式。  

棧( Stack)

棧是一種特殊的線性表,它隻能在一個表的一個固定端進行數據結點的插入和删除操作。棧按照後進先出的原則來存儲數據,也就是說,先插入的數據将被壓入棧底,最後插入的數據在棧頂,讀出數據時,從棧頂開始逐個讀出。棧在彙編語言程序中,經常用于重要數據的現場保護。棧中沒有數據時,稱為空棧。  

隊列(Queue)

隊列和棧類似,也是一種特殊的線性表。和棧不同的是,隊列隻允許在表的一端進行插入操作,而在另一端進行删除操作。一般來說,進行插入操作的一端稱為隊尾,進行删除操作的一端稱為隊頭。隊列中沒有元素時,稱為空隊列。  

鍊表( Linked List)

鍊表是一種數據元素按照鍊式存儲結構進行存儲的數據結構,這種存儲結構具有在物理上存在非連續的特點。鍊表由一系列數據結點構成,每個數據結點包括數據域和指針域兩部分。其中,指針域保存了數據結構中下一個元素存放的地址。鍊表結構中數據元素的邏輯順序是通過鍊表中的指針鍊接次序來實現的。  

樹( Tree)

樹是典型的非線性結構,它是包括,2個結點的有窮集合K。在樹結構中,有且僅有一個根結點,該結點沒有前驅結點。在樹結構中的其他結點都有且僅有一個前驅結點,而且可以有兩個後繼結點,m≥0。  

圖(Graph)

圖是另一種非線性數據結構。在圖結構中,數據結點一般稱為頂點,而邊是頂點的有序偶對。如果兩個頂點之間存在一條邊,那麼就表示這兩個頂點具有相鄰關系。  

堆(Heap)

堆是一種特殊的樹形數據結構,一般讨論的堆都是二叉堆。堆的特點是根結點的值是所有結點中最小的或者最大的,并且根結點的兩個子樹也是一個堆結構。  

散列表(Hash)

散列表源自于散列函數(Hash function),其思想是如果在結構中存在關鍵字和T相等的記錄,那麼必定在F(T)的存儲位置可以找到該記錄,這樣就可以不用進行比較操作而直接取得所查記錄。 

常用算法

數據結構研究的内容:就是如何按一定的邏輯結構,把數據組織起來,并選擇适當的存儲表示方法把邏輯結構組織好的數據存儲到計算機的存儲器裡。算法研究的目的是為了更有效的處理數據,提高數據運算效率。數據的運算是定義在數據的邏輯結構上,但運算的具體實現要在存儲結構上進行。一般有以下幾種常用運算:  

(1)檢索。檢索就是在數據結構裡查找滿足一定條件的節點。一般是給定一個某字段的值,找具有該字段值的節點。  

(2)插入。往數據結構中增加新的節點。  

(3)删除。把指定的結點從數據結構中去掉。  

(4)更新。改變指定節點的一個或多個字段的值。  

(5)排序。把節點按某種指定的順序重新排列。例如遞增或遞減。 

相關詞條

相關搜索

其它詞條