1. 程式人生 > >資料結構經典面試題——概念

資料結構經典面試題——概念

一、演算法的基本概念

計算機解題的過程實際上是在實施某種演算法,這種演算法稱為計算機演算法。
1.演算法的基本特徵:可行性,確定性,有窮性,擁有足夠的情報。
2.演算法的基本要素:演算法中對資料的運算和操作、演算法的控制結構。
3.演算法設計的基本方法:列舉法、歸納法、遞推、遞迴、減半遞推技術、回溯法。
4.演算法設計的要求:正確性、可讀性、健壯性、效率與低儲存量需求

二、演算法的複雜度

1.演算法的時間複雜度:指執行演算法所需要的計算工作量
2.演算法的空間複雜度:執行這個演算法所需要的記憶體空間

三、資料結構的定義

1.資料的邏輯結構:反映資料元素之間的關係的資料元素集合的表示。資料的邏輯結構包括集合、線形結構、樹形結構和圖形結構四種。

2.資料的儲存結構:資料的邏輯結構在計算機儲存空間種的存放形式稱為資料的儲存結構。常用的儲存結構有順序、連結、索引等儲存結構。

四、資料結構的圖形表示:

在資料結構中,沒有前件的結點稱為根結點;沒有後件的結點成為終端結點。插入和刪除是對資料結構的兩種基本運算。還有查詢、分類、合併、分解、複製和修改等。

五、線性結構和非線性結構

根據資料結構中各資料元素之間前後件關係的複雜程度,一般將資料結構分為兩大型別:線性結構和非線性結構。
線性結構:非空資料結構滿足:有且只有一個根結點;每個結點最多有一個前件,最多隻有一個後件。非線性結構:如果一個數據結構不是線性結構,稱之為非線性結構。
常見的線性結構:線性表、棧、佇列

六、線性表的定義

線性表是n 個元素構成的有限序列(A1A2A3……)。表中的每一個數據元素,除了第一個以外,有且只有一個前件。除了最後一個以外有且只有一個後件。即線性表是一個空表,或可以表示為(a1,a2,……an, 其中ai(I=1,2,……n)是屬於資料物件的元素,通常也稱其為線性表中的一個結點。
非空線性表有如下一些特徵:
1)有且只有一個根結點a1,它無前件;
2)有且只有一個終端結點an,它無後件;
3)除根結點與終端結點外,其他所有結點有且只有一個前件,也有且只有一個後件。線性表中結點的個數n稱為線性表的長度。當n=0時稱為空表。

七、線性表的順序儲存結構

1線性表的順序表指的是用一組地址連續的儲存單元依次儲存線性表的資料元素。

2線性表的順序儲存結構具備如下兩個基本特徵:
1.線性表中的所有元素所佔的儲存空間是連續的;
2.線性表中各資料元素在儲存空間中是按邏輯順序依次存放的。
即線性表邏輯上相鄰、物理也相鄰,則已知第一個元素首地址和每個元素所佔位元組數,則可求出任一個元素首地址。
假設線性表的每個元素需佔用K個儲存單元,並以所佔的第一個單元的儲存地址作為資料元素的儲存位置。則線性表中第i+1個數據元素的儲存位置LOC(ai+1)和第i個數據元素的儲存位置LOC(ai)之間滿足下列關係:
LOC(ai+1)=LOC(ai)+K
LOC(ai)=LOC(a1)+(i-1)*K     ①
其中,LOC(a1)是線性表的第一個資料元素a1的儲存位置,通常稱做線性表的起始位置或基地址。
因為在順序儲存結構中,每個資料元素地址可以通過公式計算得到,所以線性表的順序儲存結構是隨機存取的儲存結構。
3線上性表的順序儲存結構下,可以對線性表做以下運算:
插入、刪除、查詢、排序、分解、合併、複製、逆轉

八、順序表的插入運算

線性表的插入運算是指在表的第I個位置上,插入一個新結點x,使長度為n的線性表(a1,a2 …ai…an)變成長度為n+1的線性表(a1,a2…x,ai…an).
該演算法的時間主要花費在迴圈的結點後移語句上,執行次數是n-I+1
I=n+1,最好情況,時間複雜度o(1) I=1, 最壞情況,時間複雜度o(n)
演算法的平均時間複雜度為o(n)

九、順序表的刪除運算

