資料結構-佇列-樹

weixin_34037977發表於2018-11-01

什麼是佇列

具有一定操作約束的線性表 只能在一端插入,從另一端刪除

先入先出FIFO

佇列的順序儲存實現

環形陣列可以使陣列的空間得到最大空間利用

佇列的順序儲存結構通常由一個一維陣列和一個記錄佇列頭元 素位置的變數front以及一個記錄佇列尾元素位置的變數rear組成。

2132554-543002068881e448.png
arr1.png

注意:
順環佇列會出現空、滿無法區分,解決方法空一個空間不放元素或者新增一個tag或者size標記

佇列的鏈式儲存實現

佇列的鏈式儲存結構也可以用一個單連結串列實現。插入和刪除操作 分別在連結串列的兩頭進行.

2132554-fc658e5fb6787097.png
list1.png
2132554-51624ecfb987bdfe.png
list2.png

樹和樹的表示

查詢(Searching)

查詢:根據某個給定關鍵字K ,從集合R中找出關鍵字與K相同的記錄

  • 靜態查詢:集合中記錄是固定的

    沒有插入和刪除操作,只有查詢

  • 動態查詢:集合中記錄是動態變化的

    除查詢,還可能發生插入和刪除

靜態查詢

  • 方法1:順序查詢


    2132554-ad4c2720c2108624.png
    serach1.png

哨兵的作用可以少一步判斷(i>0)

  • 方法2:二分查詢演算法 具有對數的時間複雜度O(logN)

二分查詢的啟示我們可以存在一種新的結構叫做樹

樹的定義

樹(Tree): n(n≥0)個結點構成的有限集合。

當n=0時,稱為空樹;

對於任一棵非空樹(n> 0),它具備以下性質

樹中有一個稱為“根(Root)”的特殊結點,用 r 表示;

其餘結點可分為m(m>0)個互不相交的有限集T1,T2,... ,Tm,其 中每個集合本身又是一棵樹,稱為原來樹的“子樹(SubTree)”

子樹是不相交的

除了根結點外,每個結點有且僅有一個父結點;

一棵N個結點的樹有N-1條邊。

樹的一些基本術語

  1. 結點的度(Degree):結點的子樹個數
  2. 樹的度:樹的所有結點中最大的度數
  3. 葉結點(Leaf):度為0的結點
  4. 父結點(Parent):有子樹的結點是其子樹
    的根結點的父結點
  5. 子結點(Child):若A結點是B結點的父結 L
    點,則稱B結點是A結點的子結點;子結點也
    稱孩子結點。
  6. 兄弟結點(Sibling):具有同一父結點的各
    結點彼此是兄弟結點。
  7. 路徑和路徑長度:從結點n1到nk的路徑為一 個結點序列n1 , n2 ,... , nk , ni是 ni+1的父結 點。路徑所包含邊的個數為路徑的長度。
  8. 祖先結點(Ancestor):沿樹根到某一結點路 徑上的所有結點都是這個結點的祖先結點。
  9. 子孫結點(Descendant):某一結點的子樹 中的所有結點是這個結點的子孫。
  10. 結點的層次(Level):規定根結點在1層, 其它任一結點的層數是其父結點的層數加1。
  11. 樹的深度(Depth):樹中所有結點中的最 大層次是這棵樹的深度。

樹的表示

2132554-d0d36da0f5f6cc20.png
Tree1.png

這種資料結構稱為二叉樹 左邊指向子節點 右邊指向兄弟節點

相關文章