數據結構——鏈表、二叉樹、排序算法

鏈表(線性)

  • 概念
    一種存儲結構,每個數據元素 ai 都有兩個部分組成:存儲自己信息的數據域和一個存儲其後繼信息的指針域(組成一個結點);指針域中存儲的信息稱爲指針或鏈。n個結點鏈結成一個鏈表(線性鏈表)。

整個鏈表的存取必須從一個頭指針開始進行,頭指針指向鏈表的第一個結點的存儲位置,因爲最後一個數據元素沒有直接後續,因此鏈表的最後一個結點的指針爲空(null)算法

  • 鏈表的插入指針

  • 鏈表的刪除blog

樹和二叉樹

  • 定義
    以分支關係定義的層次結構。是n(n>=0)個結點的有限集,在任意一顆非空樹中,有且僅有一個特定的稱爲的結點。
  • 樹的結點
    包含一個數據元素及若干指向其子樹的分支。

  • 由從根到該結點所經分支和結點構成路徑。結點擁有的子樹數稱爲結點的。度爲0的結點稱爲葉子或終端結點。樹的度是樹內個結點度的最大值。樹的深度是樹中節點的最大層次。
二叉樹(有序樹)
  • 二叉樹定義:是另外一種樹型結構,他的特色是每個結點至多隻有兩顆子樹(即二叉樹中不存在度大於2的結點),且二叉樹的子樹有左右之分,齊次序不能任意顛倒。(二叉樹和樹是兩種不一樣的樹型結構,不等同與度爲2的有序樹
  • 遍歷二叉樹
  1. 先序遍歷:排序

    • 訪問根節點;D
    • 先序遍歷左子樹;L
    • 先序遍歷右子樹;R
  2. 中序遍歷原理

    • 中序遍歷左子樹;L
    • 訪問根結點;D
    • 中序遍歷右子樹; R
  3. 後序遍歷:二叉樹

    • 後序遍歷左子樹;L
    • 後續遍歷右子樹;R
    • 訪問根結點; D
  • 徹底二叉樹:深度爲k,有n個結點的二叉樹,當且僅當對其每個結點都與深度k的滿二叉樹中編號從1到n的結點一一對應。終端

  • 赫夫曼樹(最優二叉樹):**帶權路徑長度WPL(=線條數*結點上權)**最小的二叉樹
  • 構造赫夫曼樹
  1. 根據給定的n個權值{w1,w2,,,wn}構成n顆二叉樹的集合F={T1, T2, T3,,Tn},其中每一顆二叉樹Ti中只有一個帶權爲wi的根結點,其左右子樹都爲空;
  2. 在F中選取兩顆根結點的權值最小的樹做爲左右子樹構造一顆新的二叉樹,且新的二叉樹的根結點的權值是左右子樹上根結點的權值之和;
  3. 在F中刪除這兩顆樹,同時將新的二叉樹加入到F中;
  4. 重負2,3,直到F只含一顆樹爲止。這棵樹就是赫夫曼樹。
  • 平衡二叉樹
  1. 定義:AVL樹,他或者是一顆空樹,或者是具備下列性質的二叉樹:他的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的深度之差不超過1,。若將二叉樹上結點的平衡因子BF定義爲該結點的左子樹的深度減去他的右子樹的深度,則平衡二叉樹上因此結點的平衡因子只多是-1,0, 1。
  2. 如何構建平衡二叉樹:旋轉技術(略)遍歷

    • 單向左旋轉;
    • 單向右旋轉
    • 雙向旋轉(先左後右);
    • 雙向旋轉(先有後左)

排序算法

快速排序
  • 算法原理
  1. 先從數列中取出一個數做爲「基準」;
  2. 分區過程:將比基準大的放在右邊,比基準小的放在左邊;
  3. 在對左右分區重複第二步,直到每個區間只有一個數。
  • 時間複雜度:o(nlogn)
  • 空間複雜度:o(logn)
希爾排序
  • 算法原理:
  1. 先將整個待排序的記錄序列分割成若干個子序列分別進行直接插入排序;
  2. 將多個基本有序數全體進行直接插入排序
  • 時間複雜度:o(nlogn)
  • 空間複雜度:o(1)
選擇排序
  • 算法原理:
  1. 在未排序的序列中找到最小或最大的元素,存放在排序起始位置;
  2. 在剩餘的未排序的元素中繼續尋找最小或最大的元素擋在排序的末尾;
  3. 重複2
  • 時間複雜度:o(n^2)
  • 空間複雜度:o(1)

總結

只是簡單的概念總結。im

相關文章
相關標籤/搜索