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

2021-08-01 19:23:27 字數 1253 閱讀 9845

一、演算法

1.演算法思想

1)最長公共子串行問題--動態規劃 2)

貪心演算法

3)分治演算法

4)隨機劃分演算法

5)回溯演算法

2.排序問題

插入排序:直接插入、shell排序

選擇排序:直接選擇、堆排序

交換排序:氣泡排序、快速排序

歸併排序

基數排序

3.查詢演算法

二分查詢

4.hash演算法

二、資料結構部分:

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

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

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

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

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

2、鍊錶的一些操作

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

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

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

5、字串相關

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

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

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

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

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

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

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

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