1. 程式人生 > >[數據結構] - 入門

[數據結構] - 入門

查找 否則 接受 tro data 邏輯 cnblogs 排列 logs

序  

  這一篇文章是數據結構入門第一篇文章,但是忘記寫了,前幾天寫了數據結構 - 數組,其實應該還要寫一篇 數據結構 - 入門,今天給補上。數據結構這個欄目會連載常用的數據結構 (代碼為Java),歡迎大家給我留言討論。

1.什麽是數據結構

  1.1 數據

    數據是描述客觀事物的數字,字符以及所有能輸入到計算機中並且能為計算機接受的的各種符號集合統稱為數據(data),數據是程序的處理對象,例如學生管理程序處理的是學生數據,包括姓名,年齡,學號等。隨著科技的進步,數據格式越來越多,如視頻和聲音信號,經過采集轉換後都能存儲到計算機中形成可接受和處理的數據。

    表示一個事物的一組數據稱為 數據元素(data element)

數據元素是數據的基本單位,構成數據元素的數據稱為該元素的數據項(data item)

  1.2 數據類型

    類型是同一組值的集合,數據類型(dataType)是指一個類型和定義在該類型上的操作集合,數據類型定義了數據的性質。取值範圍以及對數據所能進行的各種操作。

  1.3 抽象數據類型

     抽象數據類型(Abstract dataType)是指一個邏輯概念上的類型和該類型的操作集合。沒有定義具體數據類型的元素稱為抽象數據元素。數據類型和抽象數據類型定義基本相同,不同在於,數據類型指的是高級語言的基本類型(int,char,byte,float,double,long...),而抽象數據類型指的是在基本數據類型支持下用戶新設計的數據類型,(表,棧,隊列,數組,圖,二叉樹。。。)

  1.4 數據結構

    計算機處理的數據不是雜亂無章的,而是有著內在聯系的,只有分析清楚他們的內在聯系,對大量的,復雜的數據才能進行合理的組織和有效的處理。對一個數據元素集合來說。如果在數據之間存在一種或者多種特定的關系。則被稱為數據結構(data structure) 因此 結構就是指數據元素之間存在的關系。數據結構和數據類型是2個不同的概念:

    數據類型是研究每一類數據的共有特性,關註的是數據集合是怎樣的。該數據集合上允許進行哪些操作

    數據結構研究的是相互關聯的數據間的關系,數據結構關註數據間的關系是怎樣,(順序關系,層級關系)

        

2. 數據的邏輯結構

   數據邏輯結構是對數據元素之間邏輯關系的描述,它可以用一個數據元素的集合和定義在此集合上的若幹關系來表示,數據的邏輯結構經常被簡化成數據結構

  1.線性結構

    除了第一個和最後一個元素外,每個元素只有一個前置元素和一個後置元素,第一個元素沒前置元素,最後一個元素沒有後置元素

技術分享圖片

  2.樹結構

    除了根節點外,每個元素只有一個前置元素,可以有零個或者多個後置元素。根節點沒有前置元素

技術分享圖片

  3.圖結構

    每個數據元素可有零個或若幹個前驅數據元素,零個或若幹個後繼數據元素

技術分享圖片

3. 數據的存儲結構

    任何需要計算機進行管理和處理的數據元素都必須按照某種方式存儲在計算機上,數據元素在計算機中存儲方式稱為數據的的存儲結構 ,也成為物理結構,數據的存儲結構要能正常的表示出數據的邏輯關系,數據的邏輯結構是從數據的邏輯關系角度來觀察,他與數據存儲無關,是獨立計算機的,而數據的存儲結構是邏輯結構在計算機中的實現,它是依賴計算機的。

    

    在順序存儲結構中,所有的存儲空間都被數據占了,而鏈式存儲結構中,每個節點除了要保存數據元素外,還要保存指向後繼節點的鏈接信息,因此每個節點至少有2個部分組成 數據域--保存數據元素 鏈----指向後置節點

  3.1 順序結構

    順序存儲結構是把數據存儲在一塊連續的地址空間中,邏輯上相鄰的數據在物理上也相鄰,數據間的邏輯關系表現在數據元素的存儲關系上。比如說一般高級語言中的數組就是順序結構。

    

技術分享圖片

  3.2鏈式存儲結構

    指針是指向物理存儲單元地址的變量,由數據元素域和指針域組成一個整體稱為一個節點(node)鏈式存儲結構是使用指針把相互之間關聯的節點(直接前置節點和後置節點)連起來,邏輯上相鄰的元素 物理上 不一定相連,數據間邏輯關系表現在節點的鏈接關系上。

技術分享圖片

  3.3存儲密度

    如果所有的存儲空間都用來存儲數據,則這種存儲結構是緊湊的,否則是非緊湊結構,顯然,順序存儲結構是緊湊結構,鏈式存儲結構是非緊湊的結構。

    結構的存儲密度定義為數據本身所占的存儲量和整個結構所占的存儲量之比。

    緊湊結構存儲密度為1,非緊湊結構存儲密度小於1,存儲密度越大,則存儲空間的利用率越高,但是非緊湊的數據結構存儲附加的信息會帶來操作上的方便,所以如何舍去,在做項目的時候需要視情況而定。

    比如說一個線性表,當不需要頻繁插入刪掉的時候我們可以用順序存儲結構,這時候存儲密度大,占用空間少,而當插入和刪除操作很頻繁的時候,就需要采用鏈式存儲結構,因為這個時候雖然占用空間多,存儲密度小,但節省了操作時間,用空間換時間,

4. 數據的操作

    對一組數據類型的數據進行某種處理稱為數據的操作,對一種數據類型進行所有的操作稱為數據的操作集合。

    數據的操作是定義在數據的邏輯結構上的,每種邏輯結構都有一個操作集合,不同邏輯結構有不同操作,操作的具體實現和存儲結構有關。

    下面是常用的幾個操作:     

  • 初始化。
  • 判斷是否空狀態。
  • 存取,指獲得、設置指定元素值。
  • 統計數據元素個數。
  • 遍歷(traverse),指按照某種次序訪問一個數據結構中的所有元素,並且每個數據元素只被訪問一次。遍歷一種數據結構,將得到一個所有數據元素的線性序列。
  • 插入(insert)、刪除(remove)指定元素。
  • 查找(search),指在數據結構中尋找滿足給定條件的數據元素。
  • 排序(sort),指對數據元素按照指定關鍵字值的大小遞增(或遞減)次序重新排列。

最後我們認識下一些常用的數據集合:

  • 線性表表示可重復的無序集合,元素間具有前驅、後繼次序關系;不同元素的關鍵字可重復,采用序號能夠識別關鍵字重復的數據元素。
  • 排序線性表表示可重復的排序集合,元素按關鍵字大小次序排序。
  • 散列表表示不可重復的無序集合,元素關鍵字不重復,元素間沒有次序,不排序。
  • 二叉排序樹表示不可重復的排序集合,元素關鍵字不重復,元素按關鍵字升/降序排序。

  

[數據結構] - 入門