久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

數(shù)據(jù)結(jié)構(gòu)

來自站長百科
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

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

二叉樹型


發(fā)展歷程[ ]

“數(shù)據(jù)結(jié)構(gòu)”作為一門獨立的課程在國外是從1968年才開始設(shè)立的。1968年美國唐?歐?克努特教授開創(chuàng)了數(shù)據(jù)結(jié)構(gòu)的最初體系,他所著的《計算機(jī)程序設(shè)計技巧》第一卷《基本算法》是第一本較系統(tǒng)地闡述數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)及其操作的著作?!皵?shù)據(jù)結(jié)構(gòu)”在計算機(jī)科學(xué)中是一門綜合性的專業(yè)基礎(chǔ)課。數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計算機(jī)硬件和計算機(jī)軟件三者之間的一門核心課程。數(shù)據(jù)結(jié)構(gòu)這一門課的內(nèi)容不僅是一般程序設(shè)計(特別是非數(shù)值性程序設(shè)計)的基礎(chǔ),而且是設(shè)計和實現(xiàn)編譯程序、操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)及其他系統(tǒng)程序的重要基礎(chǔ)。

分類[ ]

數(shù)據(jù)結(jié)構(gòu)是指同一數(shù)據(jù)元素類中各數(shù)據(jù)元素之間存在的關(guān)系。數(shù)據(jù)結(jié)構(gòu)分別為邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)(物理結(jié)構(gòu))數(shù)據(jù)的運算。數(shù)據(jù)的邏輯結(jié)構(gòu)是對數(shù)據(jù)之間關(guān)系的描述,有時就把邏輯結(jié)構(gòu)簡稱為數(shù)據(jù)結(jié)構(gòu)。邏輯結(jié)構(gòu)形式地定義為(K,R)(或(D,S)),其中,K是數(shù)據(jù)元素的有限集,R是K上的關(guān)系的有限集。

數(shù)據(jù)元素相互之間的關(guān)系稱為結(jié)構(gòu)。有四類基本結(jié)構(gòu):集合、線性結(jié)構(gòu)樹形結(jié)構(gòu)、圖狀結(jié)構(gòu)(網(wǎng)狀結(jié)構(gòu))。樹形結(jié)構(gòu)和圖形結(jié)構(gòu)全稱為非線性結(jié)構(gòu)。集合結(jié)構(gòu)中的數(shù)據(jù)元素除了同屬于一種類型外,別無其它關(guān)系。線性結(jié)構(gòu)中元素之間存在一對一關(guān)系,樹形結(jié)構(gòu)中元素之間存在一對多關(guān)系,圖形結(jié)構(gòu)中元素之間存在多對多關(guān)系。在圖形結(jié)構(gòu)中每個結(jié)點的前驅(qū)結(jié)點數(shù)和后續(xù)結(jié)點數(shù)可以任意多個。

數(shù)據(jù)結(jié)構(gòu)在計算機(jī)中的表示(映像)稱為數(shù)據(jù)的物理(存儲)結(jié)構(gòu)。它包括數(shù)據(jù)元素的表示和關(guān)系的表示。數(shù)據(jù)元素之間的關(guān)系有兩種不同的表示方法:順序映象和非順序映象,并由此得到兩種不同的存儲結(jié)構(gòu):順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)。順序存儲方法:它是把邏輯上相鄰的結(jié)點存儲在物理位置相鄰的存儲單元里,結(jié)點間的邏輯關(guān)系由存儲單元的鄰接關(guān)系來體現(xiàn),由此得到的存儲表示稱為順序存儲結(jié)構(gòu)。順序存儲結(jié)構(gòu)是一種最基本的存儲表示方法,通常借助于程序設(shè)計語言中的數(shù)組來實現(xiàn)。鏈接存儲方法:它不要求邏輯上相鄰的結(jié)點在物理位置上亦相鄰,結(jié)點間的邏輯關(guān)系是由附加的指針字段表示的。由此得到的存儲表示稱為鏈?zhǔn)酱鎯Y(jié)構(gòu),鏈?zhǔn)酱鎯Y(jié)構(gòu)通常借助于程序設(shè)計語言中的指針類型來實現(xiàn)。索引存儲方法:除建立存儲結(jié)點信息外,還建立附加的索引表來標(biāo)識結(jié)點的地址。散列存儲方法:就是根據(jù)結(jié)點的關(guān)鍵字直接計算出該結(jié)點的存儲地址。

