數據存儲 的目的是便於數據訪問,這個關係就是數據結構面試
算法 是計算機解題的模型:輸入,輸出,順序執行,跳轉,循環,分支,有限步驟算法
人大腦組織數據的方式有線,樹,圖三種邏輯結構,而計算機存儲採用順序,鏈式和二者混合的方式。前者是概念性的東西,後者是物理實現。數據結構
線形結構:算法是迭代算法,你只要注意規模最小的狀況下不出錯,則算法通常不出錯。數據結構和算法
樹形結構:算法是遞歸算法,你只要運用遞歸組合的方法,將簡單情形組合出複雜情形,簡單情形不出錯,則算法通常不會出錯。學習
簡單情形不出錯,則算法通常不會出錯。
圖形結構:DFS:將圖按照樹形結構來處理,運用遞歸算法
BFS:將圖按章線形結構來處理,運用迭代算法
必須會下面幾個幾個算法:
(線形兩個)
1.將兩個有序表合併爲一個表,這個算法的變種不少,能夠是鏈表,順序表。涉及集合運算,
歸併排序,字符串處理。
2.將一個順序表的元素從新劃分,左邊的較小,右邊較大。涉及快速排序,求字符串的逆串。
(樹形若干個)注意:有些能夠實現,有些實現不了,能夠拿來思考。
3.前序線索化,遞歸實現,棧模擬遞歸,非棧式迭代實現。
4.中序線索化,遞歸實現,棧模擬遞歸,非棧式迭代實現。
5.後序線索化,遞歸實現,棧模擬遞歸,非棧式迭代實現。
(圖形)注意:會畫表格,寫出算法的逐個步驟便可。
6.MST:prim,kruskal
7.short path:Dijkstra ,Floyd
8.AOV:拓撲排序的DFS,BFS實現
9.AOE:關鍵路徑
嚴蔚敏數據結構應該怎麼學習。 google
Google 上關於數據結構與算法的回答: url
我屢次在google面試或者畢業招聘的時候看到這樣的情形:學習數據結構和算法--CS課程裏面幾乎最重要的課程--的方式很不科學!!
到不是說你們用的書或者老師用的材料不對,而是說學生們對於這些課程自己的理解很是缺少. spa
打好數據結構和算法基礎的關鍵並不在於對於全部數據結構的細緻的瞭解,不是記住每個大O值或者攤餘成本..((@_@;)? [不懂]).
若是這些知識你都掌握了,固然很棒而且能夠給人留下很深的印象,可是你基本上用不着啊!
你的職業生涯中或許永遠都不會要求你實現一個紅黑樹刪除節點的算法.可是!你必須有能力並且手起刀落輕輕鬆鬆的識別出何時使用二叉樹更簡單更有效, 由於你十分須要這樣的技巧. 排序
因此,不要試圖記住全部的東西.而是從基礎開始,作兩件事: 遞歸
我在google面試的時候,我常常會問一個能夠由二叉樹搜索解決的問題. 好的應聘者能夠幾分鐘內就能夠想到用二叉樹來解決,並且對於個人其餘問題也差很少10-15分鐘就能夠解決.固然,偶爾會有一個應聘者,他能直觀的認識樹這種結構,並且能夠把個人問題形象化,圖形化的描述出來.固然他或許對於某些操做的時間複雜度不甚瞭解,可是對於問題他卻能夠立馬迴應,由於他們腦殼裏就有這樣的樹結構啊~因此他也能拿到工做啊.
至於書嘛,只推薦一本--- <算法導論>
若是你想要一本有不少例子而且和語言相關的書的哈u,我就推薦 <Algorithms in C++ ><Algorithms in Java> 固然我仍是更推薦<算法導論>,不過這些也是很好的教輔書啦~
給一個小小的建議:學數據結構的時候,不要陷入C語言的思惟(固然,也不要陷入其餘語言的思惟)
經過上面幾步學習,基本上就掌握的比較好了,即使過了一段時間,也不會忘的一乾二淨;
對於某個數據結構,幾步:
一、理解該數據結構的基本概念(定義、實現)
二、嘗試理解這個數據結構的意義(爲何它會被髮明)
三、用這種數據結構解決一些對應的例題(書本上的習題、Online Judge上的水題)
四、嘗試用這個數據結構解決一些以往你用別的數據結構解決的問題,可否解決,爲何。
五、再次嘗試理解這個數據結構的意義
六、嘗試改變這個數據結構以應對各類現實的問題(Online Judge的好題)
八、學好數學,別數都不會數。
注:以上回答取材出自知乎 :http://www.zhihu.com/question/19830721