1、陣列和鍊錶的區別?
從邏輯結構來看:陣列的儲存長度是固定的,它不能適應資料動態增減的情況。鍊錶與陣列相反,它能夠動態分配儲存空間以適應資料動態增減的情況,並且易於進行插入和刪除操作。
從訪問方式來看:陣列在記憶體中是一片連續的儲存空間,可以通過陣列下標對陣列進行隨機訪問,訪問效率較高。鍊錶是連式儲存結構,它的儲存空間可以是任意的,因此鍊錶的訪問必須從前往後依次進行,訪問效率較陣列來說比較低。
2、單鏈表結構和順序儲存結構的區別?
儲存分配方式:順序儲存結構是用一段連續的儲存空間來儲存資料元素,可以進行隨機訪問,訪問效率較高。鏈式儲存結構用任意的儲存空間來儲存資料元素,不可以進行隨機訪問,訪問效率較低。
時間效能:當進行插入和刪除操作時,順序儲存結構每次都需要移動元素,總的時間複雜度為o(n^2),而單鏈表在確定i位置的指標後,其時間複雜度僅為o(1)。
空間效能:由於順序儲存結構需要進行預分配儲存空間,所以容易造成空間浪費或者溢位。鏈式儲存結構不需要預分配儲存空間,元素個數不受限制。
3、頭指標和頭結點的區別?
頭指標:是指向第乙個節點儲存位置的指標,具有標識作用,頭指標是鍊錶的必要元素,無論鍊錶是否為空,頭指標都存在。
頭結點:是放在第乙個元素節點之前,便於在第乙個元素節點之前進行插入和刪除的操作,頭結點不是鍊錶的必須元素,可有可無,頭結點的資料域也可以不儲存任何資訊。
4、邏輯結構和物理結構
資料的邏輯結構包括4種:集合、線性結構、樹形結構、圖狀結構
物理結構包括四種:順序儲存、鏈式儲存、索引儲存、雜湊儲存
5、鄰接矩陣與鄰接表的區別?
鄰接矩陣表示:無向圖的鄰接矩陣是對稱的,矩陣的行或列的有效元素的個數之和是節點的度。有向圖的鄰接矩陣不一定對稱,矩陣中行的有效元素的個數之和是節點的出度,列的有效元素的個數之和是節點的入度。
鄰接表表示:無向圖的每條邊在鄰接表中儲存兩次,若想知道節點的度,只需要求出對應鍊錶中節點的個數即可。有向圖的邊在鄰接表中僅儲存一次,若想知道節點的出度,則需要遍歷對應的鍊錶,若要求節點的入度則還需要遍歷其他的鍊錶。
6、棧和佇列的區別?
佇列是允許在一段進行插入另一端進行刪除的線性表。佇列顧名思義就像排隊一樣,對於進入佇列的元素按「先進先出」的規則處理,在表頭進行刪除在表尾進行插入。由於佇列要進行頻繁的插入和刪除,一般為了高效,選擇用定長陣列來儲存佇列元素,在對佇列進行操作之前要判斷佇列是否為空或是否已滿。
棧是只能在表尾進行插入和刪除操作的線性表。對於插入到棧的元素按「後進先出」的規則處理,插入和刪除操作都在棧頂進行,與佇列類似一般用定長陣列儲存棧元素。由於進棧和出棧都是在棧頂進行,因此要有乙個size變數來記錄當前棧的大小,當進棧時size不能超過陣列長度,size+1,出棧時棧不為空,size-1。
7、演算法的特點?
演算法的五大特性:確定性、有窮性、可行性,有0個或多個輸入、有1個或多個輸出
8、樹與二叉樹的相關概念?
樹是非線性結構,其元素之間有明顯的層次關係。在樹的結構中,每個節點都只有乙個前件稱為父節點,沒有前件的節點為樹的根節點,簡稱為樹的根;每個節點可以有多個後件成為節點的子節點,沒有後件的節點稱為葉子節點。
在樹的結構中,乙個節點所擁有的子節點個數稱為該節點的度,樹中最大的節點的度為樹的度,樹的最大的層次稱為樹的深度
二叉樹:在二叉樹中只有乙個根節點,乙個節點最多只能有兩個子節點,稱為左子樹和右子樹。
滿二叉樹:滿二叉樹是指除了最後一層外其他節點均有兩顆子樹,第k層有2^(k-1)
個節點,深度為m的樹共有2^m-1
個節點
完全二叉樹:完全二叉樹是指除了最後一層外,其他任何一層的節點數均達到最大值,且最後一層也只是在最右側缺少節點
二叉樹的儲存:二叉樹可以用鏈式儲存結構來儲存,滿二叉樹和完全二叉樹可以用順序儲存結構來儲存
二叉樹的遍歷:二叉樹有先序遍歷(根左右),中序遍歷(左根右)和後續遍歷(左右根)
9、圖的相關概念?
圖的表示:g=(v,e)=(頂點,邊);無向完全圖有n(n-1)/2條邊,有向完全圖有n(n-1)條邊
迪傑斯特拉(dijkstra)演算法:單源最短路徑演算法,用於求某一頂點到其他頂點的最短路徑,它的特點是以起始點為中心層層向外擴充套件,直到擴充套件的終點為止,迪傑斯特拉演算法要求邊的權值不能為負權。
洛伊德(floyd)演算法:求任意頂點之間的最短路徑,其邊的權值可為負權
10、深度優先搜尋步驟?
(1)訪問起始點v
(2)若v的第乙個鄰接點沒有被訪問過,則深度遍歷該鄰接點;
(3)若v的第乙個鄰接點已經被訪問,則訪問其第二個鄰接點,進行深度遍歷;重複以上步驟直到所有節點都被訪問過為止
11、廣度優先搜尋的步驟?
(1)訪問起始點v
(2)依次遍歷v的所有未訪問過得鄰接點
(3)再依次訪問下一層中未被訪問過得鄰接點;重複以上步驟,直到所有的頂點都被訪問過為止
12、拓撲排序的步驟:
(1)在有向圖中任意選擇乙個沒有前驅的節點輸出
(2)從圖中刪去該節點以及與他相連的邊
(3)重複以上步驟,直到所有的頂點都輸出或者當前圖中不存在無前驅的頂點為止,後者代表該圖是有環圖,所以可以通過拓撲排序來判斷乙個圖是否存在環。
13、關鍵路徑的相關概念?
aoe網是一種以頂點為事件,弧為活動,權為活動的持續時間的帶權有向無環圖,通常aoe網用來估算工程的完成時間。
關鍵路徑:在aoe網中,從起始點到終點的最大路徑長度的路徑為關鍵活動。最大路徑長度是指:該路徑上的活動持續時間之和最大。
關鍵活動:關鍵路徑上的活動為關鍵路徑,關鍵活動的最早開始時間等於最晚開始時間。由於aoe網中的某些活動是可以同時發生的,所以完成整個工程的時間應該是從始點到終點的最大路徑長度,關鍵路徑長度即為工程的最短完成時間。
14、對各種查詢方法的概括?
(1)順序查詢:把待查關鍵字key放入哨兵位置(i=0),再從後往前依次把表中元素和key比較,如果返回值為0則查詢失敗,表中沒有這個key值,如果返回值為元素的位置i(i!=0)則查詢成功,設定哨兵的位置是為了加快執行速度。他的時間效率為o(n)
(2)折半查詢:要求查詢表為順序儲存結構並且有序,若關鍵字在表中則返回關鍵字的位置,若關鍵字不在表中時則查詢左右子部分,停止查詢的典型標誌是:查詢範圍的上界 <= 查詢範圍的下界
(3)二叉排序樹:或者是一棵空樹,或者是一棵具有如下特點的樹:如果該樹有左子樹,則其左子樹的所有節點值小於根的值;若該樹有右子樹,則其右子樹的所有節點值均大於根的值;其左右子樹也分別為二叉排序樹。
(4)平衡二叉樹:它或者是一棵空樹或者具有如下特點:他的左子樹和右子樹的高度差的絕對值不能大於1,且他的左右子樹也都是平衡二叉樹。 如果再乙個平衡二叉樹中插入乙個節點可能造成失衡,這時就要進行樹結構的調整,即平衡旋轉。包括4中情況:在左子樹的左子樹上插入節點時向右進行單向旋轉;在右子樹的右子樹上插入節點時向左進行單向旋轉;在左子樹的右子樹插入節點時先向左旋轉再向右旋轉;在右子樹的左子樹插入節點時先向右旋轉再向左旋轉。
15、對各種內部排序的概括與總結?
(1)直接插入排序(穩定):將序列分為有序部分和無序部分,從無序部分依次選擇元素與有序部分比較找到合適的位置,將原來的元素往後移,將元素插入到相應位置上。時間複雜度為:o(n^2),空間複雜度為o(1)
(2)折半插入排序(穩定):設定三個變數low high mid,令mid=(low+high)/2,若a[mid]>key,則令high=mid-1,否則令low=mid+1,直到low>high時停止迴圈,對序列中的每個元素做以上處理,找到合適位置將其他元素後移進行插入。他的比較次數為o(nlog2n),但是因為要後移,因此時間複雜度為o(n^2),空間複雜度為o(1)
(3)希爾排序(不穩定):先將序列分為若干個子串行,對各子串行進行直接插入排序,等到序列基本有序時再對整個序列進行一次直接插入排序。空間複雜度為o(1)
(4)簡單選擇排序(不穩定):將序列分為2部分,每經過一趟就在無序部分找到乙個最小值然後與無序部分的第乙個元素交換位置。時間複雜度為o(n^2),空間複雜度為o(1)
(5)堆排序(不穩定):設有乙個任意序列,k1,k2,…,kn,當滿足下面特點時稱之為堆:讓此序列排列成完全二叉樹,該樹具有以下特點,該樹中任意節點均大於或小於其左右孩子,此樹的根節點為最大值或者最小值。時間複雜度為o(nlog2n),空間複雜度為o(1)。
(6)氣泡排序(穩定):每一趟都將元素進行兩兩比較,並且按照「前小後大」的規則進行交換。時間複雜度為o(n^2),空間複雜度為o(1)。
(7)快速排序(不穩定):在序列中任意選擇乙個元素作為中心,比它大的元素一律向後移動,比它小的元素一律向前移動,形成左右兩個子串行,再把子序列按上述操作進行調整,直到所有的子串行中都只有乙個元素時序列即為有序。時間複雜度為o(nlog2n),空間複雜度為o(log2n)
(8)歸併排序(穩定):把兩個或者兩個以上的有序表合併成乙個新的有序表。時間複雜度為o(nlogn)
(9)基數排序:時間複雜度為:對於n個記錄進行鏈式基數排序的時間複雜度為o(d(n+rd)),其中每一趟分配的時間複雜度為o(n),**的時間複雜度為o(rd)
複試上機指南之資料結構二
二叉樹的前 中 後序 層次遍歷 struct tree 先序遍歷 void preorder tree root coutpreorder root leftnode preorder root rightnode return 中序遍歷 void inorder tree root preorde...
考研複試面試準備 資料結構篇
一些資料物件以及附加在這些資料物件上的集合的操作 尾插法建立單鏈表,n個元素儲存在陣列a中 void createlistr lnode c,int a,int n r next null 頭插法 void createlistf lnode c,int a,int n 棧 只能在一端進行插入或刪除...
面試複試重點 演算法與資料結構
1.演算法的幾個特徵是什麼。2.演算法複雜性的定義。大o 小o分別表示的含義。3.遞迴演算法的定義 遞迴演算法的兩要素。4.分治演算法的思想,經典的分治演算法 全排列 二分搜尋 歸併排序 快速排序 線性時間選擇 最接近點對問題 5.動態規劃演算法解題框架,動態規劃演算法的兩個要素是什麼?備忘錄方法是...