數(shù)據(jù)結(jié)構(gòu)中,邏輯上(邏輯結(jié)構(gòu):數(shù)據(jù)元素之間的邏輯關(guān)系)可以把數(shù)據(jù)結(jié)構(gòu)分成線性結(jié)構(gòu)和非線性結(jié)構(gòu)。線性結(jié)構(gòu)的順序存儲結(jié)構(gòu)是一種隨機(jī)存取的存儲結(jié)構(gòu),線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)是一種順序存取的存儲結(jié)構(gòu)。線性表若采用鏈?zhǔn)酱鎯Ρ硎緯r所有結(jié)點之間的存儲單元地址可連續(xù)可不連續(xù)。邏輯結(jié)構(gòu)與數(shù)據(jù)元素本身的形式、內(nèi)容、相對位置、所含結(jié)點個數(shù)都無關(guān)。


數(shù)據(jù)結(jié)構(gòu)與算法[ ]

算法的設(shè)計取決于數(shù)據(jù)(邏輯)結(jié)構(gòu),而算法的實現(xiàn)依賴于采用的存儲結(jié)構(gòu)。數(shù)據(jù)的存儲結(jié)構(gòu)實質(zhì)上是它的邏輯結(jié)構(gòu)在計算機(jī)存儲器中的實現(xiàn)為了全面的反映一個數(shù) 據(jù)的邏輯結(jié)構(gòu),他在存儲器中的映象包括兩方面內(nèi)容,及數(shù)據(jù)元素之間的信息和數(shù)據(jù)元素之間的關(guān)系。不同數(shù)據(jù)結(jié)構(gòu)有其相應(yīng)的若干運算。數(shù)據(jù)的運算是在數(shù)據(jù)的邏輯結(jié)構(gòu)上定義的操作算法,如檢索、插入、刪除、更新的排序等。

數(shù)據(jù)的運算是數(shù)據(jù)結(jié)構(gòu)的一個重要方面,討論任一種數(shù)據(jù)結(jié)構(gòu)時都離不開都離不開對該結(jié)構(gòu)上的數(shù)據(jù)運算及其實現(xiàn)算法的討論。

數(shù)據(jù)結(jié)構(gòu)的形式定義為:數(shù)據(jù)結(jié)構(gòu)是一個二元組: Data-Structure=(D,S) 其中:D是數(shù)據(jù)元素的有限集,S是D上關(guān)系的有限集。

數(shù)據(jù)結(jié)構(gòu)不同于數(shù)據(jù)類型,也不同于數(shù)據(jù)對象,它不僅要描述數(shù)據(jù)類型的數(shù)據(jù)對象,而且要描述數(shù)據(jù)對象各元素之間的相互關(guān)系。

數(shù)據(jù)類型是一個值的集合和定義在這個值集上的一組操作的總稱。數(shù)據(jù)類型可分為兩類:原子類型、結(jié)構(gòu)類型。一方面,在程序設(shè)計語言中,每一個數(shù)據(jù)都屬于某種數(shù)據(jù)類型。類型明顯或隱含地規(guī)定了數(shù)據(jù)的取值范圍、存儲方式以及允許進(jìn)行的運算??梢哉J(rèn)為,數(shù)據(jù)類型是在程序設(shè)計中已經(jīng)實現(xiàn)了的數(shù)據(jù)結(jié)構(gòu)。另一方面,在程序設(shè)計過程中,當(dāng)需要引入某種新的數(shù)據(jù)結(jié)構(gòu)時,總是借助編程語言所提供的數(shù)據(jù)類型來描述數(shù)據(jù)的存儲結(jié)構(gòu)。

計算機(jī)中表示數(shù)據(jù)的最小單位是二進(jìn)制數(shù)的一位,叫做位。我們用一個由若干位組合起來形成的一個位串表示一個數(shù)據(jù)元素,通常稱這個位串為元素或結(jié)點。當(dāng)數(shù)據(jù)元素由若干數(shù)據(jù)項組成時,位串中對應(yīng)于各個數(shù)據(jù)項的子位串稱為數(shù)據(jù)域。元素或結(jié)點可看成是數(shù)據(jù)元素在計算機(jī)中的映象。

