第一章 數據結構緒論 (大話數據結構)

      因爲以前看完程傑的大話設計模式, 感悟頗深, 感受寫法很特別, 很容易讓初學者易懂, 因此就又看了他的另外一本書, 大話數據結構. 不過這本書總體看下來, 仍是有些難度, 尤爲是後面的排序 查找 等涉及算法的部分. 不過仍是硬啃了一下. 把書中重點的地方作了筆記, 方便之後複習. 此次讀大話數據結構, 還不夠深刻, 只是把概念作簡單的瞭解, 並無深刻的學習算法底層的原理, 只是瞭解這個東西且會用. 因此這篇文章的目的也是記錄我學習過程當中感受是重點的一些概念. 後續有時間會在讀一遍並深刻學習一下.算法


數據結構: 是一門研究非數值計算的程序設計問題中的操做對象, 以及它們之間的關係和操做等相關問題的學科. 是相互之間存在的一種或多種特定關係的數據元素的集合.編程

程序設計 = 數據結構 + 算法設計模式


1. 基本概念和術語

數據: 是描述客觀事物的符號, 是計算機中能夠操做的對象, 是能被計算機識別並輸入給計算機處理的符號集合.

  • 如整型 實型等數值類型, 還包括字符 聲音 圖像 視頻等非數值類型.

數據元素: 是組成數據的, 有必定意義的基本單位, 在計算機中一般做爲總體處理. 也被稱爲記錄.

  • 如在人類中的人.禽類中的雞鴨鵝.

數據項: 一個數據元素能夠由若干個數據項組成, 數據項是數據不可分割的最小單位.

  • 如人的眼鼻耳嘴. 可是真正討論問題時, 數據元素纔是數據結構中創建數據模型的着眼點,就好像討論一部電影是討論電影角色這樣的數據元素而不是數據元素這個角色的年紀/性別.

數據對象: 是性質相同的數據元素的集合, 是數據的子集.

什麼叫性質相同?數組

  • 是指數據元素具備相同數量和類型的數據項, 如人都有姓名/生日/性別等同樣的數據項, 一我的不可能沒有性別.既然數據對象是數據的子集, 在實際應用中, 處理的數據元素一般具備相同性質, 在不產生混淆的狀況下, 咱們都將數據對象簡稱爲數據.

數據結構: 是相互之間存在一種或多種特定關係的數據元素的集合.

  • 簡單理解就是關係, 如分子的結構, 就是說組成分子的原子之間的排列方式. 嚴格點說, 結構是指各個組成部分相互搭配和排列的方法. 不一樣數據元素之間不是獨立的, 而是存在特定的關係, 咱們將這些關係稱爲結構.

邏輯結構與物理結構

  • 按照視點的不一樣, 數據結構分爲邏輯結構和物理結構.
  • 邏輯結構是面向問題的, 而物理結構就是面向計算機的, 其基本目標就是將數據及其邏輯關係存儲到計算機的內存中.

邏輯結構: 是指數據對象中的數據元素之間的相互關係. 邏輯結構分爲四種:數據結構

  1. 集合結構: 集合結構中的數據元素除了同屬於一個集合外, 它們之間沒有其餘關係.架構

    • 各個數據元素是平等的, 它們的共同屬性是 同屬於一個集合. 數據結構中的集合關係相似於數學中的集合.

  1. 線性結構: 線性結構中的數據元素之間是一對一的關係. 學習

  2. 樹形結構: 樹形結構中的數據元素之間存在一種一對多的層次關係. 設計

  3. 圖形結構: 數據元素是多對多的關係. 指針

物理結構: 是指數據的邏輯結構在計算機中的儲存形式.cdn

  • 實際上就是如何把數據元素儲存到計算機的儲存器中. 儲存器主要是針對內存而言, 像硬盤/軟盤/光盤等外部儲存器的數據組織一般用文件架構描述.
  1. 順序存儲結構: 是把數據元素存放在地址連續的存儲單元裏, 其數據間的邏輯關係和物理關係是一致的.

    • 數組就是這樣的存儲結構.
  2. 鏈式存儲結構: 是把數據元素存放在任意的存儲單元裏, 這組存儲單元能夠是連續的, 也能夠是不連續的.

    • 數據元素的存儲關係並不能反映其邏輯關係, 所以須要一個指針存放數據元素的地址, 這樣能夠經過地址找到相關的數據元素.

抽象數據類型

  • 抽象數據類型標準格式:

  1. 數據類型: 是指一組性質相同的值的集合及定義在此集合上的一些操做的總稱.
  • 數據類型是按照值的不一樣進行劃分的. 在高級語言中, 每一個變量/常量和表達式都有各自的取值範圍.類型就用來講明變量或表達式的取值範圍和所能進行的操做. 如int a 再給他賦值時不能超出int的取值範圍.
  • 抽象是指抽取出事物具備的廣泛性的本質. 他是抽出問題的特徵而忽略非本質的細節, 是對具體事物的歸納.抽象是一種思考問題的方式, 他隱藏了繁雜的細節, 只保留實現目標所必須的信息.
  1. 抽象數據類型: 是指一個數學模型及定義在該模型上的一組操做.
  • 對已有的數據類型進行抽象, 就有了抽象數據類型.
  • 抽象數據類型的定義僅取決於它的一組邏輯特性, 而與其在計算機內部如何表示和實現無關.
  • 好比在計算機中不論是大型機/小型機/PC/平板電腦甚至手機都擁有 "整型" 類型, 那麼整型其實就是一個抽象數據類型, 儘管它在不一樣的地方實現方法不一樣, 但因爲定義的數學特性相同, 在計算機編程者看來, 他們是相同的. 所以抽象的意義在於數據類型的數學抽象特性. 並且抽象數據類型不只僅指那些定義好的, 也能夠是編程者本身定義的數據類型.
  • 事實上, 抽象數據類型體現了程序設計中問題分解/抽象和信息隱藏的特性. 抽象數據類型把實際生活中的問題分解爲多個小規模的容易處理的問題, 而後創建一個計算機能處理的數據模型, 並把每一個功能模塊實現細節隱藏起來.

補圖

相關文章
相關標籤/搜索