讀書筆記 |《數據結構》 之什麼是數據結構(一)

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/Uching/article/details/78010018

剛好最近又找出大二修的數據結構的書,就想着把讀書筆記po上來。

數據結構是什麼

數據結構+算法=程序

過程解析:發現問題,分析問題並抽象出具體的數據模型(待處理的數據以及數據之間的關係,即數據結構);設計算法,其中包括完成數據表示(將數據以及數據之間的關係存儲到計算機的內存中)和數據處理(具體的操作步驟,將問題求解的基本思路行程算法);編寫程序,將算法的操作步驟轉換爲某種程序設計語言對應的語句(就是用某種程序設計語言描述數據處理的過程)。


數據結構應用在哪裏

栗子1:線性表的數據結構


學籍管理問題:計算機的操作對象是每個學生的學籍信息,各項之間的關係可以用線性表的數據結構來描述。

栗子2:樹的數據結構


人機對弈問題:人機對弈主要是對弈的策略實現已存入計算機,計算機的操作對象是對弈過程中可能出現的棋盤狀態(格局),而格局之間的關係是由對弈規則決定的,所以格局之間的關係可以用樹的數據結構來描述。

栗子3:圖的數據結構


教學計劃編排問題:有些課程之間要按照規定的先後次序進行,計算機的操作對象是課程,課程之間的次序關係可以用圖的數據結構來描述。從定點Ci到頂線Cj之間存在邊< Ci,Cj >,則表示課程Ci是課程Cj的先修課。


數據結構的基本概念

數據結構


數據是信息的載體。數據是計算機程序處理的“原料”,eg:學籍管理程序處理的數據就是上圖的學籍登記表
數據元素是數據的基本單位。eg:圖中每個學生的檔案就是一個數據元素。
數據項是構成數據元素的不可分割的最小單位。eg:檔案中的學號、姓名等。

數據結構是指相互之間存在一定關係的數據元素的集合。數據元素是討論數據結構時涉及的最小數據單位。數據結構分爲邏輯結構和存儲結構。
數據的邏輯結構是指數據元素之間邏輯關係的整體。數據結構在形式上可定義爲一個二元組:
Data_Structure={D,R}
D:數據元素的有限集合
R:R是D上的關係集合
根據數據元素之間邏輯關係的不同,數據結構分爲以下四類:


(a)集合:數據元素之間就是“屬於同一個集合”,除此之外,沒有任何關係。
(b)線性結構:數據元素之間存在着一對一的線性關係。
(c)樹結構:數據元素之間存在着一對多的層次關係。
(d)圖結構:數據元素之間存在着多對多的任意關係。

數據的存儲結構又稱物理結構,是數據及其邏輯結構在計算機中的表示,也就是說,存儲結構除了存儲數據元素之外,必須隱式或顯式地存儲數據元素之間的邏輯關係。通常有兩種存儲結構:順序存儲結構和鏈式存儲結構。


順序存儲:元素之間的邏輯關係由元素的存儲位置來表示。
鏈式存儲:元素之間的邏輯關係用指針來表示。

爲了區別,通常將數據的邏輯結構稱爲數據結構。
數據的邏輯結構和存儲結構密切相關。一種數據的邏輯結構可以用多種存儲結構來存儲,而採用不同的存儲結構,其數據處理的效率往往是不同的。

抽象數據類型

數據類型是一組值的集合以及定義於這個值集上的一組操作的總稱,規定了該類型數據的取值範圍和對這些數據採取的操作。
抽象:抽出問題本質的特徵而忽略非本質的細節。eg:程序語言將能完成某種功能並可重複執行的一段程序抽象爲函數,在需要執行這種功能時調用這個函數,將“做什麼”和“怎麼做”分離開,實現了算法細節和數據內部結構的隱藏。
抽象數據類型(ADT)是一個數據結構以及定義在該結構上的一組操作的總稱,可理解爲對數據類型的進一步抽象。

數據類型 ADT
高級程序設計語言支持的基本數據類型 自定義的數據類型

在設計ADT時,把ADT的定義和實現分開來。定義部分包含數據的邏輯結構和允許的操作集合。ADT的使用者依據這些定義來使用ADT,ADT的實現者依據這些定義來完成該ADT各種操作的具體實現。

ADT提供了定義和實現的不同視圖,實現了封裝和信息隱藏。eg:整數的數學概念和施加到整數的運算構成一個ADT,C++的語音int型是對這個ADT的物理實現,各個程序設計語言都提供了整數類型,儘管它們在不同的編譯器上實現的方法,但由於其ADT相同,在用戶看來都是相同的。

ADT的定義包含以下內容:

ADT 抽象數據類型名
Data
    數據元素之間邏輯關係的定義
Operation
    操作1
            前置條件:執行此操作前數據所必需的狀態
            輸入:執行此操作所需要的輸入
            功能:該操作將完成的功能
            輸出:執行該操作後產生的輸出
            後置條件:執行該操作後數據的狀態
    操作2
        ······
    ······
    操作n
        ······
endADT

算法是什麼

算法及其描述方法

算法是對特定問題求解步驟的一種描述,是指令的有限序列。算法滿足的五特性:>=0個輸入,>=1個輸出,有窮性,確定性,可行性。“好”算法除了滿足以上五特性還滿足以下五特性:正確性,魯棒性,簡單性,抽象分級,高效性。
算法的描述方法:自然語言,流程圖,程序設計語言,僞代碼。

算法分析

算法的時間複雜度:爲了客觀地反應一個算法的執行時間,可以用算法中的基本語句的執行次數來度量算法的工作量。這種衡量效率的方法得出的不是時間量,而是一種增長趨勢的度量,只考察當問題規模充分大時,算法中基本語句的執行次數在漸進意義下的階,稱爲算法的漸進時間複雜度,是一個估算值,通常用大O表示。
定義:若存在兩個正的常數c和n0,對於任意n>=n0,都有T(n)<=c*f(n),擇稱T(n)=O(f(n))。

栗子1:++x;
解:++x;是基本語句,執行次數爲1,時間複雜度爲O(1)

栗子2:for( i= 1;i<=n;++i)++x;
++x;是基本語句,執行次數爲n,時間複雜度爲O(n)

算法的空間複雜度:在算法的執行過程中,需要的輔助空間數量。
記作:S(n)=O(f(n))
n爲問題規模

參考文獻:
〔1〕王紅梅,胡明,王濤 . 數據結構(C++版)(第2版)[M] . 清華大學出版社 . 2011

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章