1. 程式人生 > >Java原始碼集合類TreeMap學習1——資料結構1

Java原始碼集合類TreeMap學習1——資料結構1

寫在前面的話

TreeMap類的底層實現用到了資料結構——樹(紅黑樹),紅黑樹一直沒有徹底搞清楚到底是怎麼實現的,因為看到了它就想放棄,覺得不去理解清楚好像也沒有多大影響。但是這個是最底層最基礎也是最重要的知識,往往很容易被我們忽視,弄懂了底層才能發現問題的本質,死磕到底!先從資料結構開始,慢慢深入。

資料結構中的一些概念

資料(data)是對客觀事物的符號表示,在電腦科學中是指所有能輸入到計算機中並被計算機處理的所有符號的總稱。我們自己的話理解就是表示現實存在的東西的一個符號。

資料元素(data element)是資料的基本單位,在計算機程式中通常作為一個整體進行考慮和處理。

一個數據元素可由若干個資料項(data item)組成。資料項是資料不可分割的最小單位。

資料物件(data object)是性質相同資料元素的集合,是資料的一個子集。

資料結構(data structure)是相互之間存在一種或多種特定關係的資料元素的集合。

資料元素之間的相互關係稱為結構(structure)。4類基本結構:(1)集合;(2)線性結構;(3)樹形結構;(4)圖狀結構或網狀結構。

資料元素之間的關係在計算機中有兩種不同的表示方法,順序映像和非順序映像,並由此得到兩種不同的儲存結構:順序儲存結構和鏈式儲存結構。(具體為什麼有這兩種儲存結構一直不是很明白,希望有知道原因的大神可以指點下不勝感激)

順序映像的特點是藉助元素在儲存器中的相對位置來表示元素之間邏輯關係。

非順序映像的特點是藉助指示元素儲存的指標(pointer)表示元素之間的邏輯關係。


以上這些定義都是來自《資料結構(C語言版)》這本書。

在電腦科學中,樹(英語:tree)是一種抽象資料型別(ADT)或是實作這種抽象資料型別的資料結構,用來模擬具有樹狀結構性質的資料集合。它是由n(n>=1)個有限節點組成一個具有層次關係的集合。把它叫做“樹”是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點:

  • 每個節點有零個或多個子節點;
  • 沒有父節點的節點稱為根節點;
  • 每一個非根節點有且只有一個父節點;
  • 除了根節點外,每個子節點可以分為多個不相交的子樹;

樹的基本概念
  1. 節點的度:一個節點含有的子樹的個數稱為該節點的度;(A根節點的度為3,E的度為0)
  2. 樹的度:一棵樹中,最大的節點的度稱為樹的度;
    (最大節點的度為3,分別是A和B節點)
  3. 葉節點終端節點:度為零的節點;(E,F,G,H,I,J節點的度都為0)
  4. 非終端節點分支節點:度不為零的節點;
  5. 父親節點父節點:若一個節點含有子節點,則這個節點稱為其子節點的父節點;
  6. 孩子節點子節點:一個節點含有的子樹的根節點稱為該節點的子節點;
  7. 兄弟節點:具有相同父節點的節點互稱為兄弟節點;(B,C,D都是互為兄弟節點,父節點都是A)
  8. 節點的層次:從根開始定義起,根為第1層,根的子節點為第2層,以此類推;
  9. 樹的高度深度:樹中節點的最大層次;(樹的深度為3)
  10. 堂兄弟節點:父節點在同一層的節點互為堂兄弟;
  11. 節點的祖先:從根到該節點所經分支上的所有節點;
  12. 子孫:以某節點為根的子樹中任一節點都稱為該節點的子孫。
  13. 森林:由m(m>=0)棵互不相交的樹的集合稱為森林;
樹的順序 如果將樹中節點的各子樹看成從左至右是有次序的(即不能互換),則稱該樹為有序樹,否則為無序樹。