線性表的刪除運算是指在表的第I個位置上,刪除一個新結點x,使長度為n的線性表(a1,a2 …ai…an)變成長度為n-1的線性表(a1,a2…ai-1,ai+1…an).
I=n,時間複雜度o(1)I=1,時間複雜度o(n) 平均時間複雜度為o(n)

十、棧及其基本運算

1.什麼是棧?

棧實際上也是一個線性表,只不過是一種特殊的線性表。棧是隻能在表的一端進行插入和刪除運算的線性表,通常稱插入、刪除這一端為棧頂(TOP),另一端為棧底(BOTTOM)。當表中沒有元素時稱為空棧。棧頂元素總是後被插入的元素,從而也是最先被刪除的元素;棧底元素總是最先被插入的元素,從而也是最後才能被刪除的元素。
假設棧S=a1,a2,a3,……an),則a1 稱為棧底元素,an稱為棧頂元素。棧中元素按a1,a2,a3……an的次序進棧,退棧的第一個元素應該是棧頂元素。即後進先出。

2.棧的順序儲存及其運算

S1M)作為棧的順序儲存空間。M為棧的最大容量。
棧的基本運算有三種:入棧、退棧與讀棧頂元素。
入棧運算:在棧頂位置插入一個新元素。
首先將棧頂指標進一(TOP+1),然後將新元素插入到棧頂指標指向的位置。
退棧運算:指取出棧頂元素並賦給一個指定的變數。
首先將棧頂元素賦給一個指定的變數,然後將棧頂指標退一(TOP-1
讀棧頂元素:將棧頂元素賦給一個指定的變數。棧頂指標不會改變。

十一、佇列及其基本運算

1.什麼是佇列

佇列是隻允許在一端刪除,在另一端插入的順序表,允許刪除的一端叫做對頭,允許插入的一端叫做對尾。
佇列的修改是先進先出。往隊尾插入一個元素成為入隊運算。從對頭刪除一個元素稱為退隊運算。

2.迴圈佇列及其運算

在實際應用中,佇列的順序儲存結構一般採用迴圈佇列的形式。所謂迴圈佇列,就是將佇列儲存空間的最後一個位置繞到第一個位置,形成邏輯上的環狀空間。在迴圈佇列中,,用隊尾指標rear指向佇列中的隊尾元素,用排頭指標front指向排頭元素的前一個位置,因此,從排頭指標front指向的後一個位置直到隊尾指標 rear指向的位置之間所有的元素均為佇列中的元素。
在實際使用迴圈佇列時,為了能區分隊滿還是佇列空,通常需要增加一個標誌S
佇列空,則S=0rear=front=m     佇列滿,則S=1rear=front=m
迴圈佇列主要有兩種基本運算:入隊運算和退隊運算
n      入隊運算
指在迴圈佇列的隊尾加入一個新元素,首先rear=rear+1,rear=m+1時,置rear=1,然後將新元素插入到隊尾指標指向的位置。當S=1rear=front,說明佇列已滿,不能進行入隊運算,稱為上溢
n      退隊運算
指在迴圈佇列的排頭位置退出一個元素並賦給指定的變數。首先front=front+1,並當front=m+1時,置front=1,然後將排頭指標指向的元素賦給指定的變數。當迴圈佇列為空S=0,不能進行退隊運算,這種情況成為下溢

十二、線性單鏈表的結構及其基本運算

1.線性單鏈表的基本概念
一組任意的儲存單元儲存線性表的資料元素,因此,為了表示每個資料元素ai與其直接後繼資料元素ai+1之間的邏輯關係,對資料元素ai來說,除了儲存其本身的資訊之外,還需儲存一個指示其直接後繼的資訊(即直接後繼的儲存位置)。這兩部分資訊組成資料元素ai的儲存映象,成為結點。它包括兩個域:其中儲存資料元素資訊的域稱為資料域,儲存直接後繼儲存位置的域稱為指標域。指標域中儲存的資訊稱做指標或鏈。N個結點鏈結成一個連結串列,即為線性表(a1, a2,……,an)的鏈式儲存結構。又由於此連結串列的每個結點中只包含一個指標域,故又稱線性連結串列或單鏈表。
有時,我們在單鏈表的第一個結點之前附設一個結點,稱之為頭結點,它指向表中第一個結點。頭結點的資料域可以不儲存任何資訊,也可儲存如線性表的長度等類的附加資訊,頭結點的指標域儲存指向第一個結點的指標(即第一個元素結點的儲存位置)。
在單鏈表中,取得第I個數據元素必須從頭指標出發尋找,因此,單鏈表是非隨機存取的儲存結構

連結串列的形式:單向,雙向
2.線性單鏈表的儲存結構
3帶鏈
3.帶列的棧與佇列
棧也是線性表,也可以採用鏈式儲存結構。
佇列也是線性表,也可以採用鏈式儲存結構。

十三、線性連結串列的基本運算

1.線性連結串列的插入 2.線性連結串列的刪除

十四、雙向連結串列的結構及其基本運算
在雙向連結串列的結點中有兩個指標域,其一指向直接後繼,另一指向直接前驅。

十五、迴圈連結串列的結構及其基本運算
是另一種形式的鏈式儲存結構,它的特點是表中最後一個結點的指標域指向頭結點,整個連結串列形成一個環。因此,從表中任一結點出發均可找到表中其他結點。

十六、樹的定義

樹是一種簡單的非線性結構。樹型結構的特點:
1.每個結點只有一個前件,稱為父結點,沒有前件的結點只有一個,稱為樹的根結點。
2.每一個結點可以有多個後件結點,稱為該結點的子結點。沒有後件的結點稱為葉子結點
3.一個結點所擁有的後件個數稱為樹的結點度
4.樹的最大層次稱為樹的深度。

十七、二叉樹的定義及其基本性質

1.二叉樹是另一種樹型結構,它的特點是每個結點至多隻有二棵子樹(即二叉樹中不存在度大於2的結點),並且,二叉樹的子樹有左右之分,其次序不能任意顛倒。
2.二叉樹的基本性質
在二叉樹的第I層上至多有2i-1個結點。
深度為k的二叉樹至多有2k-1個結點(k>=1)
在任意一個二叉樹中,度為0的結點總是比度為2的結點多一個;
具有n 個結點的二叉樹,其深度至少為[log2n]+1
一棵深度為k且有2k-1個結點的二叉樹稱為滿二叉樹。這種樹的特點是每一層上的結點數都是最大結點數。
3.滿二叉樹與完全二叉樹
滿二叉樹:除最後一層以外,每一層上的所有結點都有兩個子結點。在滿二叉樹的第K層上有2K-1個結點,且深度為M的滿二叉樹右2M-1個結點
完全二叉樹:除最後一層以外,每一層上的結點數均達到最大值;在最後一層上只缺少右邊的若干結點。具有N個結點的完全二叉樹的深度為[log2n]+1
完全二叉樹總結點數為N
N為奇數,則葉子結點數為(N+1/2 N為偶數,則葉子結點數為N/2
4.二叉樹的儲存結構
二叉樹通常採用鏈式儲存結構

二叉樹具有下列重要特性:
     性質1 在二叉樹的第i層上至多有2i-1個結點(i≥1)
     利用歸納法容易證得此性質。
     i=1時,只有一個根結點。 顯然,2i-1=20=1是對的。
     現在假定對所有的j1≤j<i,命題成立,即第j層上至多有2j-1個結點。那麼,可以證明j=i時命題也成立。
     由歸納假設:第i-1層上至多有2i-2個結點。由於二叉樹的每個結點的度至多為 2,故在第i層上的最大結點數為第i-1層上的最大結點數的2倍,即2*2i-2=2i-1
     性質2 深度為k的二叉樹至多有2k-1個結點,(k≥1)

    由性質1可見,深度為k的二叉樹的最大結點數為
k                        k
∑(i層上的最大結點數) =∑2i-1=2k -1
i=1                     i=1
    性質3 對任何一棵二叉樹T,如果其終端結點數為n0,度為2的結點數為n2,則n0=n2+1
     n1為二叉樹T中度為1的結點數。因為二叉樹中所有結點的度均小於或等於2所以其結點總數為

n=n0+n1+n2 (6—1)

     再看二叉樹中的分支數。除了根結點外,其餘結點都有一個分支進入,設B為分支總數,則n=B+1。由於這些分支是由度為12的結點射出的,所以又有B=n1+ 2n2

n=n1+2*n2+1 (6—2)

     於是得由式(6—1)(6—2)n0=n2+1

十八、二叉樹的遍歷

就是遵從某種次序,訪問二叉樹中的所有結點,使得每個結點僅被訪問一次。一般先左後右。
1.前序遍歷DLR 首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。
2.中序遍歷LDR 首先遍歷左子樹,然後根結點,最後右子樹
3.後序遍歷LRD 首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點。

十九、順序查詢與二分查詢

1.順序查詢 在兩種情況下只能用順序查詢:線性表為無序表、鏈式儲存結構的有序表
2.二分查詢 只適用於順序儲存的有序表(從小到大)。

二十、二分查詢

對於長度為N的有序線性表,在最壞情況下,二分查詢只需要比較log2N次,而順序查詢要比N次。 排序:指將一個無序序列整理成按值非遞減順序排列的有序序列。

二十一、交換類排序法

氣泡排序與快速排序法屬於交換類的排序方法
1.氣泡排序法 假設線性表的長度為N,則在最壞的情況下,冒跑排序需要經過N/2遍的從前往後的掃描和N/2遍的從後往前的掃描,需要的比較次數為NN-1/2
2.快速排序法

二十二、選擇類排序法 

1.簡單選擇排序法 2.堆排序法

二十三、插入類排序法 

1.簡單插入排序法2.希爾排序法

最壞情況下

最好情況下

說明

交換排序

氣泡排序

n(n-1)/2

最簡單的交換排序。在待排序的元素序列基本有序的前提下,效率最高

快速排序

n(n-1)/2

O(Nlog2 N)

插入排序

簡單插入排序

n(n-1)/2

每個元素距其最終位置不遠時適用

希爾排序

O(n1.5)

選擇排序

簡單選擇排序

n(n-1)/2

堆排序

O(nlog2n)

  適用於較大規模的線性表

相關推薦

資料結構經典試題——概念

一、演算法的基本概念 計算機解題的過程實際上是在實施某種演算法,這種演算法稱為計算機演算法。 1.演算法的基本特徵:可行性,確定性,有窮性,擁有足夠的情報。 2.演算法的基本要素:演算法中對資料的運

資料結構經典試題:在字串中找到出現頻率大於50%的那個字元

來源:我是碼農,轉載請保留出處和連結! 本文連結:http://www.54manong.com/?id=13 問題描述: 在某個字串中(字串可能很長,比如有幾千萬個字元),請找出某個出現頻率大於50%的那個字元。例如:在字串"aabcdaa"中,字串長為7,字元'a'出現了4

資料結構經典試題:多種方法實現字串迴圈移位

來源:我是碼農,轉載請保留出處和連結! 本文連結:http://www.54manong.com/?id=12 問題描述:     要求在時間複雜度和空間複雜度分別為O(n)和O(1)的條件下把一個長度為N的字串迴圈左移M位,例如將長度為9的字串"12345

資料結構經典試題——練習3

1. 在計算機中,演算法是指(解題方案的準確而完整的描述)2.在下列選項中,哪個不是一個演算法一般應該具有的基本特徵(無窮性) 說明:演算法的四個基本特徵是:可行性、確定性、有窮性和擁有足夠的情報。

資料 hadoop 經典試題 | 三

1、MapReduced的工作流程 輸入分片(inputsplit):在進行map計算之前,mapreduce會根據輸入檔案計算輸入分片(input split),每個輸入分片(input split)針對一個map任務;儲存的並非資料本身,而是一個分片長度和一個記錄資料的

常見資料結構筆試試題

1、什麼平衡二叉樹? 平衡二叉樹,是一種二叉排序樹,其中每個結點的左子樹和右子樹的高度差至多等於1。它是一種高度平衡的二叉排序樹。高度平衡?意思是說,要麼它是一棵空樹,要麼它的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的深度之差的絕對值不超過1。 2、什麼是紅黑樹?

資料結構—二叉樹相關概念經典試題

二叉樹概念 一棵二叉樹是結點的有限集合,該集合或者為空, 或者是由根結點加上兩棵分別稱為左子樹和右子樹的二叉樹構成 二叉樹的特點: 每個結點最多有兩棵子樹,即二叉樹不存在度大於2的結點 二叉樹的子樹有左右之分,其子樹的次序不能顛倒 滿二叉樹、完全二叉樹

資料結構—連結串列經典試題

 連結串列面試題: 從尾到頭列印單鏈表 刪除一個無頭單鏈表的非尾節點(不能遍歷連結串列) 在無頭單鏈表的一個節點前插入一個節點(不能遍歷連結串列) 單鏈表實現約瑟夫環(JosephCircle) 逆置/反轉單鏈表 單鏈表排序(氣泡排序&快速排序) 合併

資料結構之高度平衡搜尋樹AVL樹(含經典試題----判斷一棵樹是否是AVL樹)

什麼是AVL樹 AVL樹簡介 AVL樹又稱為高度平衡的二叉搜尋樹,目的在於儘量降低二叉樹的高度,減少平均搜尋長度。 滿足二叉搜尋樹的性質 類比二叉搜尋樹,先將樹的結構確定下來,下面處理滿足AVL樹獨有的性質即可。 滿足AVL樹的性質 左

Linux下C語言的幾道經典試題

ref 使用 linu 學習資源 chan ima 什麽 img c語言 本篇文章整理了幾道Linux下C語言的經典面試題,相信對大家更好的理解Linux下的C語言會有很大的幫助,歡迎大家探討指正。 1、如果在Linux下使用GCC編譯器執行下列程序,輸出結果是什麽? 答

免費視頻教程:java經典試題深度解析

免費視頻教程:java經典面試題深度解析 對於很多初學者來說,學好java在後期面試的階段都沒什麽經驗,為了讓大家更好的了解面試相關知識,今天在這裏給大家分享了一個java經典面試題深度解析的免費視頻教程,需要的朋友可以看看,作為參考! 課程簡介:精選多年來名企在各地的Jav

java經典試題深度解析免費視頻教程分享

java經典面試題深度解析免費視頻教程分享 對於很多初學者來說,學好java在後期面試的階段都沒什麽經驗,為了讓大家更好的了解面試相關知識,今天在這裏給大家分享了一個java經典面試題深度解析的免費視頻教程,需要的朋友可以看看,作為參考! 課程簡介:精選多年來名企在各地的Java

SQL經典試題集錦

create var nod size int 創建 mark art nbsp 1、問題背景 (1)學生表(學號,姓名,年齡,性別) student(S#,Sname,Sage,Ssex) (2)課程表(課程編號,課程名稱,教師

C++ 經典試題

sel 備份 函數地址 開發 對象 const對象 代碼 結構 函數類型 1,關於動態申請內存 答:內存分配方式三種: (1)從靜態存儲區域分配:內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。 全局變量,static變量。 (2)在棧上創建:在執行

經典試題:js繼承方式下

deep 今天 typeof extend fun col const 繼承 uber 上一篇講解了構造函數的繼承方式,今天來講非構造函數的繼承模式。 一、object()方法 json格式的發明人Douglas Crockford,提出了一個object()函數,可以做到

Java面試常會被問到的經典試題,學習或者求職,你都要好好掌握

cookie 異常類 shu data 區別 origin 目的 tro jdk和jre Java現在的熱度雖然有所下降,但是,學Java的人依舊很多。。Java的崗位也是滲透很多。那麽,那些經典的Java知識點,你能看到問題就能說出一二三嗎?來一起看看。。 1.JDK和

經典試題 之 數組的循環右移

-a span 長度 main ever wrap 寫入 -s 應該 經典面試題 之 數組的循環右移 題目的大意是將一個長度為n的數組A內的元素循環右移m位(當然左移也可以),比如數組 {1, 2, 3, 4, 5}右移3位之後就變成{3, 4, 5, 1, 2}。 這題最

Linux大牛分享的7道經典試題和秒收 offer 的技巧

開發技能 多個 ins 主從架構 統計 mongo 交換 到你 移動客戶端 筆者其實沒有想到去面試,只是在智聯上更新了一下簡歷,就陸陸續續接到很多獵頭的郵件和電話,閑話少說,下面就分享給大家Linuxer的面試經歷: 首先,獵頭或者公司人資會把公司的介紹及崗位要求發到你郵箱

java經典試題---2----->Spring框架的相關介紹

原來 配置 主動 效果好 xml配置 優點 持久層 關系 文件 Spring是一個開源輕量級的框架,它的核心是控制反轉(IOC)和面向切面編程(AOP)。 作為業務層框架的spring能夠很好地整合表現層跟持久層。 IOC:將類的創建和依賴關系寫到配置文件裏,可以讓一個

前端javaScript經典試題

new 可能 spa 設置 沒有 sco test 問題 輸出結果 1.alert(1&&2),alert(1||0) alert(1&&2)的結果是2 只要“&&”前面是false,無論“&&”後