一個軟件系統(tǒng)框架應(yīng)建立在數(shù)據(jù)之上,而不是建立在操作之上。一個含抽象數(shù)據(jù)類型的軟件模塊應(yīng)包含定義、表示、實現(xiàn)三個部分。

對每一個數(shù)據(jù)結(jié)構(gòu)而言,必定存在與它密切相關(guān)的一組操作。若操作的種類和數(shù)目不同,即使邏輯結(jié)構(gòu)相同,數(shù)據(jù)結(jié)構(gòu)能起的作用也不同。 不同的數(shù)據(jù)結(jié)構(gòu)其操作集不同,但下列操作必不可缺:

  1. 結(jié)構(gòu)的生成;
  2. 結(jié)構(gòu)的銷毀;
  3. 在結(jié)構(gòu)中查找滿足規(guī)定條件的數(shù)據(jù)元素;
  4. 在結(jié)構(gòu)中插入新的數(shù)據(jù)元素;
  5. 刪除結(jié)構(gòu)中已經(jīng)存在的數(shù)據(jù)元素;
  6. 遍歷。

抽象數(shù)據(jù)類型:一個數(shù)學(xué)模型以及定義在該模型上的一組操作。抽象數(shù)據(jù)類型實際上就是對該數(shù)據(jù)結(jié)構(gòu)的定義。因為它定義了一個數(shù)據(jù)的邏輯結(jié)構(gòu)以及在此結(jié)構(gòu)上的一組算法。抽象數(shù)據(jù)類型可用以下三元組表示:(D,S,P)。D是數(shù)據(jù)對象,S是D上的關(guān)系集,P是對D的基本操作集。ADT的定義為: ADT 抽象數(shù)據(jù)類型名{ 數(shù)據(jù)對象:(數(shù)據(jù)元素集合) 數(shù)據(jù)關(guān)系:(數(shù)據(jù)關(guān)系二元組結(jié)合) 基本操作:(操作函數(shù)的羅列) } ADT 抽象數(shù)據(jù)類型名;

抽象數(shù)據(jù)類型有兩個重要特性:

  1. 數(shù)據(jù)抽象

用ADT描述程序處理的實體時,強(qiáng)調(diào)的是其本質(zhì)的特征、其所能完成的功能以及它和外部用戶的接口(即外界使用它的方法)。

  1. 數(shù)據(jù)封裝

將實體的外部特性和其內(nèi)部實現(xiàn)細(xì)節(jié)分離,并且對外部用戶隱藏其內(nèi)部實現(xiàn)細(xì)節(jié)。

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

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

數(shù)據(jù)對象(Data Object)或數(shù)據(jù)元素類(Data Element Class)是具有相同性質(zhì)的數(shù)據(jù)元素的集合。在某個具體問題中,數(shù)據(jù)元素都具有相同的性質(zhì)(元素值不一定相等),屬于同一數(shù)據(jù)對象(數(shù)據(jù)元素類),數(shù)據(jù)元素是數(shù)據(jù)元素類的一個實例。例如,在交通咨詢系統(tǒng)的交通網(wǎng)中,所有的頂點是一個數(shù)據(jù)元素類,頂點A和頂點B各自代表一個城市,是該數(shù)據(jù)元素類中的兩個實例,其數(shù)據(jù)元素的值分別為A和B。 數(shù)據(jù)結(jié)構(gòu)(Data Structure)是指互相之間存在著一種或多種關(guān)系的數(shù)據(jù)元素的集合。在任何問題中,數(shù)據(jù)元素之間都不會是孤立的,在它們之間都存在著這樣或那樣的關(guān)系,這種數(shù)據(jù)元素之間的關(guān)系稱為結(jié)構(gòu)。根據(jù)數(shù)據(jù)元素間關(guān)系的不同特性,通常有下列四類基本的結(jié)構(gòu):

  • ⑴集合結(jié)構(gòu)。該結(jié)構(gòu)的數(shù)據(jù)元素間的關(guān)系是“屬于同一個集合”。
  • ⑵線性結(jié)構(gòu)。該結(jié)構(gòu)的數(shù)據(jù)元素之間存在著一對一的關(guān)系。
  • ⑶樹型結(jié)構(gòu)。該結(jié)構(gòu)的數(shù)據(jù)元素之間存在著一對多的關(guān)系。
  • ⑷圖形結(jié)構(gòu)。該結(jié)構(gòu)的數(shù)據(jù)元素之間存在著多對多的關(guān)系,也稱網(wǎng)狀結(jié)構(gòu)。 從上面所介紹的數(shù)據(jù)結(jié)構(gòu)的概念中可以知道,一個數(shù)據(jù)結(jié)構(gòu)有兩個要素。一個是數(shù)據(jù)元素的

