數據結構是計算機存儲、組織數據的方式,是指相互之間存在一種或多種特定關系的數據元素的集合;它研究的是數據的邏輯結構和數據的物理結構以及它們之間的相互關系,并對這種結構定義相適應的運算,設計出相應的算法,并確保經過這些運算以后所得到的新結構仍保持原來的結構類型。

php零基礎到就業直播視頻課:進入學習
程序員必備接口測試調試工具:立即使用
本教程操作環境:windows7系統、Dell G3電腦。
數據結構
數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。

名詞定義
數據結構是指相互之間存在著一種或多種關系的數據元素的集合和該集合中數據元素之間的關系組成。記為:
Data_Structure=(D,R)
其中D是數據元素的集合,R是該集合中所有元素之間的關系的有限集合。
(一)常用結構
1.數組:在程序設計中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數據元素的集合稱為數組。在C語言中, 數組屬于構造數據類型。一個數組可以分解為多個數組元素,這些數組元素可以是基本數據類型或是構造類型。因此按數組元素的類型不同,數組又可分為數值數組、字符數組、指針數組、結構數組等各種類別。
2.棧: 是只能在某一端插入和刪除的特殊線性表。它按照先進后出的原則存儲數據,先進入的數據被壓入棧底,最后的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最后一個數據被第一個讀出來)。
3.隊列: 一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。隊列是按照“先進先出”或“后進后出”的原則組織數據的。隊列中沒有元素時,稱為空隊列。
4.鏈表:是一種物理存儲單元上非連續、非順序的存儲結構,它既可以表示線性結構,也可以用于表示非線性結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。
5.樹: 是包含n(n>0)個結點的有窮集合K,且在K中定義了一個關系N,N滿足 以下條件:
(1)有且僅有一個結點 K0,他對于關系N來說沒有前驅,稱K0為樹的根結點。簡稱為根(root)。
(2)除K0外,K中的每個結點,對于關系N來說有且僅有一個前驅。
(3)K中各結點,對關系N來說可以有m個后繼(m>=0)。
6.圖: 是由結點的有窮集合V和邊的集合E組成。其中,為了與樹形結構加以區別,在圖結構中常常將結點稱為頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關系。
7.堆:在計算機科學中,堆是一種特殊的樹形數據結構,每個結點都有一個值。通常我們所說的堆的數據結構,是指二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。
8.散列表(Hash table,也叫哈希表): 若結構中存在關鍵字和K相等的記錄,則必定在f(K)的存儲位置上。由此,不需比較便可直接取得所查記錄。稱這個對應關系f為散列函數(Hash function),按這個思想建立的表為散列表。
9.八大排序算法: 排序算法可以分為內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等。

1.數據的邏輯結構:指反映數據元素之間的邏輯關系的數據結構,其中的邏輯關系是指數據元素之間的前后件關系,而與他們在計算機中的存儲位置無關。
邏輯結構包括:
1)集合
數據結構中的元素之間除了“同屬一個集合” 的相互關系外,別無其他關系;
2)線性結構
數據結構中的元素存在一對一的相互關系;
3)樹形結構
數據結構中的元素存在一對多的相互關系;
4)圖形結構
數據結構中的元素存在多對多的相互關系。
2.數據的物理結構:指數據的邏輯結構在計算機存儲空間的存放形式。
數據的物理結構是數據結構在計算機中的表示(又稱映像),它包括數據元素的機內表示和關系的機內表示。由于具體實現的方法有順序、鏈接、索引、散列等多種,所以,一種數據結構可表示成一種或多種存儲結構。
數據元素的機內表示(映像方法): 用二進制位(bit)的位串表示數據元素。通常稱這種位串為節點(node)。當數據元素有若干個數據項組成時,位串中與個數據項對應的子位串稱為數據域(data field)。因此,節點是數據元素的機內表示(或機內映像)。關系的機內表示(映像方法):數據元素之間的關系的機內表示可以分為順序映像和非順序映像,常用兩種存儲結構:順序存儲結構和鏈式存儲結構。順序映像借助元素在存儲器中的相對位置來表示數據元素之間的邏輯關系。非順序映像借助指示元素存儲位置的指針(pointer)來表示數據元素之間的邏輯關系。
3.數據結構的運算

一般認為,一個數據結構是由數據元素依據某種邏輯聯系組織起來的。對數據元素間邏輯關系的描述稱為數據的邏輯結構;數據必須在計算機內存儲,數據的存儲結構是數據結構的實現形式,是其在計算機內的表示;此外討論一個數據結構必須同時討論在該類數據上執行的運算才有意義。一個邏輯數據結構可以有多種存儲結構,且各種存儲結構影響數據處理的效率。
在許多類型的程序的設計中,數據結構的選擇是一個基本的設計考慮因素。許多大型系統的構造經驗表明,系統實現的困難程度和系統構造的質量都嚴重的依賴于是否選擇了最優的數據結構。許多時候,確定了數據結構后,算法就容易得到了。有些時候事情也會反過來,我們根據特定算法來選擇數據結構與之適應。不論哪種情況,選擇合適的數據結構都是非常重要的。
選擇了數據結構,算法也隨之確定,是數據而不是算法是系統構造的關鍵因素。這種洞見導致了許多種軟件設計方法和程序設計語言的出現,面向對象的程序設計語言就是其中之一。
計算機解決一個具體問題時,大致需要經過下列幾個步驟:首先要從具體問題中抽象出一個適當的數學模型,然后設計一個解此數學模型的算法(Algorithm),最后編出程序、進行測試、調整直至得到最終解答。
尋求數學模型的實質是分析問題,從中提取操作的對象,并找出這些操作對象之間含有的關系,然后用數學的語言加以描述。當人們用計算機處理數值計算問題是,所用的數學模型是用數學方程描述。所涉及的運算對象一般是簡單的整形、實型和邏輯型數據,因此程序設計者的主要精力集中于程序設計技巧上,而不是數據的存儲和組織上。然而,計算機應用的
站長資訊網