面試題(2)

  • 有哪幾種表的實現方式:順序實現(順序表:用一組地址連續的存儲單元依次存儲線性表的數據元素)和鏈式實現
    • 使用順序實現時,缺點在於需要預先分配表的大小,在超過原有大小後需要重新分配連續的空間;鏈式實現不用預先分配大小,但是需要額外的空間來存儲節點指針以實現表的邏輯關係
  • 鏈表的分類:單鏈表、循環鏈表和雙向鏈表
    • 單鏈表:指的是鏈表中節點指針只能指向鏈表中的下一個元素或者爲空
    • 雙向鏈表:每個鏈表節點既有指向下一個節點的指針,又有指向前一個節點的指針
    • 循環鏈表:在單鏈表和雙向鏈表基礎上,將這兩種鏈表的最後一個節點指向第一個節點從而實現循環

隊列

隊列是一種特殊的線性表(先進先出),隊列的插入和刪除操作分別在線性表的兩端進行

  • 什麼是隊列:隊列是一種線性表,隊列的插入(隊尾)和刪除操作(隊頭)分別在表的兩端進行,是一種先進先出的線性表

  • 什麼是棧:通過對線性表的插入和刪除操作(棧頂)進行限制而得到(插入和刪除操作都必須在表的同端完成),是一個先進後出的線性表

  • 如何訪問棧中的元素:主要是針對棧頂的元素進行訪問,不能直接訪問其他位置的棧元素

樹是一種數據結構,它是由n(n>=1)個有限節點組成的一個具有層次關係的集合

  • 樹的分類:根據樹的節點的關係不同,可以分爲有序樹(子樹的位置自左向右有次序關係,順序決定了大小)和無序樹;
    • 樹是n個節點的有限集T;T爲空時稱爲空樹,否則滿足如下兩個條件:
      • 有且僅有一個特定的稱爲根的節點
      • 其餘的節點可分爲m個(m>=0)個互不相交的子集T1、T2…Tm,其中每個子集本身又是一棵樹,並稱其爲根的子樹
  • 如何對樹進行遍歷:遍歷就是通過一種方法按照一定的順序訪問一棵樹的過程。
    • 深度優先遍歷:先訪問根節點,再逐個訪問子節點
    • 廣度優先遍歷:對樹中的節點逐層進行訪問
  • 二叉樹遍歷:先序遍歷、中序遍歷和後序遍歷
    • 先序遍歷:訪問根節點;先序遍歷左子樹;先序遍歷右子樹
    • 中序遍歷:中序遍歷左子樹;訪問根節點;中序遍歷右子樹
    • 後序遍歷:後序遍歷左子樹;後序遍歷右子樹;訪問根節點
  • 二叉樹可分爲滿二叉樹、完全二叉樹
  • 如何計算二叉樹的高度:通過使用後序遍歷的方式計算二叉樹的高度。可以先計算左子樹的高度hl,後計算右子樹的高度hr,然後樹的高度則是h1和hr中較大的值加上1
  • 如何計算二叉樹的節點數:二叉樹的遍歷就是訪問二叉樹的全部節點,且每個節點只訪問一次。可以在3種遍歷方法中,在對二叉樹進行遍歷時使用一個變量計算二叉樹的節點數。

排序

冒泡排序:基本原理是依次比較相鄰的兩個數,將大數放在下面,小數放在前面。
- 什麼是選擇排序:從需要排序的隊列數據中選擇最小的同第一個值交換,再從剩下的部分中選擇最小的與第二個交換,依次循環下去,最後實現全隊列的排序
- 什麼是直接插入排序:依次取待排列數組的元素,將其插入到前面有序的數組中
- 快速排序:
- (1)首先對待排序的序列進行分解,任取序列中的某個數據元素作爲樞軸,序列被劃分成兩個子序列,左側子序列所有元素均小於樞軸元素,右側子序列所有元素均大於樞軸元素,樞軸位於兩個子序列中間
- (2)遞歸調用快速排序
- (3)最後兩種子排序已經排序,合併
這裏寫圖片描述

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