面試常考資料結構與演算法

2021-07-28 00:21:08 字數 2016 閱讀 1955

資料結構部分:

1、陣列和鍊錶的區別。(很簡單,但是很常考,記得要回答全面)

c++語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造成記憶體空間的浪費。鍊錶是一種常見的資料組織形式,他採用動態分配記憶體的形式實現。需要時可以用new分配記憶體空間,不需要時用delete將已分配的空間釋放,不會造成記憶體空間的浪費。

從邏輯結構上來看,陣列必須實現定於固定的長度,不能適應資料動態增減的情況,即陣列的大小一旦定義就不能改變。當資料增加是,可能超過原先定義的元素的個數;當資料減少時,造成記憶體浪費;鍊錶動態進行儲存分配,可以適應資料動態地增減的情況,且可以方便地插入、刪除資料項。

從記憶體儲存的角度看;陣列從棧中分配空間(用new則在堆上建立),對程式設計師方便快速,但是自由度小;鍊錶從堆中分配空間,自由度大但是申請管理比較麻煩。

從訪問方式類看,陣列在記憶體中是連續的儲存,因此可以利用下標索引進行訪問;鍊錶是鏈式儲存結構,在訪問元素時候只能夠通過線性方式由前到後順序的訪問,所以訪問效率比陣列要低。

2、鍊錶的一些操作,如反轉,鍊錶陳釗環路判斷,雙向鍊錶,迴圈鍊錶相關操作。

3、佇列,棧的應用。(比如對壘在訊息佇列,站用在遞迴呼叫中)

4、二叉樹的是那種遍歷方式及其遞迴和非遞迴實現,三種遍歷方式的主要應用(字尾表示式),相關的時間複雜度。

5、字串相關

整型,浮點型和字串的轉換(atoi,atof,itoa)

字串拷貝注意異常檢查,比如空指標,字串重疊,自賦值,字串結束符『\0』等。

演算法部分

1、排序演算法:

排序可以算是最基本,最常用的演算法,也是筆試面試中最常被考的演算法,最基本的是氣泡排序,選擇排序,插入排序要可以很快地用**實現。這些主要考察你的實際編碼能力。堆排序,歸併排序,快速排序這些演算法需要熟悉主要思想,和需要注意的細節地方。需要熟悉的常用排序演算法的時間複雜度和空間複雜度。各種排序演算法的使用範圍:

(1)、當資料規模較小時候,可以使用簡單的直接插入排序或者直接選擇排序。

(2)、當檔案的初態已經基本有序,可以用直接插入排序和氣泡排序。

(3)、當資料規模較大是,應用速度最快的排序演算法,可以考慮使用快速排序。當記錄隨機分布的時候,快速排序平均時間最短,但是出現最壞的情況,這個時候的時間複雜度是o(n^2),且遞迴深度為n,所需的佔空間為o(n)。

(4)、對排序不會出現快排那樣最壞情況,且堆排序所需的輔助空間比快排要少,但是這兩種演算法都不是穩定的,要求排序時是穩定的,可以考慮用歸併排序。

(5)、歸併排序可以用於內部排序,也可以使用於排不排序。在外部排序時,通常採用多路歸併,並且通過解決長順串的合併,纏上長的初始串,提高主機與外設並行能力等,以減少訪問外存額外次數,提高外排的效率。

2、查詢演算法

能夠熟練寫出或者上級編碼出二分查詢的程式。

3、hash演算法

4、一些演算法設計思想。貪心演算法,分治演算法,動態規劃演算法,隨機劃分演算法,回溯演算法等。這些可以根據具體的例子來複習。 

5、stl

stl(standard templete library)是乙個c++領域中,用模板實現的資料結構和演算法庫,已經包含在了c++標準庫中,其中的vector,list,stack,queue等結構不僅擁有更強大的功能,還有了更高的安全性。除了資料結構外,stl還包含了泛化的迭代器,和執行在迭代器至上的各種使用的演算法。這些對於效能要求不是太高,但又不希望自己從底層實現演算法的應用還是很具有**力的。

手與大腦的距離決定了理想與現實的相似度

面試常考資料結構與演算法

資料結構部分 1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造...

面試常考資料結構與演算法

1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造成記憶體空間的...

常考演算法與資料結構 面試準備

一 演算法 1.演算法思想 1 最長公共子串行問題 動態規劃 2 貪心演算法 3 分治演算法 4 隨機劃分演算法 5 回溯演算法 2.排序問題 插入排序 直接插入 shell排序 選擇排序 直接選擇 堆排序 交換排序 氣泡排序 快速排序 歸併排序 基數排序 3.查詢演算法 二分查詢 4.hash演算...