數據結構淺析(一):數據結構基本概念

首先會有個疑問,什么是數據結構呢?

數據結構(data structure),可以概括為是互相之間存在一種或多種特定關系的數據元素的集合。

開篇配圖來自網絡... 那開始吧 :)

一、數據結構起源

1968年,美國 Donald E. Knuth 教授在《計算機程序設計藝術》第一卷《基本算法》中系統闡述了數據的邏輯結構和存儲結構及其操作,開創了數據結構課程體系。

70年代初,大型程序相繼出現,軟件也開始相對獨立,結構程序設計成為程序設計方法學主要內容,人們開始認為程序設計的實質是對確定的問題選擇一種好的結構,加上設計一種好的算法。也就是 程序設計 = 數據結構 + 算法

現實生活中,更多的不是解決一些數值計算問題,我們需要通過表、樹、圖等數據結構的幫助來更好地處理問題。

所以數據結構也是一門研究非數字計算的程序設計問題中的操作對象,以及他們之間的關系和操作等相關問題的學科。(引用自《大話數據結構》

二、基本概念和術語

1、數據
  • 數據指的是能輸入到計算機中,并能被計算機程序處理的對象。
  • 對于數值類型(整型、實型等),可以進行數值計算;
    對于字符數據類型(聲音、圖像、視頻等可通過編碼轉化為字符數據),可以進行非數值處理。
2、數據元素
  • 數據元素指組成數據的、有意義的基本單位,也被稱為記錄。
  • 如:一部電影里面的女主就是數據元素
3、數據項
  • 數據項是數據不可分割的最小單位,一個數據元素可以由若干數據項組成。
  • 如:一部電影里面女主的姓名、性別等都是數據項,恩,女主性別一般是女...
4、數據對象
  • 數據對象指性質相同的數據元素的集合,是數據的子集;
  • 數據對象簡稱數據
    什么是性質相同呢?
    性質相同指數據元素具有相同數量和類型的數據項;
    如一部電影中每個角色(數據元素)都有姓名、性別(數據項),這些角色(數據元素)構成了一部電影,那么這部電影所有人物的集合我們可以想象成是一個數據對象。
5、數據結構
  • 數據結構指互相之間存在一種或多種特定關系的數據元素的集合;
  • 數據結構 = 數據元素 + 關系;
    還得用上面的例子,一部電影可以想象成是一個數據結構,是由一個個人物(數據元素)和一個個串聯的人物情節(關系)構成,例子有點勉強,大概意思都應該理解的...

三、邏輯結構和物理結構

1、邏輯結構
  • 邏輯結構指數據對象中數據元素之間的相互關系;
  • 邏輯結構分為 集合結構、線性結構、樹形結構 和 圖形結構;
    1).集合結構:其中的數據元素除同屬于一個集合外,之間沒有其他關系;


    集合結構

    2).線性結構:其中的數據元素之間是一對一的關系;


    線性結構

    3).樹形結構:其中的數據元素之間存在一對多的層次關系;
    樹形結構

    4).圖形結構:其中的數據元素之間存在多對多的關系。
    圖形結構
2、物理結構
  • 物理結構指數據的邏輯結構在計算機中的存儲形式;

  • 實際就是如何將數據元素存儲到計算機存儲器中。這里的存儲器主要針對內存而言,像硬盤等外部存儲器的數據組織通常使用文件結構來描述;

  • 數據元素的存儲結構形式有 順序存儲 和 鏈式存儲 兩種;
    1).順序存儲結構
    順序存儲結構:把數據元素存放在地址連續的的存儲單元里,其數據間的邏輯關系和物理關系一致;


    順序存儲結構

    2).鏈式存儲結構
    鏈式存儲結構:把數據元素存放在任意的存儲單元里,這組存儲單元可以是連續的也可以是不連續的。數據元素的存儲關系不反映其邏輯關系,用指針存放數據元素的地址,我們通過地址可以找到相關聯數據元素的位置。


    鏈式存儲結構
  • 兩種物理結構對比來看,鏈式存儲更為靈活

邏輯結構面向問題,物理結構面向計算機,其基本目標是將數據及其邏輯關系存儲到計算機的內存中。

四、抽象數據類型

1、數據類型是什么?

數據類型指一組性質相同的值的集合及定義在此集合上的一些操作的總稱。

看起來有點模糊,接著往下看。

數據類型按照值的不同進行劃分。在高級語言中,每個變量、常量、表達式都有各自取值范圍。類型就用來說明變量或表達式的取值范圍和所進行的操作。

計算機的內存是有限的,如果只是單純計算 1+1 =2這樣的整型數字運算,我們不需要開辟很大的內存空間,只要滿足相應需求的內存空間就可以了。于是計算機領域的前輩們對數據進行分類,不同的數據類型擁有各自的取值范圍。這樣就可以更好利用有限的內存空間。

例如 C 語言中,數據類型可以分兩類:

  • 原子類型:不可再分割的基本類型。如整型、實型、字符型等基本數據類型;
  • 結構類型:由若干類型組成,可再分解。如整型數組就是由若干整型數據組成的。
2、抽象數據類型

1). 上面解釋了什么是數據類型,那么為什么要把數據類型抽象出來呢?

不同的計算機有不同的硬件系統,所以需要程序語言最終通過編譯器或解釋器轉化成計算機能夠識別的底層語言。然而在我們使用高級語言開發時,如計算 1+1 ,不管最終程序運行在什么計算機上,我們的目的只是為了實現 2 個整型數字的運算,不需要詳細知道 CPU 為了實現 1+1 進行了幾次開關操作。但無論什么計算機、什么計算機語言都會面臨如整數運算這樣的操作,那么可以考慮把它們抽象出來,只保留實現目標所必需的信息。

2). 什么是抽象數據類型?
抽象數據類型(Abstract Data Type, ADT):指一個數學模型及定義在該模型上的一組操作。抽象數據類型的定義僅取決于他的一組邏輯特性,與其在計算機內部如何表示和實現無關。

3). 抽象數據類型有什么意義?
"抽象"的意義在于數據類型的數學抽象特性。一個抽象數據類型定義了一個數據對象、數據對象中各數據元素之間的關系及對數據元素的操作。

理論的東西說起來總是那么模糊,看一個例子就會發現清晰明了了。

還是之前整數計算的例子。計算機分很多種,大型機、小型機、PC、智能手機等等,但是任何一種都有“整型數據”,也都需要進行“整型數據”運算。那么這里的整型其實就是一個抽象數據類型,它在不同計算機內的實現方法可能不同,但定義的數學特性相同,所以在我們看來是相同的。

抽象數據類型理論的東西提的比較多,概括下也就是為什么會有各種不同的數據類型,同時解釋這些數據類型存在的意義是什么...

總結

直接上圖吧,一圖勝千言...


數據結構層次

邏輯結構與物理結構

本文參考:

《大話數據結構》

Wikipedia - Donald E. Knuth

戳這里 前往我的小屋:I'm Jony :)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容