軟件設計師考試——數據結構與算法基礎

考點提要

  1. 數組與矩陣
  2. 線性表
  3. 廣義表
  4. 樹與二叉樹
  5. 排序與查找
  6. 時間複雜度與空間複雜度
  7. 算法基礎及常見的算法

一、數組

數組類型 存儲地址計算
一維數組a[n] a[i]的存儲地址爲:a+i*len
二維數組a[m][n] (從0開始) a[i][j]的存儲地址(按行存儲)爲:a + (i*n+j)*len
a[i][j]的存儲地址(按列存儲)爲:a+(j * m+i)*len

二、稀疏矩陣

  1. 上三角矩陣
  2. 下三角矩陣

考試的時候,使用代入的方式進行求解

三、線性表

  1. 順序表
  2. 鏈表
    1. 單鏈表
    2. 循環鏈表
    3. 雙向鏈表
  3. 鏈表的基本操作
    1. 單鏈表刪除結點
    2. 單鏈表插入結點
    3. 雙向鏈表刪除結點
    4. 雙向鏈表插入結點
  4. 順序存儲與鏈式存儲對比
    • 空間性能:順序表的存儲比鏈式表好
    • 時間性能:順序表的讀運算優於鏈式表;查找、插入、刪除,鏈表性能更好
  5. 隊列與棧
    • 隊列:先進先出
    • 棧:先進後出
    • 循環隊列:隊空條件:head = tail;隊滿條件:(tail + 1) % maxsize = head

四、廣義表

  1. 概念:線性表的推廣,是由0個或多個單元素子表所組成的有限序列。
  2. 記作:LS = (α1, α2, … , αn)
    α既可以是單個元素,也可以是廣義表,分別稱爲原子和子表。
  3. 深度與長度
    • 深度:廣義表展開後所含的括號的最大層數。
    • 長度:廣義表中元素的個數。
    • eg:LS1 = (a, (b, c), (d, e)),其長度爲3,深度爲2.
  4. 基本操作
    • 取表頭head(LS)。非空廣義表LS的第一個元素稱爲表頭。它可以是一個單元素,也可以是一個子表。
    • 取表尾tail(LS)。在非空廣義表中,除表頭元素之外由其餘元素所構成的表稱爲表尾。非空廣義表的表尾必定是一個表
    • eg:LS1 = (a, (b, c), (d, e)),取出元素b的操作?
      head(head(tail(LS1)))
      解析:tail(LS1) >>> ((b, c), (d, e)); head(tail(LS1)) >>> (b,c); head(head(tail(LS1))) >>> b

五、樹與二叉樹

  1. 樹的基本概念
    在這裏插入圖片描述

    • 結點的度:結點1:2;結點3: 1
    • 樹的度:2(所有結點的度中最大的一個)
    • 葉子結點:4、5、7、8(沒有孩子的結點)
    • 分支結點:1、2、3、6(度不爲0的結點)
    • 內部結點:2、3、6(除根節點之外的分支結點)
    • 父結點:有孩子的結點
    • 子結點:有爹的結點
    • 兄弟結點:4與5 、7與8、2與3
    • 層次(樹的深度(高度)):4
  2. 二叉樹的定義與基本性質

    • 識別滿二叉樹、完全二叉樹、非完全二叉樹。
      滿二叉樹:每個結點的度都爲2;
      完全二叉樹:從左到右沒有斷裂,也即有右結點必有左結點;
      非完全二叉樹:從左到右出現斷層。
      在這裏插入圖片描述
      在這裏插入圖片描述
      在這裏插入圖片描述
      在這裏插入圖片描述
    • 二叉樹的重要性質
      • 二叉樹第i層上的節點數目最多爲2i-1(i ≥ 1)
      • 深度爲k的二叉樹至多有2k-1個結點(k≥1)
      • 在任意一顆二叉樹中,若葉子節點數爲n0,度爲2的節點數爲n2,則n0=n2+1
      • 具有n個節點的完全二叉樹的深度爲⌊log2n⌋+1
      • 對一顆有n個節點的完全二叉樹,對任一節點i有:
        • 若 i > 1, 則其父節點爲⌊i/2⌋
        • 若 2i > n,則節點i無左孩子,否則其左孩子爲2i
        • 若2i + 1 > n,則節點i無右孩子,否則其右孩子爲2i+1
    • 二叉樹的遍歷
      在這裏插入圖片描述
      • 前序遍歷:1 2 4 5 7 8 3 6(根左右)

      • 中序遍歷:4 2 7 8 5 1 3 6(左根右)

      • 後序遍歷:4 8 7 5 2 6 3 1(左右根)

      • 層次遍歷:1 2 3 4 5 6 7 8(從上到下,從左到右)

      • 中序遍歷講解、後序遍歷可以模仿這個來
        在這裏插入圖片描述

        參考資料:https://blog.csdn.net/qq_33243189/article/details/80222629

    1. 反向構造二叉樹
      必須有中序遍歷
      eg:前序遍歷ABHFDECG、中序遍歷HBEDFAGC
      解題步驟
    2. 樹轉二叉樹
      1. 孩子節點——變成左子樹節點
      2. 兄弟節點——變成右孩子節點
    3. 查找二叉樹(二叉排序樹)
      在這裏插入圖片描述
      1. 基本特性:
        左孩子小於根
        右孩子大於根
      2. 操作:
        1. 插入節點:按照基本特性進行插入
        2. 刪除節點:
          1. 刪除葉子節點51,直接刪除
          2. 刪除有一個孩子的節點56,將56刪除,將其孩子51放到56原來的位置
          3. 刪除有兩個孩子的節點89,先在左子樹上進行中序遍歷尋找到最大的節點56
    4. 最優二叉樹(哈夫曼樹)
      1. 基本概念
        1. 樹的路徑長度
        2. 帶權路徑長度
        3. 樹的帶權路徑長度(樹的代價)
      2. 構造哈夫曼樹
    5. 線索二叉樹:將樹型轉化爲線性,瞭解即可
    6. 平衡二叉樹
      1. 什麼是平衡二叉樹?
        1. 任意結點左右子樹深度相差不超過1
        2. 任意結點左子樹深度-右子樹深度 = 1 或 0 或 -1

六、圖

1.基本概念

  1. 完全圖:
    1. 無向圖中,若每對定點之間都有一條邊相連,則稱該圖爲完全圖
      在這裏插入圖片描述
    2. 有向圖中,若每對頂點之間都有二條有向邊相互連接,則稱該圖爲完全圖。
      在這裏插入圖片描述

2. 圖的存儲——鄰接矩陣

用一個n階方陣R來存放圖中各節點的關聯信息,其矩陣元素Rij定義爲
在這裏插入圖片描述
eg:
在這裏插入圖片描述

3. 圖的存儲——鄰接表

首先把每個頂點的鄰接頂點用鏈表示出來,然後用一個一維數組來順序存儲上面每個鏈表的頭指針。

4. 圖的遍歷

在這裏插入圖片描述

  1. 深度優先遍歷:1 2 4 8 5 3 6 7(優先向下,左邊優先)
  2. 廣度優先遍歷:1 2 3 4 5 6 7 8(優先橫向,左邊優先)
  3. 使用鄰接表復原圖

5. 拓撲排序(瞭解就行了)

在這裏插入圖片描述
我們把用有向邊表示活動之間開始的先後關係。即AOV網絡

6. 圖的最小生成樹

在這裏插入圖片描述

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