1. 程式人生 > >面試 資料結構 演算法

面試 資料結構 演算法

From: blog.chinaunix.net/u3/100577/showart.php?id=2204671

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

 
 
 
資料結構與演算法,這個部分的內容其實是十分的龐大,要想都覆蓋到不太容易。在校學習階段我們可能需要對每種結構,每種演算法都學習,但是找工作筆試或者面試的時候,要在很短的時間內考察一個人這方面的能力,把每種結構和演算法都問一遍不太現實。所以,實際的情況是,企業一般考察一些看起來很基本的概念和演算法,或者是一些變形,然後讓你去實現。也許看起來簡單,但是如果真讓你在紙上或者是計算機上快速地完成一個演算法,並且設計測試案例,最後跑起來,你就會發現會很難了。這就要求我們要熟悉,並牢固掌握常用的演算法,特別是那些看起來貌似簡單的演算法,正是這些用起來很普遍的演算法,才要求我們能很紮實的掌握,在實際工作中提高工作效率。遇到複雜的演算法,通過分析和紮實的基本功,應該可以很快地進行開發。

閒話少說,下面進入正題。

一.資料結構部分

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 Template Library)是一個C++領域中,用模版技術實現的資料結構和演算法庫,已經包含在了C++標準庫中。其中的vecor,list,stack,queue等結構不僅擁有更強大的功能,還有了更高的安全性。除了資料結構外,STL還包含泛化了的迭代器,和執行在迭代器上的各種實用演算法。這些對於對效能要求不是太高,但又不希望自己從底層實現演算法的應用還是很具有誘惑力的。
 
 

相關推薦

面試 資料結構 演算法

From: blog.chinaunix.net/u3/100577/showart.php?id=2204671 面試常考的常用資料結構與演算法      資料結構與演算法,這個部分的內容其實是十分的龐大,要想都覆蓋到不太容易。在校學習階段我們可能需要對每種結構,每種演算

資料結構演算法常見面試考題

(1) 紅黑樹的瞭解(平衡樹,二叉搜尋樹),使用場景 把資料結構上幾種樹集中的討論一下: 1.AVLtree 定義:最先發明的自平衡二叉查詢樹。在AVL樹中任何節點的兩個子樹的高度最大差別為一,所以它也被稱為高度平衡樹。查詢、插入和刪除在平均和最壞情況下都是O(log n)。增加

java面試-資料結構演算法

