數據結構面試經常使用

數據結構部分:程序員

一、數組和鏈表的區別。(很簡單,可是很常考,記得要回答全面)面試

C++語言中能夠用數組處理一組數據類型相同的數據,但不容許動態定義數組的大小,即在使用數組以前必須肯定數組的大小。而在實際應用中,用戶使用數組以前沒法肯定數組的大小,只可以將數組定義成足夠大小,這樣數組的空間可能不被使用,從而形成內存空間的浪費。鏈表是一種常見的數據組織形式,他採用動態分配內存的形式實現。須要時能夠用new分配內存空間,不須要時用delete將已分配的空間釋放,不會形成內存空間的浪費。算法

從邏輯結構上來看,數組必須實現定於固定的長度,不能適應數據動態增減的狀況,即數組的大小一旦定義就不能改變。當數據增長是,可能超過原先定義的元素的個數;當數據減小時,形成內存浪費;鏈表動態進行存儲分配,能夠適應數據動態地增減的狀況,且能夠方便地插入、刪除數據項。數組

從內存存儲的角度看;數組從棧中分配空間(用new則在堆上建立),對程序員方便快速,可是自由度小;鏈表從堆中分配空間,自由度大可是申請管理比較麻煩。安全

從訪問方式類看,數組在內存中是連續的存儲,所以能夠利用下標索引進行訪問;鏈表是鏈式存儲結構,在訪問元素時候只可以經過線性方式由前到後順序的訪問,因此訪問效率比數組要低。數據結構

二、鏈表的一些操做,如反轉,鏈表陳釗環路判斷,雙向鏈表,循環鏈表相關操做。數據結構和算法

三、隊列,棧的應用。(好比對壘在消息隊列,站用在遞歸調用中)性能

四、二叉樹的是那種遍歷方式及其遞歸和非遞歸實現,三種遍歷方式的主要應用(後綴表達式),相關的時間複雜度。編碼

五、字符串相關設計

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

字符串拷貝注意異常檢查,好比空指針,字符串重疊,自賦值,字符串結束符‘\0’等。

 

算法部分

一、排序算法:

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

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

(2)、當文件的初態已經基本有序,能夠用直接插入排序和冒泡排序。

(3)、當數據規模較大是,應用速度最快的排序算法,能夠考慮使用快速排序。當記錄隨機分佈的時候,快速排序平均時間最短,可是出現最壞的狀況,這個時候的時間複雜度是O(n^2),且遞歸深度爲n,所需的佔空間爲O(n)。

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

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

二、查找算法

可以熟練寫出或者上級編碼出二分查找的程序。

三、hash算法

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

五、STL

STL(Standard Templete Library)是一個C++領域中,用模板實現的數據結構和算法庫,已經包含在了C++標準庫中,其中的vector,list,stack,queue等結構不只擁有更強大的功能,還有了更高的安全性。除了數據結構外,STL還包含了泛化的迭代器,和運行在迭代器至上的各類使用的算法。這些對於性能要求不是過高,但又不但願本身從底層實現算法的應用仍是很具備誘惑力的。

相關文章
相關標籤/搜索