數據結構原理解析

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

一、數據結構

  • 實際上當我們在思考這個問題的時候,我們已經用到了數據結構。列表和字典都可以存儲一個班的學生信息,但是想要在列表中獲取一名同學的信息時,就要遍歷這個列表,其時間複雜度爲O(n),而使用字典存儲時,可將學生姓名作爲字典的鍵,學生信息作爲值,進而查詢時不需要遍歷便可快速獲取到學生信息,其時間複雜度爲O(1)。
  • 我們爲了解決問題,需要將數據保存下來,然後根據數據的存儲方式來設計算法實現進行處理,那麼數據的存儲方式不同就會導致需要不同的算法進行處理。我們希望算法解決問題的效率越快越好,於是我們就需要考慮數據究竟如何保存的問題,這就是數據結構。
  • 在上面的問題中我們可以選擇Python中的列表或字典來存儲學生信息。列表和字典就是Python內建幫我們封裝好的兩種數據結構。

二、數據結構的概念

  • 數據是一個抽象的概念,將其進行分類後得到程序設計語言中的基本類型。如:int,float,char等。數據元素之間不是獨立的,存在特定的關係,這些關係便是結構。數據結構指數據對象中數據元素之間的關係。
  • Python給我們提供了很多現成的數據結構類型,這些系統自己定義好的,不需要我們自己去定義的數據結構叫做Python的內置數據結構,比如列表、元組、字典。而有些數據組織方式,Python系統裏面沒有直接定義,需要我們自己去定義實現這些數據的組織方式,這些數據組織方式稱之爲Python的擴展數據結構,比如棧,隊列等。

三、百度百科的描述:

  • 數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。
  • 數據結構(data structure)是帶有結構特性的數據元素的集合,它研究的是數據的邏輯結構和數據的物理結構以及它們之間的相互關係,並對這種結構定義相適應的運算,設計出相應的算法,並確保經過這些運算以後所得到的新結構仍保持原來的結構類型。簡而言之,數據結構是相互之間存在一種或多種特定關係的數據元素的集合,即帶“結構”的數據元素的集合。“結構”就是指數據元素之間存在的關係,分爲邏輯結構和存儲結構。
  • 數據的邏輯結構和物理結構是數據結構的兩個密切相關的方面,同一邏輯結構可以對應不同的存儲結構。算法的設計取決於數據的邏輯結構,而算法的實現依賴於指定的存儲結構。
  • 數據結構的研究內容是構造複雜軟件系統的基礎,它的核心技術是分解與抽象。通過分解可以劃分出數據的3個層次;再通過抽象,捨棄數據元素的具體內容,就得到邏輯結構。類似地,通過分解將處理要求劃分成各種功能,再通過抽象捨棄實現細節,就得到運算的定義。上述兩個方面的結合可以將問題變換爲數據結構。這是一個從具體(即具體問題)到抽象(即數據結構)的過程。然後,通過增加對實現細節的考慮進一步得到存儲結構和實現運算,從而完成設計任務。這是一個從抽象(即數據結構)到具體(即具體實現)的過程。

四、數據的邏輯結構

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

  1. 集合:數據結構中的元素之間除了“同屬一個集合” 的相互關係外,別無其他關係。
  2. 線性結構:數據結構中的元素存在一對一的相互關係。
  3. 樹形結構:數據結構中的元素存在一對多的相互關係。
  4. 圖形結構:數據結構中的元素存在多對多的相互關係。

五、數據的物理結構

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

六、數據的存儲結構

  • 數據的邏輯結構在計算機存儲空間中的存放形式稱爲數據的物理結構(也稱爲存儲結構)。一般來說,一種數據結構的邏輯結構根據需要可以表示成多種存儲結構,常用的存儲結構有順序存儲、鏈式存儲、索引存儲和哈希存儲等。
  • 數據的存儲結構的特點是:藉助元素在存儲器中的相對位置來表示數據元素之間的邏輯關係;非順序存儲的特點是:藉助指示元素存儲地址的指針表示數據元素之間的邏輯關係。

七、算法與數據結構的區別

  • 數據結構只是靜態的描述了數據元素之間的關係。
  • 高效的程序需要在數據結構的基礎上設計和選擇算法。
  • 程序 = 數據結構 + 算法
  • 總結:算法是爲了解決實際問題而設計的,數據結構是算法需要處理的問題載體

八、抽象數據類型(Abstract Data Type)

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

  1. 插入
  2. 刪除
  3. 修改
  4. 查找
  5. 排序

本文引用自三、四、五、六引用自百度百科。

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