1.排序 1.1 氣泡排序 package sort; /** * Created by david on 2018/8/16 * 氣泡排序 */ public class BubbleSort { private static int[] bubbleSort(int

整理I 精選微軟等公司資料結構+演算法面試100題 第1-40題

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

整理III 微軟等資料結構+演算法面試100題 最新第61-80題

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

關於本微軟等公司資料結構+演算法面試100題系列的鄭重宣告

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

彙總I 精選微軟等公司資料結構+演算法面試100題 第1-60題彙總

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

微軟公司等資料結構 演算法面試100題 第1 100題 全部出爐

微軟等100題系列V0.1版終於結束了。從2010年10月11日當天最初發表前40題以來,直至此刻,整理這100題,已有近2個月。2個月,因為要整理這100題,很多很多其它的事都被我強迫性的擱置一旁,如今,要好好專心去做因這100題而被耽誤的、其它的事了。這微軟等資料結構+演算法面試100題系列(是的,系列)

【經典】《Java170道面試筆試題全面含答案》涉及java/資料庫/Spring框架/JVM/資料結構演算法/設計模式相關

《Java170道面試筆試題全集》 -更新版-8.302018/4/7 日常修復2017/12/28 更新文章1、新增二級目錄2、對部分問題進行了補充9/24緊急修改以下問題(存在嚴重錯誤)問題3;完善問題10、11問題目錄:1、面向物件的特徵有哪些方面?2、訪問修飾符pub

精選微軟等公司資料結構+演算法面試100題

1.把二元查詢樹轉變成排序的雙向連結串列  題目: 輸入一棵二元查詢樹,將該二元查詢樹轉換成一個排序的雙向連結串列。 要求不能建立任何新的結點,只調整指標的指向。   10   / /  6 14  / / / / 4 8 12 16  轉換成雙向連結串列 4=6=8=10

微軟公司等資料結構+演算法面試100題2010版全部出爐

微軟等100題系列V0.1版終於結束了。 從2010年10月11日當天最初發表前40題以來,直至此刻,整理這100題,已有近2個月。 2個月,因為要整理這100題,很多很多其它的事都被我強迫性的擱置一旁, 如今,要好好專心去做因這100題而被耽誤的、其它的事了。 這微軟等資料結構+演算法面試100題系列(

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

e最近開始投各種技術類的崗位,於是乎覺得必須補一下之前的資料結構演算法知識了,因為真的很重要!幾乎每家面試都會問到其中的幾個演算法。本文部分演算法是從其他大神博主那邊搬運的,大家可以搜尋相關演算法檢視其他大神的解說和思路~~~~ 穩定性:排序演算法是否穩定,根

ios面試資料結構演算法

1、不用中間變數,變換A和B的值 // 1.中間變數 void swap(int a, int b) { int temp = a; a = b; b = temp; } // 2.加法 void swap(int a, int b) { a =

微軟公司等資料結構+演算法面試100題

微軟等公司資料結構+演算法面試100題(第1-100題)首次完整亮相 關於此100道面試題的所有一切詳情,包括答案,資源下載,帖子維護,答案更新,都請參考此文:橫空出世,席捲Csdn [評微軟等資料結構+演算法面試100題]。橫空出世,席捲Cs

微軟等資料結構+演算法面試100題全部答案集錦

引言 無私分享造就開源的輝煌。 今是二零一一年十月十三日,明日14日即是本人剛好開博一週年。在一週年之際,特此分享出微軟面試全部100題答案的完整版,以作為對本部落格所有讀者的回饋。 一年之前的10月14日,一個名叫July (頭像為手冢

JAVA23種設計模式六大原則,資料結構演算法強化訓練

目錄: 設計模式六大原則(1):單一職責原則 設計模式六大原則(2):里氏替換原則 設計模式六大原則(3):依賴倒置原則 設計模式六大原則(4):介面隔離原則 設計模式六大原則(5):迪米特法則 設計模式六大原則(6):開閉原則 設計模式六大原則(1):單一職責原則 定義:不要存在多於一個導致

資料結構演算法題/top K問題

問題描述:有N(N>>10000)個整數,求出其中的前K個最大的數。(稱作Top k或者Top 10) 問題分析:由於(1)輸入的大量資料;(2)只要前K個,對整個輸入資料的儲存和排序是相當的不可取的。 解決方案1:最小堆 可以利用資料結構的最小堆來處理該問題。最小堆如圖所示

資料結構演算法題/青蛙跳臺階問題

簡單說就是有一隻青蛙每次只能跳一到兩級臺階,在一個給定的臺階數下這隻青蛙有多少種達到頂端的方法。 思路分析 這裡用了兩種方法實現,並用python程式碼實現。 方法一 :遞迴 看到題目第一個想法就是遞迴,假設青蛙跳上n級臺階有f(n)種可能的方法,可以分成兩大類情況。第一種是最後一次跳了一級

資料結構演算法題/將陣列中元素奇數排在前面偶數在後面(前面奇數和後面的偶數分別有序)

一個無序整數陣列,對它排序,使其前半部分都為奇數有序,後半部分為偶數有序。 (1)方案1 O(n^2) 基本想法:利用插入排序演算法,對奇偶子序列分別插入排序。用兩個變數把整個陣列分割為三個部分,第一個部分為奇數有序子序列,第二部分為偶數有序子序列,第三部分為未排序子序列。使用兩個變數進行分

資料結構演算法題/將陣列中元素奇數排在前面偶數在後面(前面奇數和後面的偶數不需要有序)

  處理策略是定義兩個指標pHead,pTail並令其初始指向陣列頭節點和尾節點。pHead從前往後找應該放在尾部的偶數節點,pTail從後往前找應該放在頭部的奇數節點,若pHead位於pTail之前則交換二者內容,否則結束處理過程。 處理流程如下圖所示。從圖中可以看出時間複