數據結構

數據結構

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

我們如何用Python(java)中的類型來保存一個班的學生信息? 如果想要快速的通過學生姓名獲取其信息呢?

​ 實際上當我們在思考這個問題的時候,我們已經用到了數據結構。列表和字典(arrays和map)都可以存儲一個班的學生信息,但是想要在列表中獲取一名同學的信息時,就要遍歷這個列表,其時間複雜度爲O(n),而使用字典存儲時,可將學生姓名作爲字典的鍵,學生信息作爲值,進而查詢時不需要遍歷便可快速獲取到學生信息,其時間複雜度爲O(1)。

​ 我們爲了解決問題,需要將數據保存下來,然後根據數據的存儲方式來設計算法實現進行處理,那麼數據的存儲方式不同就會導致需要不同的算法進行處理。我們希望算法解決問題的效率越快越好,於是我們就需要考慮數據究竟如何保存的問題,這就是數據結構。

在上面的問題中我們可以選擇Python中的列表或字典來存儲學生信息。列表和字典就是Python(arrays和map是Java)內建幫我們封裝好的兩種數據結構。

概念

數據是一個抽象的概念,將其進行分類後得到程序設計語言中的基本類型。如:int,float,char等。數據元素之間不是獨立的,存在特定的關係,這些關係便是結構。數據結構指數據對象中數據元素之間的關係。

Python給我們提供了很多現成的數據結構類型,這些系統自己定義好的,不需要我們自己去定義的數據結構叫做Python的內置數據結構,比如列表、元組、字典。而有些數據組織方式,Python系統裏面沒有直接定義,需要我們自己去定義實現這些數據的組織方式,這些數據組織方式稱之爲Python的擴展數據結構,比如棧,隊列等。

算法與數據結構的區別

數據結構只是靜態的描述了數據元素之間的關係。

高效的程序需要在數據結構的基礎上設計和選擇算法。

程序 = 數據結構 + 算法

總結:算法是爲了解決實際問題而設計的,數據結構是算法需要處理的問題載體

抽象數據類型(Abstract Data Type)

抽象數據類型(ADT)的含義是指一個數學模型以及定義在此數學模型上的一組操作。即把數據類型和數據類型上的運算捆在一起,進行封裝。引入抽象數據類型的目的是把數據類型的表示和數據類型上運算的實現與這些數據類型和運算在程序中的引用隔開,使它們相互獨立。

最常用的數據運算有五種:

  • 插入
  • 刪除
  • 修改
  • 查找
  • 排序

常用結構

數組

​ 在程序設計中,爲了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數據元素的集合稱爲數組。在java語言中, 數組屬於構造數據類型。一個數組可以分解爲多個數組元素,這些數組元素可以是基本數據類型或是構造類型。因此按數組元素的類型不同,數組又可分爲數值數組、字符數組、指針數組、結構數組等各種類別.在Python中就是列表不過可以包含所有的數據類型。

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

隊列

​ 一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱爲隊尾,進行刪除操作的端稱爲隊頭。隊列是按照“先進先出”或“後進後出”的原則組織數據的。隊列中沒有元素時,稱爲空隊列。

鏈表

是一種物理存儲單元上非連續、非順序的存儲結構,它既可以表示線性結構,也可以用於表示非線性結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱爲結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。

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

(1)有且僅有一個結點 K0,他對於關係N來說沒有前驅,稱K0爲樹的根結點。簡稱爲根(root)。  (2)除K0外,K中的每個結點,對於關係N來說有且僅有一個前驅。

(3)K中各結點,對關係N來說可以有m個後繼(m>=0)。

圖是由結點的有窮集合V和邊的集合E組成。其中,爲了與樹形結構加以區別,在圖結構中常常將結點稱爲頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關係。

在計算機科學中,堆是一種特殊的樹形數據結構,每個結點都有一個值。通常我們所說的堆的數據結構,是指二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。

散列表

若結構中存在關鍵字和K相等的記錄,則必定在f(K)的存儲位置上。由此,不需比較便可直接取得所查記錄。稱這個對應關係f爲散列函數(Hash function),按這個思想建立的表爲散列表。

發佈了181 篇原創文章 · 獲贊 113 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章