集合,另一個是關(guān)系的集合。在形式上,數(shù)據(jù)結(jié)構(gòu)通??梢圆捎靡粋€二元組來表示。 數(shù)據(jù)結(jié)構(gòu)的形式定義為:數(shù)據(jù)結(jié)構(gòu)是一個二元組 Data_Structure =(D,R) 其中,D是數(shù)據(jù)元素的有限集,R是D上關(guān)系的有限集。 線性結(jié)構(gòu)的特點是數(shù)據(jù)元素之間是一種線性關(guān)系,數(shù)據(jù)元素“一個接一個的排列”。在一個線性表中數(shù)據(jù)元素的類型是相同的,或者說線性表是由同一類型的數(shù)據(jù)元素構(gòu)成的線性結(jié)構(gòu)。在實際問題中線性表的例子是很多的,如學(xué)生情況信息表是一個線性表:表中數(shù)據(jù)元素的類型為學(xué)生類型; 一個字符串也是一個線性表:表中數(shù)據(jù)元素的類型為字符型,等等。

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


常用數(shù)據(jù)結(jié)構(gòu)[ ]

  • 數(shù)組 (Array)

程序設(shè)計中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。在C語言中, 數(shù)組屬于構(gòu)造數(shù)據(jù)類型。一個數(shù)組可以分解為多個數(shù)組元素,這些數(shù)組元素可以是基本數(shù)據(jù)類型或是構(gòu)造類型。因此按數(shù)組元素的類型不同,數(shù)組又可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組等各種類別。

  • 棧 (Stack)

是只能在某一端插入和刪除的特殊線性表。它按照后進(jìn)先出的原則存儲數(shù)據(jù),先進(jìn)入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時候從棧頂開始彈出數(shù)據(jù)(最后一個數(shù)據(jù)被第一個讀出來)。

  • 隊列 (Queue)

一種特殊的線性表,它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作。進(jìn)行插入操作的端稱為隊尾,進(jìn)行刪除操作的端稱為隊頭。隊列中沒有元素時,稱為空隊列。

  • 鏈表 (Linked List)

是一種物理存儲單元上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。鏈表由一系列結(jié)點(鏈表中每一個元素稱為結(jié)點)組成,結(jié)點可以在運行時動態(tài)生成。每個結(jié)點包括兩個部分:一個是存儲數(shù)據(jù)元素的數(shù)據(jù)域,另一個是存儲下一個結(jié)點地址的指針域。

  • 樹 (Tree)

是包含n(n>0)個結(jié)點的有窮集合K,且在K中定義了一個關(guān)系N,N滿足 以下條件:

  1. 有且僅有一個結(jié)點 k0,他對于關(guān)系N來說沒有前驅(qū),稱K0為樹的根結(jié)點。簡稱為根(root)。 
  2. 除K0外,k中的每個結(jié)點,對于關(guān)系N來說有且僅有一個前驅(qū)。
  3. K中各結(jié)點,對關(guān)系N來說可以有m個后繼(m>=0)。
  • 圖 (Graph)

圖是由結(jié)點的有窮集合V和邊的集合E組成。其中,為了與樹形結(jié)構(gòu)加以區(qū)別,在圖結(jié)構(gòu)中常常將結(jié)點稱為頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關(guān)系。

  • 堆 (Heap)

在計算機(jī)科學(xué)中,堆是一種特殊的樹形數(shù)據(jù)結(jié)構(gòu),每個結(jié)點都有一個值。通常我們所說的堆的數(shù)據(jù)結(jié)構(gòu),是指二叉堆。堆的特點是根結(jié)點的值最?。ɑ蜃畲螅腋Y(jié)點的兩個子樹也是一個堆。

  • 散列表 (Hash)

若結(jié)構(gòu)中存在關(guān)鍵字和K相等的記錄,則必定在f(K)的存儲位置上。由此,不需比較便可直接取得所查記錄。稱這個對應(yīng)關(guān)系f為散列函數(shù)(Hash function),按這個思想建立的表為散列表。


參考來源[ ]

參考來源1

參考來源2